我正在使用无服务器框架来管理我的 AWS Lambda 部署。框架凭证可以访问 DynamoDB 资源,但与框架一起部署的 Lambda 无法访问我的 DynamoDB 表。
如何为我的 Lambda 函数提供适当的访问权限?
我正在使用无服务器框架来管理我的 AWS Lambda 部署。框架凭证可以访问 DynamoDB 资源,但与框架一起部署的 Lambda 无法访问我的 DynamoDB 表。
如何为我的 Lambda 函数提供适当的访问权限?
编辑:更新了无服务器框架 1.x 的答案。
解决方案是设置iamRoleStatements以允许 Lambda 访问 DynamoDB 资源。注意:无服务器框架使用的凭证必须对相同的 DynamoDB 资源具有权限。
在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/*"
部署更改:
> serverless deploy
要在函数级别授予权限(而不是允许所有函数访问 DynamoDB),请在此处查看我的其他答案。
虽然我不熟悉 Serverless 的工作方式,但您正在寻找的是IAM Role。
您可以将角色分配给 EC2 实例或 AWS Lambda 函数,以便您编写的使用 AWS 开发工具包的代码能够自动检索具有与该角色关联的权限的 AWS 凭证。对于 AWS Lambda 和您的使用案例,您需要授予您分配 AWS Lambda 访问它运行所需的 DynamoDB 表的角色。
这使用起来可能非常简单,您只需不提供凭据,它就可以工作(只要角色具有正确的权限)!AWS 开发工具包通过自动检索与角色关联的凭证为您处理一切。
从您提供的链接中,在最佳实践中引用此问题的具体问题是Credentials from IAM Roles for EC2 Instances
它指的是 EC2 实例,但这也适用于 AWS Lambda。