【问题标题】:CloudFormation is not authorized to perform: iam:PassRole on resourceCloudFormation 无权执行:iam:PassRole on resource
【发布时间】:2019-01-25 10:34:16
【问题描述】:

这是我在 Cloud9 中template.yml 的部分代码:

Type: 'AWS::Serverless::Function'
Properties:
  Handler: index.handler
  Runtime: nodejs6.10
  CodeUri: .
  Description: Updates records in the AppConfig table.
  MemorySize: 128
  Timeout: 3
  Role: 'arn:aws:iam::579913947261:role/FnRole'
  Events:
    Api1:
      Type: Api
      Properties:

当我在 Cloud9 中提交更改时,部署在 CodePipeline 部署阶段失败,同时尝试 ExecuteChangeSet。我收到此错误:

CloudFormation 无权执行:iam:PassRole on resource

谁能帮忙?

【问题讨论】:

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


    【解决方案1】:

    您只需将其放入您的政策中

     {
            "Sid": "PolicyStatementToAllowUserToPassOneSpecificRole",
            "Effect": "Allow",
            "Action": [ "iam:PassRole" ],
            "Resource": "arn:aws:iam::<account-id>:role/RDS-Monitoring-Role"
        }
    

    链接https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html

    【讨论】:

      【解决方案2】:

      为了使我们能够减少人们与 AWS 相处的复杂性。

      必须更新策略 Json 中的操作部分。

      "iam:PassRole"
      

      应添加到策略文件中的操作块括号中。

      【讨论】:

        【解决方案3】:

        如果您将角色名称更改为:RoleName: 'arn:aws:iam::579913947261:role/FnRole'

        要包含 CodeStar-${ProjectId} 的前缀,则可以创建/更新/等角色,而无需修改 CodeStarWorker-AppConfig-CloudFormation 角色的 IAM 策略。例如 RoleName: !Sub 'CodeStar-${ProjectId}-[FunctionName]'

        我在这里发布了完整的解释:Change IAM Role for a Lambda in a CloudFormation template in a CodeStar project?

        【讨论】:

          【解决方案4】:

          用户:arn:aws:sts::156478935478:assumed-role/CodeStarWorker-AppConfig-CloudFormation/AWSCloudFormation 无权执行:iam:PassRole on resource:arn:aws:iam::156478935478:role/service-角色/FnRole(服务:AWSLambda;状态代码:403;错误代码:AccessDeniedException;请求 ID:129f601b-a425-11e8-9659-410b0cc8f4f9)

          从此日志中,您可以了解需要为您的堆栈 (CodeStarWorker-AppConfig-CloudFormation) 分配什么策略 (iam:PassRole) 给 CloudFormation 角色。

          你应该:

          • IAM &gt; Roles
          • 输入搜索CodeStarWorker-AppConfig-CloudFormation
          • 打开该角色并转到Permissions
          • 找到CodeStarWorkerCloudFormationRolePolicy,展开它,转到Edit policy
          • 在资源下的以下部分中,添加您角色的 ARN (arn:aws:iam::579913947261:role/FnRole),如果您没有该部分,只需复制并粘贴此部分,但在 Resources 下使用您的 ARN。

          政策:

          {
              "Action": [
                  "iam:PassRole"
              ],
              "Resource": [
                  "arn:aws:iam::156478935478:role/CodeStarWorker-AppConfig-Lambda",
                  "arn:aws:iam::579913947261:role/FnRole"
              ],
              "Effect": "Allow"
          }
          

          如果您想将该权限分配给所有资源 ("Resource": "*"),请在操作下找到以下部分及以上添加您要分配的权限:

          "Resource": "*",
          "Effect": "Allow"
          

          您可以将此应用于您想为您的资源分配给 CloudFormation 的所有其他权限。

          【讨论】:

          • 感谢@John Rotenstein 帮助格式化答案,并希望我可以将您的答案标记为有用,但我需要获得 15 名声望。
          • 回答自己的问题不会获得声誉。这就是堆栈溢出的工作原理。
          • @SecondOfTwo 的回答有一个小问题,如果它是 AWS 托管策略,则无法对其进行编辑,这通常是使用 codepipeline 的情况。只需创建一个附加到角色的新策略。
          【解决方案5】:

          虽然我无法具体说明您的情况发生了什么,但错误消息意味着 CloudFormation 用于部署资源的角色/用户没有适当的iam:PassRole 权限。

          将角色分配给资源时使用iam:PassRole 权限。例如,当使用 IAM 角色启动 Amazon EC2 实例时,启动实例的实体需要指定要使用的 IAM 角色的权限。这样做是为了防止用户获得过多的权限。例如,不应允许非管理用户启动具有管理角色的实例,因为这样他们就可以访问他们无权获得的其他权限。

          就您的模板而言,CloudFormation 似乎正在创建一个函数并将FnRole 权限分配给该函数。但是,CloudFormation 模板未被授予将此角色分配给函数的权限

          启动 CloudFormation 模板时,它要么将资源配置为创建堆栈的用户,要么使用启动堆栈时指定的 IAM 角色。正是该用户/角色需要iam:PassRole 权限才能使用FnRole

          【讨论】:

          • 感谢您的信息。抱歉,我应该发布更多日志信息。用户:arn:aws:sts::156478935478:assumed-role/CodeStarWorker-AppConfig-CloudFormation/AWSCloudFormation 无权执行:iam:PassRole on resource:arn:aws:iam::156478935478:role/service-role/FnRole (服务:AWSLambda;状态代码:403;错误代码:AccessDeniedException;请求 ID:129f601b-a425-11e8-9659-410b0cc8f4f9)我知道我需要授予 CloudFormation 权限,但我不知道该怎么做在哪里。
          • @John Rotenstein 准确且解释清楚的答案。
          猜你喜欢
          • 1970-01-01
          • 2021-10-14
          • 2019-02-12
          • 2017-02-02
          • 1970-01-01
          • 2016-04-19
          • 1970-01-01
          • 1970-01-01
          • 2023-03-19
          相关资源
          最近更新 更多