Lambda调用失败,没有权限错误

时间:2018-10-03 12:58:39

标签: amazon-web-services aws-lambda aws-iam amazon-iam

我在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操作和表。关于我在这里做错的任何想法。

1 个答案:

答案 0 :(得分:1)

您正在遇到比赛状况。

Lambda函数取决于IAM角色,而不取决于策略。因此,在将IAM策略附加到角色之前,将调用该函数。

如果您将策略添加到角色中,作为应该对其进行修复的IAM角色定义的一部分。 您还可以使Lambda函数取决于IAM策略。