我想解决导致我的 Lambda 函数拒绝向其授予 AWS CloudFormation 所需权限的 AWS Identity and Access Management (IAM) 角色的错误。
简短描述
有时,AWS Lambda 函数无法接受在 CloudFormation 上为其定义的 IAM 角色。
解决方法
验证是否将正确的 IAM 角色 ARN 传递给 Lambda 函数
如果 IAM 角色用于该函数的 Amazon 资源名称 (ARN) 已存在于账户中,请确保其语法正确。例如:
对 IAM 角色及其关联策略进行故障排除
查看为 Lambda 函数的代入角色定义的 IAM 策略。验证 IAM 角色是否拥有所有必要的权限。确保策略的 Principal(主体)部分配置正确,如下所示:
LambdaExecutionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
解决 IAM 角色和 Lambda 函数之间的依赖项
如果 IAM 角色和 Lambda 函数是在不同的堆栈中创建的,则先创建角色。如果堆栈中的 Lambda 函数首先启动,则堆栈可能会因此错误而失败。
最佳做法是在与 Lambda 函数相同的堆栈中创建 IAM 角色。使用内置函数(例如 GetAtt 和 !Ref)将 IAM 角色传递给 Lambda 函数。