未授权CloudFormation执行:资源上的iam:PassRole

Sec*_*Two 2 amazon-web-services aws-cloudformation amazon-iam aws-lambda

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

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:
Run Code Online (Sandbox Code Playgroud)

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

未授权CloudFormation执行:资源上的iam:PassRole

有人可以帮忙吗?

Joh*_*ein 7

虽然我不能具体说出您所遇到的情况,但是错误消息表示CloudFormation用于部署资源的角色/用户没有适当的iam:PassRole权限。

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

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

启动CloudFormation模板时,它会以正在创建堆栈的用户的身份来配置资源,或者使用启动堆栈时指定的IAM角色。需要iam:PassRole权限才能使用的是用户/角色FnRole


Sec*_*Two 5

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

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

你应该:

  • IAM > Roles
  • 输入搜寻 CodeStarWorker-AppConfig-CloudFormation
  • 打开该角色并转到 Permissions
  • 查找CodeStarWorkerCloudFormationRolePolicy,展开,继续Edit policy
  • 在下面的资源部分中,添加您的角色(arn:aws:iam::579913947261:role/FnRole)的ARN ,如果您没有该部分,则只需复制并粘贴该角色,然后在Resources您的ARN中使用。

政策:

{
    "Action": [
        "iam:PassRole"
    ],
    "Resource": [
        "arn:aws:iam::156478935478:role/CodeStarWorker-AppConfig-Lambda",
        "arn:aws:iam::579913947261:role/FnRole"
    ],
    "Effect": "Allow"
}
Run Code Online (Sandbox Code Playgroud)

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

"Resource": "*",
"Effect": "Allow"
Run Code Online (Sandbox Code Playgroud)

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