AWS RAM 的术语和概念 - AWS Resource Access Manager

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS RAM 的术语和概念

以下概念有助于解释如何使用 AWS Resource Access Manager (AWS RAM) 来共享资源。

资源共享

利用 AWS RAM,您可通过创建资源共享 来共享资源。资源共享包含以下三个要素:

  • 要共享的一个或多个 AWS 资源的列表。

  • 要向其授予资源访问权限的一个或多个主体的列表。

  • 共享中包含的每种资源的托管权限。每项托管权限适用于该资源共享中该类型的所有资源。

使用 AWS RAM 创建资源共享后,可以向资源共享中指定的主体授予访问该共享资源的权限。

  • 如果您开启与 AWS Organizations 的 AWS RAM 共享,并且您与之共享的主体与共享账户属于同一个组织,则只要他们的账户管理员使用 AWS Identity and Access Management (IAM) 权限策略向他们授予使用资源的权限,这些主体就可以获得访问权限。

  • 如果您未开启与 Organizations 的 AWS RAM 共享,则仍然可以与组织中的各 AWS 账户共享资源。使用账户中的管理员会收到加入资源共享的邀请,且他们必须接受邀请,然后资源共享中指定的主体才能访问共享的资源。

  • 如果资源类型支持,您也可以与组织外部的账户共享。使用账户中的管理员会收到加入资源共享的邀请,且他们必须接受邀请,然后资源共享中指定的主体才能访问共享的资源。有关哪些资源类型支持此类共享的信息,请参阅可共享的资源 AWS,并查看可以与其组织之外的账户共享列。

共享账户

共享账户包含共享的资源,AWS RAM 管理员使用 AWS RAM 在其中创建 AWS 资源共享。

AWS RAM 管理员是 IAM 主体,其有权在 AWS 账户中创建和配置资源共享。由于 AWS RAM 的原理是将基于资源的策略附加到资源共享中的资源,因此,AWS RAM 管理员还必须有权对资源共享中包含的每种资源类型调用 AWS 服务中的 PutResourcePolicy 操作。

使用主体

使用账户 是共享资源的 AWS 账户。资源共享可以将整个账户指定为主体,或者对于某些资源类型,可以指定账户中的单个角色或用户。有关哪些资源类型支持此类共享的信息,请参阅可共享的资源 AWS,并查看可以与 IAM 角色和用户共享列。

AWS RAM 还支持服务主体作为资源共享的使用者。有关哪些资源类型支持此类共享的信息,请参阅可共享的资源 AWS,并查看可以与服务主体共享列。

使用账户中的主体只能执行以下两个 权限所允许的操作:

  • 附加到资源共享的托管权限。它们指定了可以向使用账户中的主体授予的最大 权限。

  • 使用账户中的 IAM 管理员附加到个人角色或用户的 IAM 基于身份的策略。这些策略必须授予对共享账户中资源的指定操作和 Amazon 资源名称 (ARN)Allow 权限。

AWS RAM 支持以下 IAM 主体类型作为资源共享的使用者:

  • 其他 AWS 账户 - 资源共享使共享账户中包含的资源可供使用账户使用。

  • 其他账户中的单个 IAM 角色或用户 - 某些资源类型支持直接与单个 IAM 角色或用户共享。按 ARN 指定此主体类型。

    • IAM 角色 - arn:aws:iam::123456789012:role/rolename

    • IAM 用户 - arn:aws:iam::123456789012:user/username

  • 服务主体 - 与 AWS 服务共享资源以授予该服务对资源共享的访问权限。服务主体共享允许 AWS 服务代表您执行操作,以减轻运营负担。

    要与服务主体共享,请选择允许与任何人共享,然后,在选择主体类型下,从下拉列表中选择服务主体。采用以下格式指定服务主体的名称:

    • service-id.amazonaws.com

    为了降低混淆代理人带来的风险,资源策略在 aws:SourceAccount 条件键中显示资源所有者的账户 ID。

  • 组织中的账户 - 如果共享账户由 AWS Organizations 管理,则资源共享可以指定要与组织中所有账户共享的组织 ID。资源共享也可以指定组织单位 (OU) ID,以便与该 OU 中的所有账户共享。共享账户只能与自己的组织或其组织内的 OU ID 共享。按组织或 OU 的 ARN 指定组织中的账户。

    • 组织中的所有账户 - 以下是 AWS Organizations 中组织的 ARN 示例:

      arn:aws:organizations::123456789012:organization/o-<orgid>

    • 组织单位中的所有账户 - 以下是 OU ID 的 ARN 示例:

      arn:aws:organizations::123456789012:organization/o-<orgid>/ou-<rootid>-<ouid>

    重要

    当您与组织或 OU 共享,并且该范围包括拥有资源共享的账户时,共享账户中的所有主体都会自动获得对共享中资源的访问权限。授予的访问权限由与共享关联的托管权限定义。这是因为 AWS RAM 附加到共享中每个资源的基于资源的策略使用 "Principal": "*"。有关更多信息,请参阅在基于资源的策略中使用 "Principal": "*" 的影响

    其他所使用账户中的主体无法立即访问共享的资源。其他账户的管理员必须首先将基于身份的权限策略附加到相应的主体。这些策略必须授予对资源共享中各个资源 ARN 的 Allow 访问权限。这些策略中的权限不能超过与资源共享关联的托管权限中指定的权限。

