AWS 服务委托人是否在政策文件中隐含地界定了账户范围?

Are AWS service principals implicitly account scoped in policy documents?

考虑为帐户 A 中的 IAM 角色配置的以下信任关系:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "cloudformation.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

这是否隐含地将访问范围缩小到帐户 A 中的 cloudformation 运行,或者任何其他帐户(B、C、D 等)中的 cloudformation 堆栈是否可以承担此角色?

我之前使用 sourceArn 条件来避免代理攻击,如下所示:

"Condition": {
        "ArnLike": {
          "aws:SourceArn": [
            "xxxx"
           ]
        }
 }

这是否必要,或者初始策略是否足以将信任关系范围缩小到帐户 A?

此策略允许 CloudFormation 服务承担您帐户中的角色。

默认情况下,这也适用于您的帐户,即只有您帐户中的 CloudFormation 可以承担该角色,而其他帐户中的 CloudFormation 则不能。您必须 显式 添加具有另一个帐户 ID 的委托人,以允许从另一个帐户中的 CloudFormation 进行跨帐户访问 - 看起来像这样:

"Principal": {
    "AWS": "123456789012"
    "Service": "cloudformation.amazonaws.com"
},

需要明确的是,用户需要具有以下权限才能将角色传递给服务。

  • “iam:GetRole”
  • “iam:PassRole”

如果您的 IAM 角色 Arn 没有这些权限,他们就无法将其传递给 CloudFormation 服务以允许其被代入。

所以简而言之,除了能够承担角色的服务之外,user/role 还需要传递 IAM 角色 arn 的权限。

Granting a user permissions to pass a role to an AWS service 文档中提供了更多信息。