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 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 端点访问 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 或 UploadPartCopy
-
传输层安全性协议(TLS)1.1
创建 VPC 端点
要创建 VPC 接口端点,请参阅《Amazon PrivateLink 指南》中的创建 VPC 端点。
访问 Amazon S3 接口端点
创建接口端点时,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 名称。
私有 DNS
VPC 接口端点的私有 DNS 选项简化了通过 VPC 端点路由 S3 流量的过程,并帮助您充分利用应用程序可用的最低成本网络路径。您可以使用私有 DNS 选项来路由区域 S3 流量,而无需更新 S3 客户端以使用接口端点的端点特定 DNS 名称,也无需管理 DNS 基础设施。启用私有 DNS 名称后,对于以下端点,区域 S3 DNS 查询将解析为 Amazon PrivateLink 的私有 IP 地址:
-
区域存储桶端点(例如
s3.us-east-1.amazonaws.com
) -
控制端点(例如
s3-control.us-east-1.amazonaws.com
) -
接入点端点(例如
s3-accesspoint.us-east-1.amazonaws.com
)
适用于 Amazon S3 的 Amazon PrivateLink 不支持 Using Amazon S3 dual-stack endpoints。如果您使用 S3 双堆栈 DNS 名称作为私有 DNS 名称,则 IPv6 流量将被丢弃,或者,如果虚拟私有云(VPC)有互联网网关,则 IPv6 流量将通过 VPC 中的互联网网关路由。
如果您的 VPC 中有网关端点,则可以通过现有 S3 网关端点自动路由 VPC 内请求,并通过接口端点自动路由本地请求。此方法允许您使用 VPC 内流量不计费的网关端点来优化网络成本。您的本地应用程序可以在入站解析器端点的帮助下使用 Amazon PrivateLink。Amazon 为您的 VPC 提供 DNS 服务器,称为 Route 53 Resolver。入站解析器端点将来自本地网络的 DNS 查询转发到 Route 53 Resolver。
重要
要在使用仅对入站端点启用私有 DNS 时充分利用成本最低的网络路径,您的 VPC 中必须存在网关端点。当选择仅对入站端点启用私有 DNS 选项时,网关端点的存在有助于确保 VPC 内流量始终通过 Amazon 私有网络路由。当选择仅对入站端点启用私有 DNS 选项时,必须维护此网关端点。如果要删除网关端点,则必须先清除仅对入站端点启用私有 DNS。
如果您想要将现有接口端点更新为仅对入站端点启用私有 DNS,请先确认您的 VPC 具有 S3 网关端点。有关网关端点和管理私有 DNS 名称的更多信息,请分别参阅《Amazon PrivateLink 指南》中的网关 VPC 端点和管理 DNS 名称。
仅对入站端点启用私有 DNS 选项仅适用于支持网关端点的服务。
有关创建使用仅对入站端点启用私有 DNS 的 VPC 端点的更多信息,请参阅《Amazon PrivateLink 指南》中的创建接口端点。
使用 VPC 控制台
在控制台中,您有两个选项:启用 DNS 名称和仅对入站端点启用私有 DNS。启用 DNS 名称是 Amazon PrivateLink 支持的选项。通过使用启用 DNS 名称选项,您可以使用 Amazon 的与 Amazon S3 的私有连接,同时向默认公有端点 DNS 名称发出请求。启用此选项后,客户可以利用其应用程序可用的成本最低的网络路径。
当您在 Amazon S3 的现有或新的 VPC 接口端点上启用私有 DNS 名称时,默认情况下会选择仅对入站端点启用私有 DNS 选项。如果选择此选项,则您的应用程序仅对本地流量使用接口端点。这种 VPC 内流量会自动使用成本较低的网关端点。或者,您可以清除仅对入站端点启用私有 DNS,以通过您的接口端点路由所有 S3 请求。
使用 Amazon CLI
如果不指定 PrivateDnsOnlyForInboundResolverEndpoint
的值,则它默认为 true
。但是,在您的 VPC 应用设置之前,它会进行检查以确保 VPC 中存在网关端点。如果 VPC 中存在网关端点,则调用成功。否则,您将看到以下错误消息:
要将 PrivateDnsOnlyForInboundResolverEndpoint 设置为 true,VPC
vpce_id
必须具有该服务的网关端点。
对于新的接口 VPC 端点
使用 private-dns-enabled
和 dns-options
属性通过命令行启用私有 DNS。dns-options
属性中的 PrivateDnsOnlyForInboundResolverEndpoint
选项必须设置为 true
。将
替换为您自己的信息。user input placeholders
aws ec2 create-vpc-endpoint \ --region
us-east-1
\ --service-names3-service-name
\ --vpc-idclient-vpc-id
\ --subnet-idsclient-subnet-id
\ --vpc-endpoint-type Interface \ --private-dns-enabled \ --ip-address-typeip-address-type
\ --dns-options PrivateDnsOnlyForInboundResolverEndpoint=true \ --security-group-idsclient-sg-id
对于现有 VPC 端点
如果您想对现有 VPC 端点使用私有 DNS,请使用以下示例命令并将
替换为您自己的信息。user input placeholders
aws ec2 modify-vpc-endpoint \ --region
us-east-1
\ --vpc-endpoint-idclient-vpc-id
\ --private-dns-enabled \ --dns-options PrivateDnsOnlyForInboundResolverEndpoint=false
如果您想更新现有 VPC 端点以仅对入站解析器启用私有 DNS,请使用以下示例并将示例值替换为您自己的值。
aws ec2 modify-vpc-endpoint \ --region
us-east-1
\ --vpc-endpoint-idclient-vpc-id
\ --private-dns-enabled \ --dns-options PrivateDnsOnlyForInboundResolverEndpoint=true
从 S3 接口端点访问存储桶、接入点和 Amazon S3 控制 API 操作
您可以使用 Amazon CLI 或 Amazon SDK 通过 S3 接口端点访问存储桶、S3 接入点和 Amazon S3 控制 API 操作。
下图显示了 VPC 控制台详细信息选项卡,您可以在其中找到 VPC 端点的 DNS 名称。在此示例中,VPC 端点 ID (vpce-id) 为 vpce-0e25b8cdd720f900e
,DNS 名称为 *.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com
。
使用 DNS 名称访问资源时,将 *
替换为相应的值。用来代替 *
的相应值如下所示:
-
bucket
-
accesspoint
-
control
例如,要访问存储桶,请使用如下所示的 DNS 名称。
bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com
有关如何使用 DNS 名称访问存储桶、接入点和 Amazon S3 控制 API 操作的示例,请参阅下面的章节:Amazon CLI 示例和Amazon SDK 示例。
有关如何查看端点特定 DNS 名称的更多信息,请参阅《VPC 用户指南》中的查看端点服务私有 DNS 名称配置。
Amazon CLI 示例
要在 Amazon CLI 命令中通过 S3 接口端点访问 S3 存储桶、S3 接入点或 Amazon S3 控制 API操作,请使用 --region
和 --endpoint-url
参数。
示例:使用端点 URL 列出存储桶中的对象
在以下示例中,将存储桶名称
、区域 my-bucket
和 VPC 端点 ID 的 DNS 名称 us-east-1
替换为您自己的信息。vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
aws s3 ls s3://
my-bucket
/ --regionus-east-1
--endpoint-url https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
示例:使用端点 URL 列出接入点中的对象
-
方法 1 – 将接入点的 Amazon 资源名称(ARN)与接入点端点结合使用
将 ARN
、区域us-east-1:123456789012:accesspoint/accesspointexamplename
和 VPC 端点 IDus-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/accesspointexamplename
--regionus-east-1
--endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
如果您无法成功运行该命令,请将 Amazon CLI 更新为最新版本,然后重试。有关更新说明的更多信息,请参阅《Amazon Command Line Interface 用户指南》中的安装或更新 Amazon CLI 的最新版本。
-
方法 2 – 将接入点的别名与区域存储桶端点结合使用
在以下示例中,将接入点别名
、区域accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias
和 VPC 端点 IDus-east-1
替换为您自己的信息。vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
aws s3api list-objects-v2 --bucket
accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias
--regionus-east-1
--endpoint-url https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
-
方法 3 – 将接入点的别名与接入点端点结合使用
首先,要构造一个包含存储桶作为主机名一部分的 S3 端点,请将寻址样式设置为
virtual
以供aws s3api
使用。有关AWS configure
的更多信息,请参阅《Amazon Command Line Interface 用户指南》中的配置和凭证文件设置。aws configure set default.s3.addressing_style virtual
然后,在以下示例中,将接入点别名
、区域accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias
和 VPC 端点 IDus-east-1
替换为您自己的信息。有关接入点别名的更多信息,请参阅为您的 S3 存储桶接入点使用存储桶式别名vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
aws s3api list-objects-v2 --bucket
accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias
--regionus-east-1
--endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
示例:使用端点 URL 通过 S3 控制 API 操作列出任务
在以下示例中,将区域
、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 SDK 示例
要在使用 Amazon SDK 时通过 S3 接口端点访问 S3 存储桶、S3 接入点、Amazon S3 控制 API 操作,请将 SDK 更新到最新版本。然后,将客户端配置为使用端点 URL 通过 S3 接口端点访问存储桶、接入点或 Amazon 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。要通过这种方式访问 Amazon 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 中有使用存储桶的其他 Amazon Web Services 服务,这种策略会非常有用。以下存储桶策略限制为仅可访问
。要使用此端点策略,请将 amzn-s3-demo-bucket1
替换为您的存储桶名称。amzn-s3-demo-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:::
amzn-s3-demo-bucket1
/*"] } ] }
amzn-s3-demo-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
" } } } ] }
注意
要指定要访问的资源的 Amazon Web Services 账户 ID,可以在 IAM 策略中使用 aws:ResourceAccount
或 s3:ResourceAccount
键。但请注意,有些 Amazon Web Services 服务依赖于访问 Amazon 托管式存储桶。因此,在 IAM 策略中使用 aws:ResourceAccount
或 s3:ResourceAccount
键也可能会影响对这些资源的访问。
示例:限制对 S3 存储桶策略中特定 VPC 端点的访问
示例:限制对 S3 存储桶策略中特定 VPC 端点的访问
以下 Amazon S3 存储桶策略仅允许从 VPC 端点
访问特定的存储桶 vpce-1a2b3c4d
。如果未使用指定的端点,则该策略拒绝对存储桶的所有访问。amzn-s3-demo-bucket2
aws:sourceVpce
条件指定端点,而不需要 VPC 端点资源的 Amazon 资源名称(ARN),只需要端点 ID。要使用此存储桶策略,请将
和 amzn-s3-demo-bucket2
替换为您的存储桶名称和端点。vpce-1a2b3c4d
重要
-
当应用以下 Amazon S3 存储桶策略来限制仅可访问特定的 VPC 端点时,您可能会无意中屏蔽对存储桶的访问。存储桶策略旨在专门限制存储桶访问源自 VPC 端点的连接,而这可能会屏蔽到存储桶的所有连接。有关如何修复此问题的信息,请参阅我的存储桶策略有错误的 VPC 或 VPC 端点 ID。Amazon Web Services Support 知识中心内的如何修复策略才能访问存储桶?
。 -
在使用以下示例策略之前,将 VPC 端点 ID 替换为适合您的使用案例的值。否则,您将无法访问您的存储桶。
-
此策略禁用控制台访问指定的存储桶,因为控制台请求不是来自指定的 VPC 端点。
{ "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:::
amzn-s3-demo-bucket2
"], "Condition": {"StringNotEquals": {"aws:sourceVpce": "
amzn-s3-demo-bucket2
/*vpce-1a2b3c4d
"}} } ] }
有关更多策略示例,请参阅 VPC 用户指南中的 Amazon S3 端点。
有关 VPC 连接的更多信息,请参阅 Amazon 白皮书 Amazon Virtual Private Cloud 连接性选项中的 Network-to-VPC connectivity options(从网络到 VPC 的连接性选项)。