通过 亚马逊云科技 PrivateLink 为亚马逊 S3 引入私有 DNS 支持

当本地应用程序使用云存储时,合规性要求通常要求使用私有连接。为了满足这些要求,客户 使用 亚马逊云科技 Private Link 通过 亚马逊云科技 Direc t Connect 亚马逊云科技 点对点 VPN 设置与 A mazon S3 的私有 连接。 因此,数据直接传入和传出 亚马逊云科技,从不通过公共互联网。亚马逊云科技 PrivateLink 允许 您在亚马逊虚拟私有云 (Amazon VPC ) 中预置接口终端节点,从而为 S3 分配私有 IP 地址。PrivateLink 会自动为这些私有 IP 配置全球唯一的公有 DNS 名称,您的应用程序可以使用这些名称来访问 S3。虽然在使用 S3 的区域名称时,您可以在本地创建自定义 DNS 条目,将本地客户端指向这些私有 IP 地址 (s3. .amazonaws.com),这增加了运营开销并且难以管理,因此,这不是首选选项。

为了帮助简化私有连接的 DNS 配置,Amazon S3 现在支持 您的 S3 接口 VPC 终端节点 的 私有 DNS 选项 。 使用适用于 S3 的私有 DNS,您的本地应用程序可以使用 亚马逊云科技 PrivateLink 通过接口 VPC 终端节点访问 S3,而来自您的 VPC 内应用程序的请求则使用网关 VPC 终端节点访问 S3 。 这样的路由请求可以帮助您利用成本最低的私有网络路径,而无需对客户端进行代码或配置更改。

在这篇博客文章中,我们演示了如何利用私有 DNS 使用 亚马逊云科技 PrivateLink 访问 Amazon S3。我们还将讨论各种场景的配置选项,以及如何验证您的客户端是否通过网关 VPC 终端节点和接口 VPC 终端节点连接到 Amazon S3。

亚马逊 S3 的 VPC 端点

您可以使用两种类型的 VPC 终端节点 从 VPC 连接到 Amazon S3:网关终端节点和接口终端节点。

网关 VPC 终端节点提供与 Amazon S3 和 DynamoDB 的可靠连接,无需为 VPC 安装互联网网关或 NAT 设备。只需在 亚马逊云科技 管理控制台中单击几下即可设置网关 VPC 终端节点,并使用您的 VPC 路由表通过 亚马逊云科技 网络将来自 VPC 内客户端的请求路由到 S3 或 DynamoDB 的公有 IP。网关 VPC 终端节点不收取额外费用,仅支持从本地资源到创建网关终端节点的相应 VPC 的连接。

接口 VPC 终端节点 使用 亚马逊云科技 PrivateLink 为 140 多项 亚马逊云科技 服务和第三方 SaaS 应用程序 提供私有连接。接口 VPC 终端节点在您的 VPC 子网中使用私有 IP 地址创建弹性网络接口 (ENI)。接口 VPC 终端节点支持通过 亚马逊云科技 Direct Connect 或 亚马逊云科技 点对点 VPN 从本地进行连接。当您配置接口 VPC 终端节点时,我们会 为您的终端节点创建 P rivateLink 提供的公有 DNS 名称,这些名称 既可以在 VPC 内解析,也可以从本地解析。接口 VPC 终端节点有两项费用——在每个可用区中配置的每个 VPC 终端节点按小时收费,以及每 GB 的数据处理费用。有关定价的详细信息,请访问 亚马逊云科技 Privat eLink 定价。

访问 S3 的最具成本效益的方法是尽可能使用网关 VPC 终端节点(例如,从该地区的 EC2 实例),并使用来自其他位置(例如本地)的 Interface VPC 终端节点。

使用私有 DNS 名称访问亚马逊 S3 接口终端节点

图 1 显示了一个混合网络设置,在该设置中,您可以通过 亚马逊云科技 Di rect Connect 连接或 AW S 站点到站点 VPN 连接从本地进行连接。在此设置中,您可以配置 Amazon Route 53 入站解析器端点 , 并在您的本地 DNS 解析器上设置条件转发,将 DNS 查询转发到入站解析器端点的私有 IP 地址。然后,当您为 S3 创建接口 VPC 终端节点时,您可以选择启用私有 DNS 名称。

