【问题标题】:Lambda call fails with no permission errorLambda 调用失败,没有权限错误
【发布时间】:2019-03-08 17:11:42
【问题描述】:

我在 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-services aws-lambda aws-iam amazon-iam


    【解决方案1】:

    您遇到了竞争状况。

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

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

    【讨论】:

    • 这很好用。这是我更新的策略:“DependsOn”:[“DynamoDBMasterTable1”,“DynamoDBMasterTable2”,“CustomResourceLambdaExecutionPolicy”]
    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 1970-01-01
    • 2021-04-06
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多