【问题标题】:AWS IAM - Who is the Principal in the context of Assume Role?AWS IAM - 谁是担任角色上下文中的委托人?
【发布时间】:2024-04-12 14:55:01
【问题描述】:

目标

消除在 AWS 中执行的操作的主体是什么/谁是承担 IAM 角色的混淆。

背景

IAM 角色具有定义谁可以担任该角色的信任关系选项卡。

用 JSON 来描述。

statement {
  sid    = "1"
  effect = "Allow"

  principals {
    identifiers = ["elastictranscoder.amazonaws.com"]
    type        = "Service"
  }
  actions = ["sts:AssumeRole"]
}

根据Roles Terms and Concepts,可以担任角色的人必须是用户或角色。

校长
AWS 中可以执行操作和访问资源的实体。委托人可以是 AWS 账户根用户、IAM 用户或角色。您可以通过以下两种方式之一授予访问资源的权限:

信任政策
JSON 格式的文档,您可以在其中定义允许担任该角色的人员。该可信实体作为文档中的主要元素包含在策略中。

问题

如果我使用我的 AWS 账户发出 assume-role 命令以获取临时凭证,然后运行一个操作,例如,谁/什么是委托人?转码视频文件?根据 AWS 文档,它必须是用户或角色。

  1. elastictranscoder.amazonaws.com?
  2. 定义与 elastictranscoder.amazonaws.com 的信任关系的角色?
  3. 我的用户帐户?

如果是elastictranscoder.amazonaws.com,那么:

  1. 这是用户还是角色?
  2. 从审计的角度来看,elastictranscoder.amazonaws.com 是否记录为执行该操作的主体?我在哪里可以确定谁在何时以及如何成为 elastictranscoder.amazonaws.com?

【问题讨论】:

    标签: amazon-web-services access-control amazon-iam


    【解决方案1】:

    AWS IAM 可以被认为是对 3 件事的抽象:

    1. 身份(角色、用户、用户组)
    2. 策略(基于身份的策略、基于资源的策略)
    3. 资源(AWS 资源)。

    json 由元素组成,“Principal”是“Policy”json 文档中的 json 元素之一。主要元素仅存在于基于资源的策略 json 中。

    主体抽象与身份抽象处于同一抽象级别。它扩展了身份抽象,并由细粒度身份标识,即亚马逊资源名称 (ARN)。它仅与基于资源的策略一起使用。

    Principal 元素用于指定 AWS 账户、AWS 服务、IAM 角色、IAM 用户、联合用户等实体,而 actions 元素指定了委托人可以执行的操作。

    阿法伊克, 在你的情况下, 当您使用我的 AWS 账户发出假设角色命令以获取临时凭证时,不涉及主体,因为不涉及资源策略,它只是基于身份的策略,它让您的 IAM 角色承担角色。

    【讨论】:

    【解决方案2】:

    当您通过 CLI 或其他方式发出 AssumeRole API 时,委托人是正在使用其凭据的身份。例如,如果您使用 IAM 用户的凭证代入角色,则委托人就是 IAM 用户。

    由于 AssumeRole API 成功,您会收到临时凭证,当您使用这些临时凭证执行任何操作时,委托人将成为 IAM 角色。

    在您的示例中,您信任“elastictranscoder.amazonaws.com”,即 Elastic Transcoder 服务本身。您可以在 CloudTrail 日志中审核服务使用角色的方式。

    【讨论】:

    • 我唯一要添加的是 OP 示例中的承担角色操作中的委托人将是 AWS Elastic Transcoder 服务,而不是用户。
    最近更新 更多