使用AWS re:Post即您表示您同意 AWS re:Post 使用条款

如何对 CloudFormation 错误“The role defined for the function cannot be assumed by Lambda”(Lambda 无法代入为函数定义的角色)进行故障排除?

1 分钟阅读
0

我想解决导致我的 Lambda 函数拒绝向其授予 AWS CloudFormation 所需权限的 AWS Identity and Access Management (IAM) 角色的错误。

简短描述

有时,AWS Lambda 函数无法接受在 CloudFormation 上为其定义的 IAM 角色。

解决方法

验证是否将正确的 IAM 角色 ARN 传递给 Lambda 函数

如果 IAM 角色用于该函数的 Amazon 资源名称 (ARN) 已存在于账户中,请确保其语法正确。例如:

  • 检查角色名称拼写是否正确并符合区分大小写的要求。
  • 确保 IAM_ROLE_NAME 与账户中的现有 IAM_ROLE_NAME 完全匹配。例如:
    Role: !Sub arn:${AWS::Partition}:iam::${AWS::AccountId}:role/IAM_ROLE_NAME

对 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 函数。

AWS 官方
AWS 官方已更新 9 个月前