在 Amazon Neptune 中串联 IAM 角色 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

在 Amazon Neptune 中串联 IAM 角色

重要

在某些情况下,引擎版本 1.2.1.0.R3 中引入的利用串联 IAM 角色的新批量加载跨账户特征可能会导致您观察到批量加载性能下降。因此,支持此特征的引擎版本的升级已暂停,直到此问题得到解决。

当您将角色附加到集群时,集群可以代入该角色来访问存储在 Amazon S3 中的数据。从引擎版本 1.2.1.0.R3 开始,如果该角色无法访问您需要的所有资源,则可以串联一个或多个其它角色,您的集群可以代入这些角色来访问其它资源。链中的每个角色都会代入链中的下一个角色,直到集群代入位于链尾的角色。

要串联角色,您可以在角色之间建立信任关系。例如,要将 RoleB 串联到 RoleARoleA 必须有允许它代入 RoleB 的权限策略,并且 RoleB 必须有允许它将其权限传回给 RoleA 的信任策略。有关更多信息,请参阅使用 IAM 角色

链中的第一个角色必须附加到正在加载数据的集群。

第一个角色以及代入链中以下角色的每个后续角色必须具有:

  • 一项策略,其中包含对 sts:AssumeRole 操作产生 Allow 影响的特定语句。

  • Resource 元素中下一个角色的 Amazon 资源名称 (ARN)。

注意

目标 Amazon S3 存储桶必须与集群位于同一 Amazon 区域。

使用串联角色进行跨账户访问

您可以通过串联属于另一个账户的一个或多个角色来授予跨账户访问权限。当您的集群暂时代入属于另一个账户的角色时,它可以访问那里的资源。

例如,假设账户 A 想要访问属于账户 B 的 Amazon S3 桶中的数据:

  • 账户 A 为 Neptune 创建一个名为的 Amazon 服务角色RoleA并将其附加到集群。

  • 账户 B 创建一个名为 RoleB 的角色,该角色有权访问账户 B 桶中的数据。

  • 账户 ARoleA 附加了允许它代入 RoleB 的权限策略。

  • 账户 BRoleB 附加了允许它将其权限传递回 RoleA 的信任策略。

  • 要访问账户 B 桶中的数据,账户 A 需要使用串联 RoleARoleBiamRoleArn 参数运行加载程序命令。在加载程序操作的持续时间内,RoleA 将临时代入 RoleB 以访问账户 B 中的 Amazon S3 桶。

阐述使用串联角色进行跨账户访问的图表

例如,RoleA 具有一项与 Neptune 建立信任关系的信任策略:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

RoleA 还将有一个允许它代入 RoleB 的权限策略,该策略归账户 B 所有:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1487639602000", "Effect": "Allow", "Action": [ "sts:AssumeRole" ], "Resource": "arn:aws:iam::(Account B ID):role/RoleB" } ] }

相反,RoleB 将具有一项信任策略来与 RoleA 建立信任关系:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Principal": { "AWS": "arn:aws:iam::(Account A ID):role/RoleA" } } ] }

RoleB 还需要获得权限才能访问位于账户 B 的 Amazon S3 桶中的数据。

创建 Amazon Security Token Service (STS) VPC 终端节点

Neptune 加载器需要一个 VPC 终端节点 Amazon STS ,以便您链接 IAM 角色才能通过私有 IP 地址私有访问 Amazon STS API。您可以 Amazon STS 通过安全且可扩展的方式从 Amazon VPC 直接连接到 VPC 终端节点。当您使用接口 VPC 端点时,它提供更好的安全态势,因为您无需打开出站流量防火墙。它还提供使用 Amazon VPC 端点的其它好处。

使用 VPC 终端节点时,流向的流量 Amazon STS 不会通过互联网传输,也永远不会离开 Amazon 网络。您的 VPC 已安全连接, Amazon STS 不会对您的网络流量造成可用性风险或带宽限制。有关更多信息,请参阅使用 Amazon STS 接口 VPC 端点

要为 Amazon Security Token Service (STS) 设置访问权限
  1. 登录 Amazon Web Services Management Console 并打开亚马逊 VPC 控制台,网址为 https://console.aws.amazon.com/vpc/

  2. 在导航窗格中,选择端点

  3. 选择 Create Endpoint(创建终端节点)。

  4. 为接口类型的端点选择服务名称com.amazonaws.region.sts

  5. 选择包含您的 Neptune 数据库实例和 EC2 实例的 VPC

  6. 选择您的 EC2 实例所在子网旁边的复选框。您无法从同一可用区中选择多个子网。

  7. 对于 IP address type(IP 地址类型),可从以下选项中进行选择:

    • IPv4 – 将 IPv4 地址分配给端点网络接口。仅当所有选定子网都具有 IPv4 地址范围时,才支持此选项。

    • IPv6 – 将 IPv6 地址分配给端点网络接口。仅当所有选定子网均为仅限 IPv6 的子网时,才支持此选项。

    • Dualstack(双堆栈)– 将 IPv4 和 IPv6 地址分配给端点网络接口。仅当所有选定子网都具有 IPv4 和 IPv6 地址范围时,才支持此选项。

  8. 对于 Security groups(安全组),选择要与 VPC 端点的端点网络接口关联的安全组。您需要选择附加到您的 Neptune 数据库实例和 EC2 实例的所有安全组。

  9. 对于 Policy(策略),选择 Full access(完全访问权限)以允许所有主体通过 VPC 端点对所有资源执行所有操作。否则,选择 Custom(自定义)以附加 VPC 端点策略,该策略控制主体通过 VPC 端点对资源执行操作的权限。该选项仅在服务支持 VPC 端点策略时可用。有关更多信息,请参阅端点策略

  10. 可选)要添加标签,请选择添加新标签,然后输入您需要的标签键和标签值。

  11. 选择创建端点

有关创建端点的信息,请参阅《Amazon VPC 用户指南》中的 VPC 端点。请注意,Amazon STS VPC 端点是 IAM 角色串联所需的先决条件。

现在,您已授予对 Amazon STS 终端节点的访问权限,可以准备加载数据了。有关支持的格式的信息,请参阅加载数据格式

在加载程序命令中串联角色

当运行加载程序命令时,可以通过在 iamRoleArn 参数中包含一个逗号分隔的角色 ARN 列表来指定角色串联。

虽然大多数情况下在一个链中只需要有两个角色,但也可以将三个或更多的角色串联在一起。例如,这个加载程序命令串联三个角色:

curl -X POST https://localhost:8182/loader \ -H 'Content-Type: application/json' \ -d '{ "source" : "s3://(the target bucket name)/(the target date file name)", "iamRoleArn" : "arn:aws:iam::(Account A ID):role/(RoleA),arn:aws:iam::(Account B ID):role/(RoleB),arn:aws:iam::(Account C ID):role/(RoleC)", "format" : "csv", "region" : "us-east-1" }'