Figure 1-Setup when connecting from on-premises over Direct Connect or Site-to-Site VPN

图 1:通过 Direct Connect 或 “点对点 VPN” 从本地进行连接时的设置


当您 为 S3 接口 VPC 终端节点启用 私有 DN S 时,亚马逊云科技 会创建一个私有托管区域并将其与 VPC 关联。该托管区域包括接口 VPC 终端节点的资源记录,其中包含以下每个 Amazon S3 DNS 名称的私有 IP:

  • 区域存储桶(例如,s3. .amazonaws.com)
  • 控制(例如,s3 控制。 .amazonaws.com)
  • 接入点(例如,s3 接入点。 .amazonaws.com)

这使您能够使用 亚马逊云科技 与 S3 的私有网络连接,同时向服务的区域、控制或接入点终端节点发出请求。有关更多信息,请参阅适用于 Amazon S3 的 亚马逊云科技 PrivateLink 文档。

图表演练

  1. 本地客户端启动针对区域 S3 存储桶的 DNS 查询。
  2. 本地 DNS 服务器通过点对点 VPN 或 DX 连接将此查询转发到与具有 S3 接口 VPC 终端节点的同一 VPC 关联的相应 Route 53 解析器入站终端节点。
  3. Route 53 解析器终端节点将此查询转发到由 亚马逊云科技 管理的 Route 53 托管区域,该区域在 DNS 响应中返回 S3 接口 VPC 终端节点的 IP 地址。
  4. 然后,本地客户端启动与 S3 接口 VPC 终端节点的连接。
  5. S3 接口终端节点通过 亚马逊云科技 PrivateLink 将客户查询转发到客户查询中指定的 S3 存储桶。

新增-仅为入站端点 启用私有 DNS

许多客户在本地和 亚马逊云科技 区域都有应用程序,两者都在同一 VPC 中运行。这些客户告诉我们,他们想要一种简便的方法,通过接口终端节点路由来自本地的流量,通过网关终端节点路由来自 亚马逊云科技 内部的流量。为了解决这个问题, 我们引入了 仅为入站端点 启用私有 DNS ” 选项。当您选中 “ 启用 Amazon S3 接口终端节点的 DNS 名称 ” 时,将默认选中 “仅为入站终端节点 启用私有 DNS ” 选项。在这种情况下,来自本地的 S3 的 DNS 查询会解析到 S3 接口终端节点的私有 IP,而源自 VPC 中的 S3 DNS 查询继续使用网关 VPC 终端节点解析为 S3 的公有 IP。要使此配置生效,您需要在您的 VPC 中存在网关终端节点。如果您不这样做,并尝试启用此配置,则会在 亚马逊云科技 管理控制台中看到类似这样的错误( 图 2 ):

“要将 PrivatednsonlyforinboundResolverendPoint 设置为真,VPC 必须有该服务的网关终端节点。”

要解决此问题,请在 VPC 中创建网关终端节点。或者,您可以禁用仅对入站端点 启用私有 DNS, 并将所有流量路由到接口终端节点。

Figure 2 Error when Gateway Endpoint does not exist while PrivateDNSonlyForInboundEndpoint enabled

图 2:启用 PrivateDNSonlyforinboundPoint 时网关端点不存在时出现错误

先决条件

在开始之前,请确保满足以下先决条件:

  1. 在您希望通过 VPC 终端节点连接的 S3 存储桶所在的同一区域创建 VPC 确保已将 属性 enablednshostNames 和 enablednsS upport 设置为真。
  2. 创建带有私有虚拟接口 (VIF) 的 亚马逊云科技 Direct Connect 连接 或 A WS 站点到站点 VPN 连接,以建立与公司数据中心的连接。
  3. 在步骤 1 中创建的同一 VPC 中为 S3 创建 网关 VPC 终端节点 ,以使用 “仅 启用私有 DNS” 入站终端节点

