为什么CodePipeline服务角色需要iam:PassRole?

问题描述 投票:0回答:1

我正在阅读 AWS 文档,解释如何创建 CodePipeline 服务角色。但是,我不明白为什么需要以下声明:

{
  "Effect": "Allow",
  "Action": [
     "iam:PassRole"
   ],
   "Resource": "*"
}

RolePolicy.json
文件内。

不要求解释什么是

iam:PassRole
以及我们一般使用它的原因和时间。据我所知,它允许主体将角色传递给另一个服务。然而,我很困惑为什么我们需要它,特别是在 CodePipeline 服务中。所以,

Q1:在这种情况下,主体是什么,角色是什么,服务是什么?
Q2:使用起来不是不安全吗

"Resource": "*"

更新 特别针对亲密选民滥用者:我提出两个问题,因为它们是相关且不可分割的。是否最好再创建一篇具有相同文本的帖子并提出不同的问题?抱歉,听起来很标准

amazon-web-services aws-cloudformation aws-codepipeline aws-iam-policy
1个回答
0
投票

假设您正在构建 CodePipeline 来部署由 RDS 数据库组成的 CloudFormation 堆栈。

在 CodePipeline 中设置 CloudFormation 部署操作时,您需要指定 CloudFormation 可用于执行部署的角色(授予权限,例如

rds:CreateDBInstance
)。调用操作时,此角色 (resource) 将从 CodePipeline (principal) 传递到 CloudFormation (service)。当您导航到 CloudFormation 控制台时,您将在堆栈信息中找到相同的角色 ARN。

另一个示例是 ECS 的部署操作,其中 CodePipeline 传递新任务定义的任务执行角色。

您是对的,在 IAM 策略中使用

Resource": "*"
过于宽泛。 AWS 文档中提供的角色可以涵盖广泛的案例,并且通常可以缩小范围。例如:

  • iam:PassRole
    权限可以仅限于管道设计传递的角色

  • 可以添加条件以允许角色仅传递给特定服务(本例中为 CloudFormation):

      {
          "Effect": "Allow",
          "Action": "iam:PassRole",
          "Resource": "arn:aws:iam::000000000000:role/your-cloudformation-deployment-role",
          "Condition": {
              "StringEqualsIfExists": {
                  "iam:PassedToService": [
                      "cloudformation.amazonaws.com"
                  ]
              }
          }
      }
    
© www.soinside.com 2019 - 2024. All rights reserved.