如何允许一个组扮演一个角色?

71

如何允许AWS IAM中的一个组内的所有成员扮演一个角色?

我尝试使用以下语句,但根据AWS IAM Principal元素中的规定,一个组不能是主体。

我想实现以下目标:

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

这个想法是希望组中所有成员group/developer都能够承担该角色。目标是我不必逐个指定组中的每个成员。

有没有方法可以实现这一点?


你希望他们扮演什么角色?可以提供一个样本ARN吗? - Rodrigo Murillo
该角色也被命名为开发人员:因此 ARN 将类似于 arn:aws:iam::***:role/developer - Rentrop
4个回答

69

将策略附加到群组,以授予权限在所需角色上调用 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"
    }
  ]
}

14
这样做是正确的,但信任策略信任该账户中的所有用户,而不是只信任IAM组中的用户。这仅由策略的资源级别控制,但我认为Floo0想要在信任关系中指定“仅限于组中的用户”,这是不可能的 :( - user4998164
4
@John Rotenstein,感谢你提供的解决方案 (+1)。在深入挖掘后,我也找到了这个解决方案。正如Tom所指出的,这个解决方案“禁用”了假定角色的双重安全性。特别是对于跨账户角色扮演,我认为这有点“冒险”…… - Rentrop
你需要更改主体以使用组的 ARN。我猜他只是复制了一个允许 :root 用户的示例。 - kgpdeveloper
17
错误;正如问题所述,组不是 IAM 策略的有效主体。 - LegendaryDude
@John Rotenstein,感谢您的解决方案(+1)。我们现在正在使用基于AWS STS的解决方案,这是您的推荐。 - Abhijit Srivastava
嘿,Josh,我在这个问题上遇到了麻烦,并在一个单独的问题中询问,如果你有时间提供一些解释,那就太好了。 - KyleMit

21

33
有趣的是,假定角色文档中提到“最佳实践是不直接向个人用户授予权限。为了更容易管理,我们建议将策略分配和权限授权给 IAM 组,然后将用户设置为相应组的成员。”但实际上无法按照他们的指导去做? - Kief
3
AWS讨论论坛中存在长期问题。 - Dominik

12
截至2018年12月(不确定撰写时是否准确),上述关于限制组的陈述有些含糊不清。我想补充 / 澄清接受的答案:
1)仅信任sts:AssumeRole到root用户只可能允许任何用户扮演所涉及的角色。除非您也授予某个用户或组扮演角色的权限,否则将不会被允许。
2)如果像我一样,由于资源存在不同的堆栈和/或循环依赖关系而无法具有组定义中指定的权限,则用于定义与组关联的策略的代码是:
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

请注意,在下面,您需要列出组名称,而不是ARN。


感谢进一步的澄清。从那个答案中,我理解“root”是该组的名称,这个解释应该被添加到被接受的答案中。 - AFP_555

-1

这可以用不同的方式完成。但是,不确定这是否符合您的要求。

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

同样,可以通过AWS控制台或AWS SDK实现,而不是使用CLI。请参见将策略附加到IAM组

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


这个解决方案并不是原问题所要求的。它根本没有处理假定角色,并且只授予原始组的权限。 - David Beleznay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接