使用无服务器框架时如何从 AWS Lambda 访问 DynamoDB?

How to access DynamoDB from AWS Lambda when using the Serverless Framework?

我正在使用 Serverless Framework 来管理我的 AWS Lambda 部署。框架凭据可以访问 DynamoDB 资源,但使用框架部署的我的 Lambda 无法访问我的 DynamoDB 表。

如何为我的 Lambda 函数提供正确的访问权限?

虽然我不熟悉 Serverless 的工作方式,但您正在寻找的是 IAM Role.

您可以为 EC2 实例或 AWS Lambda 函数分配一个角色,这样您编写的使用 AWS SDK 的代码将能够自动检索具有与该角色关联的权限的 AWS 凭据。对于 AWS Lambda 和您的用例,您需要向您分配 AWS Lambda 的角色授予访问它需要的 DynamoDB 表的权限 运行。

这可能使用起来非常简单,您只需不提供凭据就可以正常工作(只要角色具有正确的权限)! AWS 开发工具包通过自动检索与角色关联的凭证来为您处理一切。

根据您提供的link,根据最佳实践引用此内容的具体问题是Credentials from IAM Roles for EC2 Instances,其中它指的是 EC2 实例,但这也适用于 AWS Lambda。

编辑:更新了无服务器框架 1.x 的答案。

解决方案是设置 iamRoleStatements 以允许 Lambda 访问 DynamoDB 资源。注意:Serverless Framework 使用的凭据必须具有相同 DynamoDB 资源的权限。

  1. 在您的 serverless.yml:

    中添加 iamRoleStatements
    provider:
      name: aws
      runtime: nodejs4.3
      stage: dev
      region: us-east-1
      iamRoleStatements:
        - Effect: "Allow"
          Action:
            - "dynamodb:*"
          Resource: "arn:aws:dynamodb:${self:provider.region}:*:table/*"
    
  2. 部署更改:

    > serverless deploy
    

要在函数级别授予权限(而不是允许所有函数访问 DynamoDB),请参阅我的其他答案