amazon-web-services - Lambda 调用失败,没有权限错误
问题描述
我在 cloudformation 模板中有一个引用 lambda 函数的自定义资源。在 lambda 函数中,我编写了将项目推送到 DynamoDB 表中的代码。但是,在创建 cloudformation 堆栈时操作失败。错误如下:
用户:arn:aws:sts::551250655555:assumed-role/custom-resource-stack-CustomResourceLambdaExecutio-1OX3T8494LEP5/custom-resource-stack-CustomResourceFunction-1GLEDE3BEPWDP 无权执行:dynamodb:DescribeTable 资源:arn:aws: dynamodb:us-east-1:551250655555:table/MasterTable1
我的 lambda 函数名称是:custom-resource-stack-CustomResourceFunction-1GLEDE3BEPWDP
我创建的自定义角色是:custom-resource-stack-CustomResourceLambdaExecutio-1OX3T8494LEP5
但是,在我的无服务器模板文件中,我提供了以下权限:
"CustomResourceLambdaExecutionPolicy": {
"DependsOn": ["CustomResourceLambdaExecutionRole"],
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyName": "CustomResourceLambdaExecutionPolicyDocument",
"Roles": [{
"Ref": "CustomResourceLambdaExecutionRole"
}],
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [{
"Sid": "DynamoDBAccess",
"Action": "dynamodb:*",
"Effect": "Allow",
"Resource": "*"
},
{
"Sid": "CloudwatchLogGroupAccess",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Effect": "Allow",
"Resource": "*"
}
]
}
}
}
它可以访问所有 dynamodb 操作和表。关于我在这里做错了什么的任何想法。
解决方案
您正在经历比赛条件。
Lambda 函数取决于 IAM 角色,但不取决于策略。因此,在将 IAM 策略附加到角色之前调用该函数。
如果您将策略添加到角色作为应该修复它的 IAM 角色定义的一部分。您还可以使 Lambda 函数依赖于 IAM 策略。
推荐阅读
- windows - 有没有办法拒绝批处理脚本中不需要的输入?
- linux - 为什么linux内核有。沙。C、他们如何一起工作
- python - 如何使用 xpath 从类似的类中获取文本?
- r - 有没有办法在 R 中合并回归摘要列表?
- oracle - 级联 LOV - 更新记录时编号无效 - Oracle Apex
- javascript - 如果页面无法滚动,默认显示导航栏
- c++ - 无法从 C++ 中的类中访问私有成员?
- javascript - Expo Publish 因读取 ECONNRESET 错误而失败
- flutter - 在 Flutter 中构建失败
- database - 在 Apache Cassandra 的地图列表中更新值的查询是什么?