11

我正在使用无服务器框架来管理我的 AWS Lambda 部署。框架凭证可以访问 DynamoDB 资源,但与框架一起部署的 Lambda 无法访问我的 DynamoDB 表。

如何为我的 Lambda 函数提供适当的访问权限?

4

2 回答 2

18

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

解决方案是设置iamRoleStatements以允许 Lambda 访问 DynamoDB 资源。注意:无服务器框架使用的凭证必须对相同的 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),请在此处查看我的其他答案。

于 2016-02-07T16:09:28.773 回答
4

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

您可以将角色分配给 EC2 实例或 AWS Lambda 函数,以便您编写的使用 AWS 开发工具包的代码能够自动检索具有与该角色关联的权限的 AWS 凭证。对于 AWS Lambda 和您的使用案例,您需要授予您分配 AWS Lambda 访问它运行所需的 DynamoDB 表的角色。

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

从您提供的链接中,在最佳实践中引用此问题的具体问题是Credentials from IAM Roles for EC2 Instances它指的是 EC2 实例,但这也适用于 AWS Lambda。

于 2016-02-07T14:32:23.117 回答