基于资源的策略

基于资源的策略是实施 IAM 策略语言的 JSON 文本文档。与附加到主体的基于身份的策略(如 IAM 角色或用户)不同,您可以将基于资源的策略附加到资源。AWS RAM 根据您为资源共享提供的信息,代表您创建基于资源的策略。您必须指定一个 Principal 策略元素来确定谁可以访问该资源。有关更多信息,请参见《IAM 用户指南》中的基于身份的策略和基于资源的策略

将对 AWS RAM 生成的基于资源的策略以及所有其他 IAM 策略类型进行评估。这包括附加到尝试访问资源的主体的任何基于 IAM 身份的策略,以及可能适用于 AWS 账户的 AWS Organizations 的服务控制策略 (SCP)。由 AWS RAM 生成的基于资源的策略参与与所有其他 IAM 策略相同的策略评估逻辑。有关策略评估以及如何确定生成的权限的完整详细信息,请参阅《IAM 用户指南》中的策略评估逻辑

AWS RAM 通过提供易于使用的基于抽象资源的策略,提供简单安全的资源共享体验。

对于支持基于资源的策略的资源类型,AWS RAM 会自动为您构建和管理基于资源的策略。对于给定资源,AWS RAM 通过组合包含资源的所有资源共享中的信息,构建基于该资源的策略。例如,假设一个 Amazon SageMaker 管道,您通过使用 AWS RAM 来共享它并将其包含在两个不同的资源共享中。您可以使用一个资源共享为整个组织提供只读访问权限。然后,您可以使用另一个资源共享,仅向单个账户授予 SageMaker 执行权限。AWS RAM 自动将这两组不同的权限组合成一个包含多个语句的资源策略。然后,它将组合的基于资源的策略附加到管道资源。您可以通过调用 GetResourcePolicy 操作来查看此底层资源策略。然后,AWS 服务使用该基于资源的策略来授权任何试图对共享资源执行操作的主体。

尽管您可以手动创建基于资源的策略并通过调用 PutResourcePolicy 将其附加到您的资源,但我们建议您使用 AWS RAM,因为它具有以下优点:

  • 共享使用者的可发现性 - 如果您通过使用 AWS RAM 共享资源,则用户可以直接在资源拥有服务的控制台和 API 操作中看到与他们共享的所有资源,就好像这些资源直接存在于用户的账户中一样。例如,如果您与其他账户共享一个 AWS CodeBuild 项目,则使用账户中的用户可以在 CodeBuild 控制台和执行的 CodeBuild API 操作结果中看到该项目。通过直接附加基于资源的策略共享的资源不可见。相反,您必须按资源的 ARN 来发现并明确引用该资源。

  • 共享所有者的可管理性 - 如果您通过使用 AWS RAM 来共享资源,则共享账户中的资源所有者可以集中查看哪些其他账户有权访问其资源。如果您使用基于资源的策略共享资源,则只能通过在相关的服务控制台或 API 中查看各个资源的策略,查看使用账户。

  • 效率 - 如果您通过使用 AWS RAM 共享资源,则可以共享多个资源并将其作为一个单元进行管理。仅使用基于资源的策略共享的资源需要在您共享的每个资源上附加单独的策略。

  • 简便性 - 有了 AWS RAM,您无需了解基于 JSON 的 IAM 策略语言。AWS RAM 提供即用型 AWS 托管权限,您可以从中选择附加到资源共享的权限。

通过使用 AWS RAM,您甚至可以共享一些尚不支持基于资源的策略的资源类型。对于此资源类型,AWS RAM 自动生成一个基于资源的策略来表示实际权限。用户可以通过调用 GetResourcePolicy 来查看此表示形式。这包含以下资源类型:

  • Amazon Aurora - DB 集群

  • Amazon EC2 - 容量预留和专用主机

  • AWS License Manager - 许可证配置

  • AWS Outposts - 本地网关路由表、Outposts 和站点

  • Amazon Route 53 - 转发规则

  • Amazon Virtual Private Cloud - 客户拥有的 IPv4 地址、前缀列表、子网、流量镜像目标、传输网关和传输网关组播域

AWS RAM 生成的基于资源的策略示例

如果您与单个账户 共享 EC2 Image Builder 镜像资源,则 AWS RAM 会生成如下例所示的策略,并将其附加到资源共享中包含的所有镜像资源。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": {"AWS": "arn:aws:iam::123456789012:root"}, "Action": [ "imagebuilder:GetImage", "imagebuilder:ListImages", ], "Resource": "arn:aws:imagebuilder:us-east-1:123456789012:image/testimage/1.0.0/44" } ] }

