我怎样才能让一个组承担一个角色?

How can I allow a Group to assume a Role?

如何允许一个组的所有成员在 AWS IAM 中承担一个角色?

我尝试使用以下语句,但如 AWS IAM Principal Element 中所述,组不能是主体。

我想实现如下目标:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::***:group/developer"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

想法是组 group/developer 的所有成员都应该能够承担这个角色。 objective 是我应该不必单独指定组中的每个成员。

有办法实现吗?

这可以通过不同的方式完成。但是,不确定这是不是你想要的。

1) 使用 create-policy 创建策略。
2) 使用 attach-role-policy.
将策略附加到 arn:aws:iam::***:role/developer 角色 3) 使用 create-group.
创建预期的 Group 4) 使用 attach-group-policy 将指定的托管策略附加到指定的组。

同样可以通过 AWS 控制台或 AWS SDK 而不是使用 CLI 来实现。请参阅 Attaching a Policy to an IAM Group

这样,您就不必为组中的每个成员单独添加角色。

将策略附加到组,授予对所需角色调用sts:AssumeRole的权限:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "123",
            "Effect": "Allow",
            "Action": [
                "sts:AssumeRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/desired-role"
            ]
        }
    ]
}

另外,附加一个关于角色的信任策略。示例策略(下方)信任帐户中的任何用户,但他们还需要 sts:AssumeRole 权限(上方)才能承担该角色。

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::123456789012:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

您不能将 IAM 组指定为委托人。

您使用 AWS 账户、IAM 用户、IAM 角色、联合用户或代入角色用户的 Amazon 资源名称 (ARN) 指定委托人。您不能将 IAM 组指定为委托人。

根据 AWS 中的文档 https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_principal.html

截至 2018 年 12 月(在撰写本文时不知道它们是否正确)上面表达的一些关于对群体的限制的陈述听起来具有误导性。

我想add/clarify接受的答案:

1) 信任 sts:AssumeRole..:root 用户 仅可能 允许任何用户担任相关角色。除非您也授予某些用户或组承担该角色的权限,否则将不允许。

2) 如果你像我一样,由于资源存在于不同的堆栈中而无法拥有组定义中指定的权限 and/or 循环依赖,定义与组关联的策略的代码是:

DevelopersAccess:
    Type: AWS::IAM::Policy
    Properties:
    Groups:
        - !ImportValue another-stack-DevelopersGroupNameNotArn
    PolicyName: DevelopersAccess
    PolicyDocument:
        Version: 2012-10-17
        Statement:
        - Effect: Allow
            Action:
            - sts:AssumeRole
            Resource:
            - arn:aws:iam::123456789012:role/desired-role

请注意,在 Groups 下,您必须列出组名称,而不是 ARN。