为 Amazon S3 创建接口 VPC 终端节点并启用私有 DNS 选项

  1. 要为 Amazon S3 创建接口 VPC 终端节点,请先导航到 VPC 控制台,选择 终端节点 ,然后选择 创建终端节点
  2. 对于 服务类别 ,选择 亚马逊云科技 服务 。然后,通过在搜索框中输入 S3 来筛选服务名称。对于 服务名称 ,将服务选择为 “S3”,对于 类型 ,请确保它显示 接口 图 3a )。

Figure 3a: Create Interface endpoint for s3

图 3a:为 S3 创建接口终端节点

  1. 为每个 VPC、所需的可用区域和子网选择,然后选择相应的安全组。这应该允许通过端口 443 来自您的网络的流量。
  2. 在 “ 其他设置” 下 ,选择 为您的接口终端节点 启用 DNS 名称。默认情况下,它将选择 “仅对入站终端节点 启用私有 DNS”, 以使源自您的 VPC 内部的流量流经网关 VPC 终端节点,而源自本地的流量流经接口 VPC 终端节点。
  3. 选择 创建端点 。我们在以下屏幕截图中显示了这一点( 图 3b ):

Figure 3b: Select PrivateDNS options while Creating interface VPC endpoint in the VPC console

图 3b:在 VPC 控制台中创建接口 VPC 终端节点时选择私有 DNS 选项

在创建端点 时,需要花几分钟时间才能完成各种 端点状态 。接口端点状态显示可用后,您可以通过选择 详细信息来查看其配置 ( 图 4a )。DNS 名称字段显示用于访问服务的 DNS 名称。启用私有 DNS 后,您还可以看到默认 S3 区域 DNS 名称。

Figure 4a: Details of the interface VPC endpoint

图 4a:接口 VPC 终端节点的详细信息

选择 Subnet s 以查看接口端点的位置以及每个子网中端点网络接口的 ID。在下面的屏幕截图( 图 4b )中,VPC 中终端节点网络接口的私有 IP 地址是 10.0.4.122 和 10.0.23.155。

Figure 4b: Subnets information for your interface VPC endpoint

图 4b:您的接口 VPC 终端节点的子网信息

私有 DNS 选项的场景

让我们了解一下影响客户端使用适用于 Amazon S3 的网关和接口 VPC 终端节点从 VPC 和本地托管的应用程序与 Amazon S3 的连接的 DNS 选项的各种组合:

场景 1 没有 私 DNS 选项

在此配置中,来自创建网关终端节点的 VPC 内客户端的流量可以连接到 S3 区域终端节点。 VPC 以外的客户端(无论是本地还是其他互连的 VPC)可以使用端点特定的 DNS 名称或使用博客中重点介绍的选项连接到 S3。 在这种情况下,当私有 DNS 设置为 false 时,您无法将 “仅为入站端点 启用私有 DNS”。

当您想要灵活地在自己的私有托管区域中管理私有 DNS 名称时,此选项非常有用。

VPC 中使用网关终端节点的客户端:

dig s3.<Region>.amazonaws.com +short
54.x.y.z (Public IP address(es) of S3 service endpoint)

VPC 中或本地使用端点专用 DNS 名称的客户端:

dig *.vpce-0cd6fd8a1a7d95f7e-4nyak8fx.s3.<Region>.vpce.amazonaws.com +short
10.0.23.155
10.0.4.122

前面的输出显示,VPC 内部的客户端解析为 S3 服务终端节点的公有 IP 地址,而企业数据中心中的客户端解析为 Amazon S3 接口 VPC 终端节点 ENI IP 地址。

场景 2 使用私有 DNS

在此配置中,VPC 内和本地流量均通过 S3 的接口 VPC 终端节点流动。当您想要简化架构以仅使用一种终端节点时,此选项很有用,因为它简化了 DNS 管理。但是,这不是一个经济高效的解决方案,因为现在从 VPC 中的资源到 S3 的流量也会产生与 S3 接口 VPC 终端节点相关的数据传输费用。VPC 如 图 5 所示 ,绿色和蓝色表示流量从 VPC 和本地环境中的 EC2 实例通过 S3 的接口 VPC 终端节点流动。

Figure 5-With private DNS enabled and Enable private DNS only for inbound endpoint disabled

图 5:启用私有 DNS 并禁用仅对入站端点启用私有 DNS

图表演练

