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

时间:2018-08-18 18:09:53

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

这是我在Cloud9中ExecuteChangeSet的代码的一部分:

{{1}}

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

  

CloudFormation无权执行:资源上的iam:PassRole

有人可以帮忙吗?

5 个答案:

答案 0 :(得分:5)

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

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

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

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

答案 1 :(得分:1)

  

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

从此日志中,您可以知道需要为堆栈(iam:PassRole)的CloudFormation角色分配什么策略(CodeStarWorker-AppConfig-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"
}

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

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

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

答案 2 :(得分:0)

如果您从以下位置更改角色名称: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?

答案 3 :(得分:0)

为实现这一目标,我们减少了人们与AWS相处的复杂性。

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

"iam:PassRole"

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

答案 4 :(得分:0)

您只需要将其纳入您的政策

 {
        "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