Amazon PrivateLink 适用于 Amazon S3 的
借助适用于 Amazon S3 的 Amazon PrivateLink,您可以在 Virtual Private Cloud (VPC) 中预置接口 VPC 端点(接口端点)。这些端点可从本地(通过 VPN 及 Amazon Direct Connect)或其他 Amazon Web Services 区域(通过 VPC 对等连接)中的应用程序直接访问。
接口端点由一个或多个弹性网络接口 (ENI) 代表,这些接口是从 VPC 中的子网分配的私有 IP 地址。向适用于 Amazon S3 的接口端点发出的请求将自动路由到 Amazon 网络上的 Amazon S3。您还可以通过 Amazon Direct Connect 或 Amazon Virtual Private Network (Amazon VPN) 从本地部署应用程序访问 VPC 中的接口端点。有关如何将 VPC 与本地网络连接的更多信息,请参阅 Amazon Direct Connect 用户指南和 Amazon Site-to-Site VPN 用户指南。
有关接口端点的一般信息,请参阅 Amazon PrivateLink 指南中的接口 VPC 端点 (Amazon PrivateLink)。
主题
适用于 Amazon S3 的 VPC 端点类型
您可以使用两种类型的 VPC 端点访问 Simple Storage Service (Amazon S3):网关端点 和接口端点(使用 Amazon PrivateLink)。网关端点是您在路由表中指定的网关,用于通过 Amazon 网络从 VPC 访问 Amazon S3。接口端点通过私有 IP 地址将请求从您的 VPC 内部、本地或其他 Amazon Web Services 区域 中的 VPC 使用 VPC 对等连接或 Amazon Transit Gateway 路由到 Amazon S3,从而扩展网关端点的功能。有关更多信息,请参阅什么是 VPC 对等连接和 Transit Gateway 与 VPC 对等连接。
接口端点与网关端点兼容。如果您在 VPC 中有现有网关端点,则可以在同一 VPC 中使用这两种类型的端点。
适用于 Amazon S3 的网关端点 |
适用于 Amazon S3 的接口端点 |
---|---|
在这两种情况下,您的网络流量仍保留在 Amazon 网络中。 |
|
使用 Amazon S3 公有 IP 地址 |
使用 VPC 中的私有 IP 地址访问 Amazon S3 |
使用相同的 Simple Storage Service (Amazon S3) DNS 名称 |
|
不允许从本地访问 |
允许从本地访问 |
不允许从其他 Amazon Web Services 区域访问 |
允许从另一个 Amazon Web Services 区域使用 VPC 对等连接或 Amazon Transit Gateway 进行访问 |
不计费 |
已计费 |
有关网关端点的更多信息,请参阅 Amazon PrivateLink 指南中的网关 VPC 端点。
适用于 Amazon S3 的 Amazon PrivateLink 的限制和局限性
VPC 限制应用于适用于 Amazon S3 的 Amazon PrivateLink。有关更多信息,请参阅 Amazon PrivateLink 指南中的接口端点属性和限制以及 Amazon PrivateLink 配额。此外,以下限制将适用:
适用于 Amazon S3 的 Amazon PrivateLink 不支持以下各项:
-
在不同 Amazon Web Services 区域中的存储桶之间使用 CopyObject API 或 UploadPartCopy API
-
传输层安全性协议(TLS)1.0
创建 VPC 端点
要创建 VPC 接口端点,请参阅《Amazon PrivateLink 指南》中的创建 VPC 端点。
访问 Amazon S3 接口端点
要使用 Amazon PrivateLink 访问 Amazon S3,您必须更新应用程序以使用特定于端点的 DNS 名称。
创建接口端点时,Amazon S3 会生成两种特定于端点的 S3 DNS 名称:区域和地区。
-
区域 DNS 名称包括唯一的 VPC 端点 ID、服务标识符、Amazon Web Services 区域和以其命名的
vpce.amazonaws.com
。例如,对于 VPC 端点 ID
,生成的 DNS 名称可能类似于vpce-1a2b3c4d
。vpce-1a2b3c4d-5e6f
.s3.us-east-1.vpce.amazonaws.com -
地区 DNS 名称包括可用区 – 例如
。如果您的架构隔离了可用区,则可以使用此选项。例如,您可以将其用于故障控制或降低区域数据传输成本。vpce-1a2b3c4d-5e6f
-us-east-1a.s3.us-east-1.vpce.amazonaws.com
可以从 S3 公有 DNS 域解析特定于端点的 S3 DNS 名称。
Amazon S3 接口端点不支持接口端点的私有 DNS 功能。有关用于接口端点的私有 DNS 的更多信息,请参阅 Amazon PrivateLink 指南。
从 S3 接口端点访问存储桶和 S3 接入点
您可以使用 Amazon CLI 或 Amazon 软件开发工具包通过 S3 接口端点访问存储桶、S3 接入点和 S3 控制 API。
下图显示了 VPC 控制台详细信息选项卡,您可以在其中找到 VPC 端点的 DNS 名称。在此示例中,VPC 端点 ID (vpce-id) 为 vpce-0e25b8cdd720f900e
,DNS 名称为 *.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com
。请记住使用 DNS 名称时要替换 *
。例如,要访问存储桶,DNS 名称将是 bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com
。

