首页 > 解决方案 > 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 操作和表。关于我在这里做错了什么的任何想法。

标签: amazon-web-servicesaws-lambdaaws-iamamazon-iam

解决方案


您正在经历比赛条件。

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

如果您将策略添加到角色作为应该修复它的 IAM 角色定义的一部分。您还可以使 Lambda 函数依赖于 IAM 策略。


推荐阅读