不使用共享 VPC 配置 Amazon Keyspaces 的跨账户访问 - Amazon Keyspaces(Apache Cassandra 兼容)

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

不使用共享 VPC 配置 Amazon Keyspaces 的跨账户访问

如果 Amazon Keyspaces 表和私有 VPC 端点由不同的账户拥有但不共享 VPC,则应用程序仍可使用 VPC 端点进行跨账户连接。由于账户不共享 VPC 端点,Account AAccount BAccount C 需要各自的 VPC 端点。在 Cassandra 客户端驱动程序中,Amazon Keyspaces 显示为单节点集群而不是多节点集群。连接后,客户端驱动程序会到达 DNS 服务器,服务器会返回账户 VPC 中的一个可用终端节点。

您还可以使用公有终端节点或在每个账户中部署私有 VPC 终端节点来跨不同账户访问 Amazon Keyspaces 表,而无需共享 VPC 终端节点。不使用共享 VPC 时,每个账户都需要自己的 VPC 端点。在本示例中,Account AAccount BAccount C 都需要各自的 VPC 端点才能访问Account A 中的表。在此配置中使用 VPC 端点时,Amazon Keyspaces 在 Cassandra 客户端驱动程序中显示为单节点集群,而不是多节点集群。连接后,客户端驱动程序会到达 DNS 服务器,服务器会返回账户 VPC 中的一个可用终端节点。但客户端驱动程序无法访问 system.peers 表来发现其他端点。由于可用主机较少,驱动程序建立的连接也较少。要对此进行调整,请将驱动程序的连接池设置提高 3 倍。

示意图:显示了同一组织在同一 AWS 区域 拥有的三个没有共享 VPC 的不同账户。

Account A是包含Account BAccount C需要访问的资源(Amazon Keyspaces 表)的账户,信任账户Account A也是如此。 Account BAccount C委托人需要访问其中的资源(Amazon Keyspaces 表)Account A的账户也是值得信Account BAccount C账户。信任账户通过共享 IAM 角色向受信账户授予权限。以下程序概述了Account A 中所需的配置步骤。

Account A 所需的配置
  1. 在中创建 Amazon Keyspaces 密钥空间和表。Account A

  2. 在中创建一个 IAM 角色Account A,该角色具有对 Amazon Keyspaces 表的完全访问权限和对 Amazon Keyspaces 系统表的读取权限。

    { "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Action":[ "cassandra:Select", "cassandra:Modify" ], "Resource":[ "arn:aws:cassandra:region:Account-A:/keyspace/mykeyspace/table/mytable", "arn:aws:cassandra:region:Account-A:/keyspace/system*" ] } ] }
  3. 为中的 IAM 角色配置信任策略,Account A以便Account B和中的委托人Account C可以作为可信账户代入该角色。如以下示例所示。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::AccountB:role/Cross-Account-Role-B", "AWS": "arn:aws:iam::AccountC:role/Cross-Account-Role-C" }, "Action": "sts:AssumeRole", "Condition": {} } ] }

    有关跨账户 IAM 策略的更多信息,请参阅《IAM 用户指南》中的跨账户策略

  4. 在中配置 VPC 终端节点,Account A并向该终端节点授予权限,允许来自Account BAccount C扮演角色的角色Account A使用 VPC 终端节点。这些权限对它们所连接的 VPC 终端节点有效。有关 VPC 端点策略的更多信息,请参阅控制 Amazon Keyspaces 对接口 VPC 端点的访问

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Allow-access-from-specific-IAM-roles", "Effect": "Allow", "Principal": "*", "Action": "cassandra:*", "Resource": "*", "Condition": { "ArnEquals": { "aws:PrincipalArn": "arn:aws:iam::AccountB:role/Cross-Account-Role-B", "aws:PrincipalArn": "arn:aws:iam::AccountC:role/Cross-Account-Role-C" } } } ] }
Account BAccount C 中的配置
  1. Account BAccount C 中创建新角色并附加以下策略,允许主体代入在Account A 中创建的共享角色。

    { "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::Account-A:role/keyspaces_access" } }

    允许委托人担任共享角色是使用 AWS Security Token Service (AWS STS) 的 AssumeRole API 实现的。有关更多信息,请参阅 IAM 用户指南中的向您拥有 AWS 账户 的另一个 IAM 用户提供访问权限。

  2. Account B和中Account C,您可以创建使用 SIGV4 身份验证插件的应用程序,该插件允许应用程序扮演共享角色以连接到位于中的 Amazon Keyspaces 表。Account A有关 SIGV4身份验证插件的更多信息,请参阅创建用于通过编程方式访问 Amazon Keyspaces 的凭证。。有关如何将应用程序配置为在另一个 AWS 账户中扮演角色的更多信息,请参阅工具参考指南中的身份验证AWS SDKs 和访问权限