有关如何查看端点特定 DNS 名称的更多信息,请参阅 VPC 用户指南中的查看端点服务私有 DNS 名称配置。
Amazon CLI 示例
使用 --region
及 --endpoint-url
参数通过 S3 接口端点访问 S3 存储桶、S3 接入点或 S3 控制 API。
示例:使用端点 URL 列出存储桶中的对象
在以下示例中,将区域
、VPC 端点 ID us-east-1
、和存储桶名称 vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
替换为相应的信息。my-bucket
aws s3 --region
us-east-1
--endpoint-url https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
ls s3://my-bucket
/
示例:使用端点 URL 列出来自访问点的对象
在以下示例中,将 ARN
、区域 us-east-1:123456789012:accesspoint/test
、和 VPC 端点 ID us-east-1
替换为相应的信息。vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
aws s3api list-objects-v2 --bucket arn:aws:s3:
us-east-1:123456789012:accesspoint/test
--regionus-east-1
--endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
示例:使用端点 URL 列出具有 S3 控制的作业
在以下示例中,将区域
、VPC 端点 ID us-east-1
和账户 ID vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
替换为相应的信息。12345678
aws s3control --region
us-east-1
--endpoint-url https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
list-jobs --account-id12345678
Amazon 软件开发工具包示例
将开发工具包更新到最新版本,然后将客户端配置为使用端点 URL 通过 S3 接口端点访问存储桶、接入点或 S3 控制 API。
更新本地 DNS 配置
使用特定于端点的 DNS 名称访问适用于 Amazon S3 的接口端点时,您无需更新本地 DNS 解析程序。您可以使用来自公有 Amazon S3 DNS 域的接口端点的私有 IP 地址解析特定于端点的 DNS 名称。
使用接口端点访问 Amazon S3,无需 VPC 中的网关端点和互联网网关
VPC 中的接口端点可以通过 Amazon 网络将 VPC 内的应用程序和本地应用程序路由到 Amazon S3,如下图所示。

该图阐释了以下内容:
-
您的本地部署网络使用 Amazon Direct Connect 或者 Amazon VPN 连接到 VPC A。
-
本地和 VPC A 中的应用程序使用特定于端点的 DNS 名称通过 S3 接口端点访问 Amazon S3。
-
本地部署应用程序通过 Amazon Direct Connect(或 Amazon VPN)将数据发送到 VPC 中的接口端点。Amazon PrivateLink 通过 Amazon 网络将数据从接口端点移动到 Amazon S3。
-
VPC 中的应用程序还向接口端点发送通信。Amazon PrivateLink 通过 Amazon 网络将数据从接口端点移动到 Amazon S3。
在同一 VPC 中同时使用网关端点和接口端点来访问 Amazon S3
您可以创建接口端点并将现有网关端点保留在同一 VPC 中,如下图所示。这样,您就可以允许 VPC 内应用程序继续通过网关端点访问 Amazon S3,而无需付费。然后,只有您的本地应用程序才会使用接口端点访问 Amazon S3。要通过这种方式访问 S3,您必须更新本地应用程序,以使用适用于 Amazon S3 的特定于端点的 DNS 名称。

