对接口 VPC 终端节点使用 Amazon Keyspaces - Amazon Keyspaces(针对 Apache Cassandra)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

对接口 VPC 终端节点使用 Amazon Keyspaces

接口 VPC 终端节点可在 Amazon VPC 中运行的虚拟私有云 (VPC) 与 Amazon Keyspaces 之间实现私有通信。接口 VPC 终端节点由提供支持Amazon PrivateLink,这是Amazon支持 VPC 和之间的私人通信的服务Amazon服务。

Amazon PrivateLink通过对 VPC 中的私有 IP 使用 elastic network interface 启用此功能,以便网络流量不会离开 Amazon 网络。接口 VPC 终端节点不需要 Internet 网关、NAT 设备、VPN 连接或 Amazon Direct Connect 连接。有关更多信息,请参阅 。Amazon Virtual Private Cloud接口 VPC 终端节点 (Amazon PrivateLink).

对 Amazon Keyspaces 使用接口 VPC 终端节点

您可以创建接口 VPC 终端节点,以便 Amazon Keyspaces 与 Amazon VPC 资源之间的流量开始流过接口 VPC 终端节点。要开始使用,请按照以下步骤创建接口终端节点。接下来,编辑与您在上一步中创建的终端节点关联的安全组,并为端口 9142 配置入站规则。有关更多信息,请参阅 。添加、删除和更新规则.

填充system.peers带接口 VPC 终端节点信息的表条目

Apache Cassandra 司机使用system.peers表以查询有关集群的节点信息。Cassandra 驱动程序使用节点信息对连接进行负载平衡和重试操作。亚马逊 Keyspaces 填充了system.peers表自动用于通过公共终端节点连接的客户端。

为了向通过接口 VPC 终端节点进行连接的客户端提供类似的功能,Amazon Keyspaces 填充system.peers账户中的表,其中包含可用 VPC 终端节点的每个可用区域的条目。查找并将可用接口 VPC 终端节点存储在system.peers表中,Amazon Keyspaces 要求您授予用于连接到 Amazon Keyspaces 的 IAM 实体访问权限,以便查询 VPC 以获取终端节点和网络接口信息。

重要

填充system.peers带有可用接口 VPC 终端节点的表可改进负载平衡并提高读/写吞吐量。建议所有使用接口 VPC 终端节点访问 Amazon Keyspaces 的客户端使用。

要授予用于连接到 Amazon Keyspaces 的 IAM 实体查找必要的接口 VPC 终端节点信息的权限,您可以更新现有的 IAM 角色或用户策略,或者创建新的 IAM 策略,如以下示例所示。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"ListVPCEndpoints", "Effect":"Allow", "Action":[ "ec2:DescribeNetworkInterfaces", "ec2:DescribeVpcEndpoints" ], "Resource":"*" } ] }

要确认策略已正确设置,请查询system.peers表来查看网络信息。如果system.peers表为空,它可能表示策略未成功配置,或者您已超过了DescribeNetworkInterfacesDescribeVPCEndpointsAPI 操作。DescribeVPCEndpoints落入Describe*类别,被认为是非变异动作.DescribeNetworkInterfaces属于的子集未过滤和未分页的非变异操作,并适用不同的配额。有关更多信息,请参阅 。请求令牌桶大小和补充费率Amazon EC2 API 参考中。

如果您确实看到一张空表,请在几分钟后重试以排除请求费率配额问题。如果查询从表中返回结果,则表明您的策略已正确配置。

控制对 Amazon Keyspaces 的接口 VPC 终端节点的访问

VPC 终端节点策略使您能够通过两种方式控制对资源的访问:

  • IAM 策略— 您可以控制允许通过特定的 VPC 终端节点访问 Amazon Keyspaces 的请求、用户或组。您可以通过在附加到 IAM 用户、组或角色的策略中使用条件键来完成此操作。

  • 接口 VPC 策略— 您可以通过向 Amazon Keyspace 附加策略来控制哪些 VPC 终端节点可以访问 Amazon Keyspaces 资源。要限制仅允许通过特定 VPC 终端节点的流量来访问特定键空间或表,请编辑限制资源访问的现有 IAM 策略并添加该 VPC 终端节点。

下面是访问 Amazon Keyspaces 资源的终端节点策略示例。

  • 示例 IAM 策略示例:除非流量来自指定的 VPC 终端节点,否则限制对特定 Amazon Keyspaces 表的所有访问权限— 此示例策略可以附加到 IAM 用户、角色或组。它限制对指定 Amazon Keyspaces 表的访问,除非传入流量来自指定的 VPC 终端节点。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "UserOrRolePolicyToDenyAccess", "Action": "cassandra:*", "Effect": "Deny", "Resource": [ "arn:aws:cassandra:us-east-1:111122223333:/keyspace/mykeyspace/table/mytable", "arn:aws:cassandra:us-east-1:111122223333:/keyspace/system*" ], "Condition": { "StringNotEquals" : { "aws:sourceVpce": "vpce-abc123" } } } ] }
    注意

    要限制对特定表的访问,还必须包括对系统表的访问权限。系统表为只读。

  • 示例 VPC 策略示例:只读访问权限— 此示例策略可以附加到 VPC 终端节点。(有关更多信息,请参阅。控制对 Amazon VPC 资源的访问)。它限制对 Amazon Keyspaces 资源的只读访问,以通过所附加到的 VPC 终端节点访问 Amazon Keyspace 资源。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ReadOnly", "Principal": "*", "Action": [ "cassandra:Select" ], "Effect": "Allow", "Resource": "*" } ] }
  • 示例 VPC 策略示例:限制对特定 Amazon Keyspaces 表的访问— 此示例策略可以附加到 VPC 终端节点。它限制通过所附加到的 VPC 终端节点访问特定表。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "RestrictAccessToTable", "Principal": "*", "Action": "cassandra:*", "Effect": "Allow", "Resource": [ "arn:aws:cassandra:us-east-1:111122223333:/keyspace/mykeyspace/table/mytable", "arn:aws:cassandra:us-east-1:111122223333:/keyspace/system*" ] } ] }
    注意

    要限制对特定表的访问,还必须包括对系统表的访问权限。系统表为只读。

可用性

Amazon Keyspaces 支持在所有中使用接口 VPC 终端节点Amazon Web Services 区域提供服务的位置。有关更多信息,请参阅Amazon Keyspaces 服务终端节点

接口 VPC 终端节点策略和 Amazon Keyspaces 时间点恢复 (PITR)

如果您使用 IAM 策略条件键为了限制传入流量,表还原操作可能会失败。例如,如果您使用将源流量限制到特定 VPC 终端节点aws:SourceVpce条件键,表还原操作失败。要允许 Amazon Keyspaces 代表您的委托人执行还原操作,您必须添加aws:ViaAWSServiceIAM 策略的条件密钥。这些区域有:aws:ViaAWSService条件密钥允许在任何时候访问Amazon服务使用委托人的凭证发出请求。有关更多信息,请参阅 。IAM JSON 策略元素:条件键中的IAM 用户指南. 以下策略是此示例。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"CassandraAccessForVPCE", "Effect":"Allow", "Action":"cassandra:*", "Resource":"*", "Condition":{ "Bool":{ "aws:ViaAWSService":"false" }, "StringEquals":{ "aws:SourceVpce":[ "vpce-12345678901234567" ] } } }, { "Sid":"CassandraAccessForAwsService", "Effect":"Allow", "Action":"cassandra:*", "Resource":"*", "Condition":{ "Bool":{ "aws:ViaAWSService":"true" } } } ] }