【问题标题】:How to access DynamoDB from AWS Lambda when using the Serverless Framework?使用无服务器框架时如何从 AWS Lambda 访问 DynamoDB?
【发布时间】:2016-05-17 02:56:04
【问题描述】:

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

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

【问题讨论】:

    标签: amazon-web-services amazon-dynamodb aws-sdk aws-lambda serverless-framework


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      编辑:更新了无服务器框架 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),请参阅我的另一个答案 here

      【讨论】:

      • 感谢您的示例。我用过 arn:aws:dynamodb:${region}:*:table/*
      • 针对无服务器版本 1.x 更新
      猜你喜欢
      • 2021-06-03
      • 2021-03-20
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2017-11-20
      相关资源
      最近更新 更多