我在cloudformation模板中有一个自定义资源,该资源引用了lambda函数。在lambda函数内部,我编写了代码以将项目推入DynamoDB表中。但是,在创建cloudformation堆栈时,该操作失败。错误如下:
用户:arn:aws:sts :: 551250655555:assumed-role / custom-resource-stack-CustomResourceLambdaExecutio-1OX3T8494LEP5 / custom-resource-stack-CustomResourceFunction-1GLEDE3BEPWDP未经授权执行:dynamodb:DescribeTable on resource: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操作和表。关于我在这里做错的任何想法。
答案 0 :(得分:1)
您正在遇到比赛状况。
Lambda函数取决于IAM角色,而不取决于策略。因此,在将IAM策略附加到角色之前,将调用该函数。
如果您将策略添加到角色中,作为应该对其进行修复的IAM角色定义的一部分。 您还可以使Lambda函数取决于IAM策略。