所有步骤 1 到 5 保持不变,如 图 1 所示 。但是,现在只有 VPC 内启用 私有 DNS 的 客户端以及本地客户端通过 S3 接口 VPC 终端节点连接到 Amazon S3。

VPC 内的客户端:

dig s3.<Region>.amazonaws.com +short
10.0.23.155
10.0.4.122

本地应用程序内部的客户端:

dig s3.<Region>.amazonaws.com +short
10.0.23.155
10.0.4.122

前面的输出显示,VPC 内部和本地的客户端都解析为接口 Amazon S3 的 VPC 终端节点 ENI IP 地址。

场景 3:仅为入站解析器端点 使用 私有 D NS

在此配置中,来自 VPC 内应用程序的流量流经网关 VPC 终端节点,而本地流量则流经接口 S3 的 VPC 终端节点。此选项为从 VPC 和本地应用程序访问 S3 提供了经济实惠的网络设计。选择此配置时,您需要在您的 VPC 中维护网关 VPC 终端节点。这是为了让您的流量始终保持在 亚马逊云科技 私有网络上。这消除了在没有网关终端节点的情况下,您的 VPC 内流量无意中通过互联网网关或者在没有互联网网关时被丢弃的可能性。因此,如果您运行应用程序的 VPC 中不存在网关 VPC 终端节点,它将阻止您选择 “仅为入站终端节点 启用私有 DNS ” 选项 。如果您想将现有接口终端节点更新为仅对入站终端节点 启用私有 DNS ,则必须确认您的 VPC 具有适用于 S3 的网关 VPC 终端节点。有关网关 VPC 终端节点和管理私有 DNS 名称的更多信息,请 分别参阅 亚马逊云科技 PrivateLink 指南中的 网关 VPC 终端节点 管理 DNS 名称

图 6 显示了从 VPC 内 EC2 实例流经网关 VPC 终端节点的流量的蓝色路径,而绿色路径显示了使用接口 VPC 终端节点从本地流向 S3 的流量。

Figure 6-With private DNS enabled and Enable private DNS only for inbound endpoint enabled

图 6:启用私有 DNS 并仅为入站端点启用私有 DNS

图表演练

所有步骤 1 到 5 与 图 1 相同 。但是,现在 私有 DNS 和 “仅对入站终端节点 启用私有 DNS”,VPC 内的客户端通过 S3 的网关 VPC 终端节点连接到 Amazon S3,而本地客户端则通过 S3 的 VPC 接口 VPC 终端节点连接到 Amazon S3。

VPC 中使用网关终端节点的客户端:

$ dig s3.<Region>.amazonaws.com +short
54.x.y.z (Public IP address(es) of S3 service endpoint)

使用接口端点的本地客户端:

$ dig s3.<Region>.amazonaws.com +short
10.0.23.155
10.0.4.122

当私有 DNS 和仅为入站终端节点 启用私 有 DNS 时,您无法删除网关 VPC 终端节点。如果你尝试这样做,它会引发以下错误:

“当服务的接口端点将 privatednsonlyforinboundResolverendPoint 设置为 true 时,无法删除网关端点。”

在这种情况下,如果要删除网关 VPC 终端节点,则需要修改接口 VPC 终端节点并取消选择 “仅为入站终端节点 启用私有 DNS” 选项。

结论

在这篇博客文章中,我们讨论了使用私有 DNS 作为 Amazon S3 接口 VPC 终端节点在不修改本地应用程序的情况下访问 Amazon S3。我们介绍了使用 “仅为入站端点 启用私有 DNS ” 选项来优化 S3 的网络路径。这些选项使您能够利用成本最低的私有网络路径,而无需对客户端进行代码或配置更改。 要开始使用适用于 Amazon S3 的 亚马逊云科技 PrivateLink,请访问此页面。

有关适用于 Amazon S3 的 亚马逊云科技 PrivateLink 的更多信息,您可以参考以下博客:

  • 使用 亚马逊云科技 PrivateLink 安全混合访问亚马逊 S3
  • 为亚马逊 S3 选择您的 VPC 终端节点策略
  • 亚马逊云科技 合作伙伴使用 亚马逊云科技 PrivateLink 私密连接到 Amazon S3