如果角色的信任策略中未描述用户,IAM 用户是否可以承担角色?

Can IAM user assume a role, if the user is not described in the Trust policy of the role?

如果角色没有信任策略,是否可以代入? 如果给定的 IAM 用户具有附加的基于身份的策略,表明 he/she 可以为给定角色(在同一帐户内)调用 sts:AssumeRole,但该角色的信任策略中未描述该用户, he/she 可以担任这个角色吗?

通常只有基于资源的策略或基于身份的策略应该足以为用户赋予权限,但对于角色来说是否不同?

谢谢

will he/she be able to assume the role?

是的,当然 she/he 可以做到,只要信任策略允许该帐户承担该角色。例如,角色必须具有信任策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "<account-number>"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}

这样,您的 IAM 用户不需要 在信任策略中明确列出,但信任策略是必需的,至少您应该指定可以承担它的帐户.但缺点是 <account-number> 帐户中具有 sts:AssumeRole 权限的任何 IAM 用户或角色 都可以承担该角色。

it does not have a Trust policy?

需要信任策略,因此如果没有这样的策略,您将无法拥有角色。

更新

假设您有一个具有信任策略的角色:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::xxxxxx:user/UserA"
      },
      "Action": "sts:AssumeRole",
      "Condition": {}
    }
  ]
}

该角色只能由用户 A承担。 UserB 将无法采用此策略,无论他的权限如何。

信任策略指定可以承担其所附加角色的“委托人”。该委托人可以是各种不同类型的实体,例如 AWS 服务(例如创建应用于 EC2 实例的角色)或另一个 AWS 账户的标识符(授予跨账户访问权限)。不能省略也不能是通配符。

如果委托人识别一个 AWS 账户,那么它信任 整个 AWS 账户。从某种意义上说,该帐户中的所有 用户都已包含在信任策略中,但要担任该角色,他们 需要权限才能进行适当的操作AssumeRole API 调用。 责任委托给其他 AWS 账户的管理员,以决定哪些用户应该能够担任该角色。

这可用于创建帐户的分层排列:

  • 所有用户都在一个没有其他资源的 AWS 账户中创建。
  • 实际资源 - EC2 实例、S3 存储桶等 - 在单独的 AWS 账户中。
  • 每个帐户都定义了授予对其中一些服务的访问权限的角色,其中的信任策略将中央帐户列为委托人。这些角色不会将单个用户或组列为受信任的,它们只是定义权限集。
  • 中央帐户中的每个用户都被授予 AssumeRole 访问权限,以访问不同帐户中适当的角色子集。效果类似于使用组或托管策略授予多个用户相同的访问权限。