该图阐释了以下内容:
-
本地部署应用程序使用特定于端点的 DNS 名称通过 Amazon Direct Connect(或 Amazon VPN)将数据发送到 VPC 中的接口端点。Amazon PrivateLink 通过 Amazon 网络将数据从接口端点移动到 Amazon S3。
-
使用原定设置的区域 Amazon S3 名称,VPC 内应用程序会将数据发送到通过 Amazon 网络连接到 Amazon S3 的网关端点。
有关网关端点的更多信息,请参阅 VPC 用户指南中的网关 VPC 端点。
为 Amazon S3 创建 VPC 端点策略
您可以为 VPC 端点附加控制对 Amazon S3 的访问的端点策略。该策略指定以下信息:
-
可执行操作的 Amazon Identity and Access Management (IAM) 主体
-
可执行的操作
-
可对其执行操作的资源
您还可以使用 Amazon S3 存储桶策略,使用存储桶策略中的 aws:sourceVpce
条件限制从特定 VPC 端点访问特定存储桶。以下示例显示了限制对存储桶或端点的访问的策略。
-
如本节中所述对 VPC 端点应用 Amazon S3 存储桶策略时,您可能会无意中阻止对存储桶的访问权限。存储桶权限旨在专门限制存储桶访问源自 VPC 端点的连接,而这可能会阻止到存储桶的所有连接。有关如何修复此问题的信息,请参阅我的存储桶策略有错误的 VPC 或 VPC 端点 ID。Amazon Web Services Support 知识中心内的如何修复策略才能访问存储桶?
。 -
在使用以下示例策略之前,将 VPC 端点 ID 替换为适合您的使用案例的值。否则,您将无法访问您的存储桶。
-
此策略禁用控制台访问指定的存储桶,因为控制台请求不是来自指定的 VPC 端点。
示例:限制从 VPC 端点对特定存储桶的访问
您可以创建一个端点策略来仅允许访问特定 Amazon S3 存储桶。如果您的 VPC 中有使用存储桶的其他 Amazon 服务,这会非常有用。以下存储桶策略将限制为仅访问
。将 DOC-EXAMPLE-BUCKET1
替换为您的存储桶的名称。DOC-EXAMPLE-BUCKET1
{ "Version": "2012-10-17", "Id": "Policy1415115909151", "Statement": [ { "Sid": "Access-to-specific-bucket-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::
", "arn:aws:s3:::
DOC-EXAMPLE-BUCKET1
/*"] } ] }
DOC-EXAMPLE-BUCKET1
示例:限制从 VPC 端点对特定账户中存储桶的访问
您可以创建一个策略,限制仅访问特定 Amazon Web Services 账户 中的 S3 存储桶。使用此选项可防止 VPC 内的客户端访问不属于您的存储桶。以下示例创建了限制对由单个 Amazon Web Services 账户 ID 111122223333
拥有的资源访问权限的策略。
{ "Statement": [ { "Sid": "Access-to-bucket-in-specific-account-only", "Principal": "*", "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Deny", "Resource": "arn:aws:s3:::*", "Condition": { "StringNotEquals": { "aws:ResourceAccount": "
111122223333
" } } } ] }
您可以使用 IAM policy 中的 aws:ResourceAccount
或 s3:ResourceAccount
键来指定要访问的资源的 Amazon Web Services 账户 ID。但请注意,有些 Amazon 服务依赖于访问 Amazon 托管式桶。因此,在 IAM policy 中使用 aws:ResourceAccount
或 s3:ResourceAccount
键也可能会影响对这些资源的访问。
示例:限制对 S3 存储桶策略中特定 VPC 端点的访问
以下 Amazon S3 存储桶策略仅允许从端点
访问特定存储桶 DOC-EXAMPLE-BUCKET2
。如果未使用指定的端点,则该策略拒绝对存储桶的所有访问。vpce-1a2b3c4d
aws:sourceVpce
条件用于指定端点,不需要 VPC 端点资源的 Amazon 资源名称 (ARN),而只需要端点 ID。将
和 DOC-EXAMPLE-BUCKET2
替换为真实的存储桶名称和端点。vpce-1a2b3c4d
{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::
", "arn:aws:s3:::
DOC-EXAMPLE-BUCKET2
"], "Condition": {"StringNotEquals": {"aws:sourceVpce": "
DOC-EXAMPLE-BUCKET2
/*vpce-1a2b3c4d
"}} } ] }
有关更多策略示例,请参阅 VPC 用户指南中的 Amazon S3 端点。
有关 VPC 连接的更多信息,请参阅 Amazon 白皮书 Amazon Virtual Private Cloud 连接性选项中的 Network-to-VPC connectivity options(从网络到 VPC 的连接性选项)。