如果您与其他 AWS 账户中的 IAM 角色或用户 共享 EC2 Image Builder 镜像资源,则 AWS RAM 会生成如下例所示的策略,并将其附加到资源共享中包含的所有镜像资源。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:role/MySampleRole" }, "Action": [ "imagebuilder:GetImage", "imagebuilder:ListImages", ], "Resource": "arn:aws:imagebuilder:us-east-1:123456789012:image/testimage/1.0.0/44" } ] }

如果您与组织中的所有账户或 OU 中的账户共享 EC2 Image Builder 镜像资源,则 AWS RAM 会生成如下例所示的策略,并将其附加到资源共享中包含的所有镜像资源。

注意

此策略使用 "Principal": "*",然后使用 "Condition" 元素将权限限制为与指定 PrincipalOrgID 相匹配的身份。有关更多信息,请参阅在基于资源的策略中使用 "Principal": "*" 的影响

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": "*", "Action": [ "imagebuilder:GetImage", "imagebuilder:ListImages", ], "Resource": "arn:aws:imagebuilder:us-east-1:123456789012:image/testimage/1.0.0/44" "Condition": { "StringEquals": { "aws:PrincipalOrgID": "o-123456789" } } } ] }

在基于资源的策略中使用 "Principal": "*" 的影响

当您在基于资源的策略中包含 "Principal": "*" 时,该策略会向账户中包含该资源的所有 IAM 主体授予访问权限,但须遵守 Condition 元素施加的任何限制(如果存在)。适用于调用主体的任何策略中的明确 Deny 语句将覆盖此策略授予的权限。但是,在任何适用的身份策略、权限边界策略或会话策略中,隐式 Deny(意味着缺少显式 Allow不会 导致对由此类基于资源的策略授予对操作访问权限的主体进行 Deny

如果您的场景不希望出现这种行为,则您可以通过向影响相关角色和用户的身份策略、权限边界或会话策略添加显式 Deny 语句,限制这种行为。

托管权限

托管权限定义了主体可以在哪些条件下对资源共享中支持的资源类型执行哪些操作。创建资源共享时,您必须指定要对资源共享中包含的每种资源类型使用哪种托管权限。托管权限列出了主体可以对使用 AWS RAM 共享的资源执行的一组 actions条件

您只能为资源共享中的每种资源类型附加一个托管权限。如果某个类型的某些资源使用一种托管权限,而相同类型的其他资源使用不同的托管权限,则无法创建资源共享。为此,您需要创建两个不同的资源共享并在它们之间分配资源,以便为每个资源集提供不同的托管权限。有两种不同类型的托管权限:

AWS 托管权限

AWS 托管权限由 AWS 创建和维护,并为常见客户场景授予权限。AWS RAM 为每种支持的资源类型定义至少一个 AWS 托管权限。某些资源类型支持多个 AWS 托管权限,其中一个托管权限被指定为 AWS 默认权限。除非您另行指定,否则将关联默认 AWS 托管权限

客户托管权限

客户托管权限是您通过精确指定可以在哪些条件下使用 AWS RAM 共享的资源执行哪些操作来创建和维护的托管权限。例如,您想限制 Amazon VPC IP 地址管理器 (IPAM) 池的读取权限,这有助于您大规模管理 IP 地址。您可以为开发人员创建客户托管权限来分配 IP 地址,但不能查看其他开发人员账户分配的 IP 地址范围。您可以遵循最低权限相关的最佳实践,仅授予在共享资源上执行任务所需的权限。

您可以为资源共享中的资源类型定义自己的权限,并可以选择添加诸如全局上下文键服务特定键之类的条件,以指定主体访问资源的条件。这些权限可以在一个或多个 AWS RAM 共享中使用。客户托管权限为区域特定权限。

AWS RAM 将托管权限作为输入,为您共享的资源创建基于资源的策略

托管权限版本

对托管权限的任何更改都表示为该托管权限的新版本。新版本是所有新资源共享的默认版本。每个托管权限始终有一个指定为默认版本的版本。当您或 AWS 创建新的托管权限版本时,您必须明确更新每个现有资源共享的托管权限。在此步骤中,您可以先评估更改,然后再将其应用于您的资源共享。所有新的资源共享将自动使用相应资源类型的新版托管权限。

AWS 托管权限版本

AWS 负责处理对 AWS 托管权限的所有更改。此类更改可解决新功能或消除已发现的缺点。您只能将默认托管权限版本应用于您的资源共享。

客户托管权限版本

您负责处理对客户托管权限的所有更改。您可以创建新的默认版本,将旧版本设置为默认版本,或者删除不再与任何资源共享关联的版本。一个客户托管权限最多可以有五个版本。

创建或更新资源共享时,只能附加指定托管权限的默认版本。有关更多信息,请参阅将 AWS 托管权限更新到较新版本