使用 AWS PrivateLink 简化与 Amazon DynamoDB 的私有连接
关键要点
AWS PrivateLink 支持 DynamoDB 使得从本地工作负载到 DynamoDB 的私有网络连接更简单。通过界面 VPC 终端节点和私有 IP 地址,可以消除对公网 IP 地址和代理基础设施的需求,从而降低合规性复杂性。本文阐明了在本地环境中的 PrivateLinkbacked 界面 VPC 终端节点与 DynamoDB 的集成。Amazon DynamoDB 是一种无服务器、NoSQL 的全托管数据库,能够在任何规模下提供单数字毫秒级别的性能。它是一个多区域、多活跃、持久化的数据库,具备内置的安全性、备份与恢复,以及针对互联网规模应用的内存缓存。
客户可以通过 VPC 或使用 网关终端节点 从本地工作负载访问 DynamoDB。不过,在使用本地私有网络连接到网关终端节点时,客户通常需要配置代理服务器或防火墙规则来路由和限制与 DynamoDB 的流量,因为网关终端节点不支持 AWS Direct Connect 或 AWS 虚拟私人网络AWS VPN。额外的基础设施设置会增加运营负载和复杂性,在某些情况下还会增加合规性挑战。客户一直在寻找一种无需额外代理基础设施的解决方案,以便为本地工作负载与 DynamoDB 设置私有网络连接。
我们很高兴地宣布 DynamoDB 支持 AWS PrivateLink。通过 PrivateLink,您可以使用 界面 VPC 终端节点 和私有 IP 地址简化从本地工作负载到 DynamoDB 的私有网络连接。界面终端节点支持 Direct Connect 和 AWS VPN 的端到端私有网络连接。因此,您可以消除访问 DynamoDB 的公网 IP 地址、代理基础设施或防火墙规则的需求,同时保持合规性。通过在 VPC 内部使用网关终端节点以及在本地访问 DynamoDB 时使用界面终端节点,您可以实现低成本的私有网络连接。
在本文中,我们通过模拟本地环境来展示如何使用 PrivateLink 支持的界面 VPC 终端节点与 DynamoDB 进行交互。有关使用界面终端节点与 PrivateLink 的更多示例,请参考 用例示例。
使用私有 IP 地址访问 DynamoDB 的本地环境
假设一家保险公司需要访问存储在 DynamoDB 中的报价和索赔数据,以重新评估存储在其本地主机系统中的风险评分。
本地工作负载是一台通过 AWS Client VPN 连接到位于 uswest1 区域的 VPC 的本地机器,使用 PrivateLink 支持的界面终端节点通过私有 IP 地址与 DynamoDB 进行交互。以下图示展示了该结构的架构。
该解决方案包含以下关键组件:
一个与 VPC 相关联的 AWS Client VPN 终端节点。在本地机器上配置的基于 OpenVPN 的 AWS Client VPN,以通过 AWS Client VPN 终端节点连接到 VPC。为 DynamoDB 创建并与 VPC 的子网相关联的 PrivateLink 支持的界面 VPC 终端节点。运行在本地机器上的本地应用程序可以通过界面 VPC 终端节点私密访问 DynamoDB 表。前提条件
在开始之前,确保您具备如下网络设置:
在区域内有一个已设置好 AWS Client VPN 的 VPC 和本地机器。界面终端节点的安全组与本地环境相同,或者包含用于接收来自本地环境AWS Client VPN 终端节点流量的入站规则。如果使用 AWS Client VPN,则 AWS Client VPN 终端节点的授权规则允许对与界面终端节点相关联的子网的无类域间路由 (CIDR) 块的流量。可选:在本地机器上安装 Python3,并安装 AWS SDK for Python (Boto3)。配置解决方案
通过 Amazon Virtual Private Cloud (Amazon VPC) 完成以下步骤,在 uswest1 区域的 VPC 中创建一个 PrivateLink 支持的界面 VPC 终端节点:
进入 Amazon VPC,在导航窗格中选择 终端节点 (Endpoints)。选择 创建终端节点 (Create endpoint)。
在 名称标签 (Name tag) 中,输入一个可选标签。
在 服务类别 (Service category) 中,选择 AWS 服务 (AWS services)。搜索并选择 DynamoDB 的界面类型终端节点。这是 PrivateLink 支持的 DynamoDB 界面 VPC 终端节点。
由于界面终端节点与 VPC 相关联,因此选择您想要的 VPC,以及您希望与之关联的子网和需要配置的安全组。
提供 VPC 终端节点策略,以限制使用界面 VPC 终端节点与 DynamoDB 交互的 AWS 身份与访问管理 (IAM) 实体被允许的 DynamoDB 操作。对于本文,请选择 完全访问 (Full access)。建议根据 最小权限访问原则 在此策略中缩小访问范围。
选择 创建终端节点 (Create endpoint)。终端节点创建过程可能需要几分钟。在界面终端节点成功创建后,您将看到多个特定于您 VPC 的 DNS 名称。DNS 名称可能包含区域终端节点的单个条目,以及配置的子网所属的每个可用区的单独区域条目。
复制区域 DNS 名称,以用于本地机器上的应用程序,该机器通过 AWS Client VPN 连接到 VPC。
在初始化 Boto3 SDK 的 DynamoDB 客户端时,将 DNS 名称作为 endpointurl 传递,并与适当的 regionname 一起使用。不同的 AWS SDK 可能有所不同。pythonimport boto3
ddbclient = boto3client( dynamodb regionname=uswest1 endpointurl=https//vpcexxxxyyyydynamodbuswest1vpceamazonawscom)
response = ddbclientgetitem( TableName=plays Key={pk {S 640} sk {S 20140102T094424Z}})
print(response[Item])
加速器试用1天输出{sk {S 20140102T094424Z} data {S 208356596} pk {S 640} type {S sample}}
跨区域使用私有 IP 地址访问 DynamoDB
类似于本地环境通过 AWS Client VPN 连接到 VPC 的场景,您也可以使用 PrivateLink 支持的界面 VPC 终端节点通过私有 IP 地址私密访问跨区域的 DynamoDB 资源。您必须先将两个 VPC 连接,确保路由表更新适当。架构如下所示。
在此情况下,我们有一个位于 useast1 区域的基于 VPC 的 AWS Lambda 应用程序,它能够通过 PrivateLink 支持的界面 VPC 终端节点访问位于 uswest1 区域的 DynamoDB 表。Lambda 函数能够利用 PrivateLink 支持的界面 VPC 终端节点访问跨区域的 DynamoDB 资源。
使用私有 IP 地址访问资源
界面终端节点的一个关键优势在于,它们解析为与相关联 VPC 的特定子网内的私有 IP 地址。例如,如果 VPC 的 CIDR 范围是 1723100/16,并且有两个子网,则界面终端节点解析为该范围内的 IP 地址,每个与终端节点关联的子网至少会有一个 IP 地址。请参见以下代码:
bash dig vpcexxxxyyyydynamodbuswest1vpceamazonawscom
ltltgtgt DiG 9106 ltltgtgt vpcexxxxyyyydynamodbuswest1vpceamazonawscom QUESTION SECTIONvpcexxxxyyyydynamodbuswest1vpceamazonawscom IN A
ANSWER SECTIONvpcexxxxyyyydynamodbuswest1vpceamazonawscom 60 IN A 17231844vpcexxxxyyyydynamodbuswest1vpceamazonawscom 60 IN A 172311671
尽管 DNS 名称是公开可解析的,但由于它解析为属于 VPC 子网的私有 IP 地址,因此无法通过互联网连接 DynamoDB,从而提供端到端的私密访问。在本地环境中,任何使用 AWS Direct Connect 或 AWS Client VPN 定向到 VPC 的流量都可以无缝地路由到界面终端节点。
本地网络环境
要在使用本地应用程序的情况下设置 DynamoDB 的界面终端节点,您需要一个 Direct Connect 或 VPN 解决方案以建立与 VPC 的连接。此外,确保配置了路由到界面终端节点相关联的 VPC 的 CIDR。还要配置界面终端节点的安全组,包括来自本地网络 CIDR 的入站规则。最后,请确保本地实现 DNS 配置,以解析界面终端节点的 DNS 名称,该名称在 DynamoDB 的公共 DNS 域下是可解析的。有关网络与 VPC 之间连接的更多详细信息,请参见 网络与 Amazon VPC 连接选项。
以下图示说明了如何通过 PrivateLink 支持的界面 VPC 终端节点促成本地应用程序与 AWS 云中 DynamoDB 表之间的连接。该设置还包含用于路由 VPC 内部流量的网关终端节点。
注意事项
使用 PrivateLink 支持的界面终端节点时,请考虑以下几点:
不论您选择使用网关终端节点和/或 DynamoDB 的界面终端节点,您的网络流量在这两种情况下都将保持在 AWS 网络内。建议继续对单个 VPC 内的交互或在 VPC 之间使用网关终端节点,同时对来自本地数据中心的交互使用界面终端节点。目前,界面终端节点仅支持 IPv4 地址。PrivateLink 每个可用区的每个终端节点可以处理高达 100Gbps 的数据。如果您的公司从本地数据中心到 DynamoDB 界面终端节点的每秒数据传输负载超过每个 AZ 的 100Gbps,您可以配置附加的界面终端节点,以适应预期的数据传输需求。使用 DynamoDB 的网关 VPC 终端节点没有数据处理或每小时费用。不过,在使用 PrivateLink 的界面终端节点时,将收取标准费用。更多信息,请参考 AWS PrivateLink 定价。清理
如果您按照步骤创建了 AWS 账户中的资源,请删除 AWS Client VPN 终端节点、界面 VPC 终端节点、Lambda 函数以及作为本文一部分创建的任何其他 AWS 资源。

结论
DynamoDB 的 PrivateLink 使您能够通过建立与 DynamoDB 的连接来简化网络架构,从本地数据中心或 AWS 内部使用 VPC 内部的私有 IP 地址。PrivateLink 还消除了对公网 IP 地址、防火墙规则配置或设置互联网网关以便从本地位置访问 DynamoDB 的需求。此新功能在所有 AWS 商业区域 中均可用。
请使用 PrivateLink 支持的 DynamoDB 界面 VPC 终端节点,并在评论区分享您的反馈。
关于作者
Aman Dhingra 是驻扎在爱尔兰都柏林的 DynamoDB 专家解决方案架构师。他对分布式系统充满热情,并在大数据与分析技术方面有着丰富的背景。作为 DynamoDB 专家解决方案架构师,Aman 帮助客户设计、评估和优化基于 DynamoDB 的工作负载。
Ashwin Venkatesh 是亚马逊网络服务(Amazon Web Services)的 Amazon DynamoDB 高级产品经理,驻扎在加利福尼亚州圣克拉拉。在产品管理和技术岗位上有超过 25 年的经验,Ashwin 热衷于与客户互动,理解业务用例,定义战略,并向后推进定义的新特性,以提供长远的客户价值,并与技术同行进行深入讨论。工作之外,Ashwin 喜欢旅行、运动和家庭活动。