IAM 作为校长的角色

IAM Role as a Principal

当我尝试在账户 B (111111111111) 中创建此 IAM 策略以便账户 A (2222222222222) 中的角色可以访问特定的 ECR 存储库时,它会出错,指出委托人无效。

Unsupported Principal: The policy type IDENTITY_POLICY does not support the Principal element. Remove the Principal element.

这是无效的政策,如果我要删除主要角色,我不完全明白如何才能达到相同的结果。

{
  "Version": "2012-10-17",
  "Statement": [{
    "Sid": "Sid0",
    "Effect": "Allow",
    "Principal": {
      "AWS": "arn:aws:iam::2222222222222:role/role-name-1"
    },
    "Action": [
      "ecr:DescribeImages",
      "ecr:DescribeRepositories"
      "ecr:BatchCheckLayerAvailability",
      "ecr:GetDownloadUrlForLayer",
      "ecr:GetRepositoryPolicy",
      "ecr:ListImages",
      "ecr:BatchGetImage",
      "ecr:GetAuthorizationToken"
    ],
    "Resource": [
      "arn:aws:ecr:us-west-1:111111111111:repository/ecr-name-1"
    ]
    }]
}

当您使用 identity-based policies 时,一旦您将策略附加到 IAM 用户或角色,策略的 Principal 就会 自动 推断。在这种情况下,给定的 user/role 变为 Principal。因此您没有明确指定它。

相反,对于resource-based policies,例如S3 bucket policy,您必须指定Principal。这是因为这些策略 绑定到资源 ,而不绑定到任何 IAM 用户或角色。因此,您必须为它们显式定义 Principal

你似乎在做的是 IAM role chaining

IAM 策略不能有主体。只有资源策略(例如 S3 存储桶策略)可以。 IAM 策略中的委托人始终隐式地是进行 API 调用的身份,该调用正在根据策略进行评估。

IAM 角色具有定义必须满足哪些条件才能允许其他委托人担任该角色的信任策略。你需要做两件事:

  1. 假定身份必须有权对 to-be-assumed 角色执行 AssumeRole(您在账户 A 中的 IAM 角色策略中执行此操作)
  2. to-be-assumed 角色必须允许代入身份代入角色(您在账户 B 的信任策略中这样做)

有关更多信息,请参阅 How to use trust policies with IAM roles