

# 互联网络流量隐私
<a name="inter-network-traffic-privacy"></a>

此主题介绍 Amazon S3 如何保护从服务到其他位置的连接。

## 服务与本地客户端和应用之间的流量
<a name="inter-network-traffic-privacy-on-prem"></a>

以下连接可以和 AWS PrivateLink 合并使用，以提供私有联网和 AWS 之间的连接性：
+ 一个 AWS Site-to-Site VPN 连接。有关更多信息，请参阅[什么是 AWS Site-to-Site VPN？](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)
+ 一个 Direct Connect 连接。有关更多信息，请参阅[什么是 Direct Connect？](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html)

通过网络访问 Amazon S3 是通过 AWS 发布的 API 进行的。客户端必须支持传输层安全性协议（TLS）1.2。我们建议将 TLS 1.3 用于混合后量子密钥交换。客户端还必须支持具有完全向前保密（PFS）的密码套件，例如 Ephemeral Diffie-Hellman（DHE）或 Elliptic Curve Diffie-Hellman Ephemeral（ECDHE）。大多数现代系统（如 Java 7 及更高版本）都支持这些模式。此外，必须使用与 IAM 主体关联的访问密钥 ID 和秘密访问密钥签名请求，或者可以使用 [AWS Security Token Service（STS）](https://docs.aws.amazon.com/STS/latest/APIReference/Welcome.html)生成临时安全证书来签名请求。

## 同一区域中 AWS 资源之间的流量
<a name="inter-network-traffic-privacy-within-region"></a>

Amazon S3 的 Virtual Private Cloud (VPC) 端点是 VPC 内的逻辑实体，仅允许连接到 Amazon S3。VPC 将请求路由到 Amazon S3 并将响应路由回 VPC。有关更多信息，请参阅 *VPC 用户指南*中的 [VPC 端点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)。有关您可用来从 VPC 端点控制 S3 存储桶访问的示例存储桶策略，请参阅[使用存储桶策略控制从 VPC 端点的访问](example-bucket-policies-vpc-endpoint.md)。

# AWS PrivateLink适用于 Amazon S3 的
<a name="privatelink-interface-endpoints"></a>

借助适用于 Amazon S3 的 AWS PrivateLink，您可以在 Virtual Private Cloud (VPC) 中预置*接口 VPC 端点*（接口端点）。这些端点可从本地（通过 VPN 及 Direct Connect）或其他 AWS 区域（通过 VPC 对等连接）中的应用程序直接访问。

接口端点由一个或多个弹性网络接口 (ENI) 代表，这些接口是从 VPC 中的子网分配的私有 IP 地址。通过接口端点向 Amazon S3 发出的请求仍留在 Amazon 网络上。您还可以通过 AWS Direct Connect 或 AWS Virtual Private Network (Site-to-Site VPN) 从本地部署应用程序访问 VPC 中的接口端点。有关如何将 VPC 与本地网络连接的更多信息，请参阅 [Direct Connect User Guide](https://docs.aws.amazon.com/directconnect/latest/UserGuide/Welcome.html) 和 [AWS Site-to-Site VPN User Guide](https://docs.aws.amazon.com/vpn/latest/s2svpn/VPC_VPN.html)。

有关接口端点的一般信息，请参阅 *AWS PrivateLink 指南*中的[接口 VPC 端点 (AWS PrivateLink)](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html)。

**Topics**
+ [适用于 Amazon S3 的 VPC 端点类型](#types-of-vpc-endpoints-for-s3)
+ [适用于 Amazon S3 的 AWS PrivateLink 的限制和局限性](#privatelink-limitations)
+ [创建 VPC 端点](#s3-creating-vpc)
+ [访问 Amazon S3 接口端点](#accessing-s3-interface-endpoints)
+ [VPC 端点的 IP 地址类型](#privatelink-ip-address-types)
+ [VPC 端点的 DNS 记录 IP 类型](#privatelink-dns-record-types)
+ [私有 DNS](#private-dns)
+ [从 S3 接口端点访问存储桶、接入点和 Amazon S3 控制 API 操作](#accessing-bucket-and-aps-from-interface-endpoints)
+ [更新本地 DNS 配置](#updating-on-premises-dns-config)
+ [为 Amazon S3 创建 VPC 端点策略](#creating-vpc-endpoint-policy)

## 适用于 Amazon S3 的 VPC 端点类型
<a name="types-of-vpc-endpoints-for-s3"></a>

您可以使用两种类型的 VPC 端点访问 Amazon S3：*网关端点*和*接口端点*（使用 AWS PrivateLink）。*网关端点*是您在路由表中指定的网关，用于通过 AWS 网络从 VPC 访问 Amazon S3。*接口端点*通过私有 IP 地址，使用 VPC 对等连接或 AWS Transit Gateway 将请求从您的 VPC 内、本地或其它 AWS 区域中的 VPC 路由到 Amazon S3，从而扩展网关端点的功能。有关更多信息，请参阅[什么是 VPC 对等连接?](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html)和 [Transit Gateway 与 VPC 对等连接](https://docs.aws.amazon.com/whitepapers/latest/building-scalable-secure-multi-vpc-network-infrastructure/transit-gateway-vs-vpc-peering.html)。

接口端点与网关端点兼容。如果您在 VPC 中有现有网关端点，则可以在同一 VPC 中使用这两种类型的端点。


|  适用于 Amazon S3 的网关端点  |  适用于 Amazon S3 的接口端点  | 
| --- | --- | 
|  在这两种情况下，您的网络流量仍保留在 AWS 网络中。  | 
|  使用 Amazon S3 公有 IP 地址  |  使用 VPC 中的私有 IP 地址访问 Amazon S3  | 
|  使用相同的 Simple Storage Service (Amazon S3) DNS 名称  |  [需要特定于端点的 Simple Storage Service (Amazon S3) DNS 名称](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html#accessing-s3-interface-endpoints)  | 
|  不允许从本地访问  |  允许从本地访问  | 
|  不允许从其他 AWS 区域访问  |  允许从另一个 AWS 区域使用 VPC 对等连接或 AWS Transit Gateway 进行访问  | 
|  不计费  |  已计费  | 

有关更多信息，请参阅《AWS PrivateLink 指南》**中的[网关端点](https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html)和[接口 VPC 端点](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html)。

## 适用于 Amazon S3 的 AWS PrivateLink 的限制和局限性
<a name="privatelink-limitations"></a>

VPC 限制应用于适用于 Amazon S3 的 AWS PrivateLink。有关更多信息，请参阅《AWS PrivateLink 指南》**中的[接口端点注意事项](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-interface.html#vpce-interface-limitations)和 [AWS PrivateLink 限额](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-limits-endpoints.html)。此外，以下限制将适用：

Amazon S3 的接口端点不支持以下各项：
+ [美国联邦信息处理标准 (FIPS) 端点](https://aws.amazon.com/compliance/fips/)
+ [网站端点](WebsiteEndpoints.md)
+ [传统全局端点](VirtualHosting.md#deprecated-global-endpoint)
+ [S3 短划线区域端点](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html)
+ 在不同 AWS 区域中的桶之间使用 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CopyObject.html) 或 [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)
+ 传输层安全性协议（TLS）1.0
+ 传输层安全性协议（TLS）1.1
+ 传输层安全性协议（TLS）1.3
+ 混合后量子传输层安全性协议（TLS）

## 创建 VPC 端点
<a name="s3-creating-vpc"></a>

要创建 VPC 接口端点，请参阅《AWS PrivateLink Guide》**中的 [Create a VPC endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)。要创建 VPC 网关端点，请参阅《AWS PrivateLink 指南》**中的[创建 VPC 端点](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#create-gateway-endpoint-s3)。

## 访问 Amazon S3 接口端点
<a name="accessing-s3-interface-endpoints"></a>

创建接口端点时，Amazon S3 会生成两种特定于端点的 S3 DNS 名称：*区域*和*地区*。
+ *区域* DNS 名称包括唯一的 VPC 端点 ID、服务标识符、AWS 区域和以其命名的 `vpce.amazonaws.com`。例如，对于 VPC 端点 ID `vpce-1a2b3c4d`，生成的 DNS 名称可能类似于 `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 的 VPC 端点支持不同类型的 IP 地址，包括：IPv4、IPv6 和双堆栈。请参阅[VPC 端点的 IP 地址类型](#privatelink-ip-address-types)和[VPC 端点的 DNS 记录 IP 类型](#privatelink-dns-record-types)。

## VPC 端点的 IP 地址类型
<a name="privatelink-ip-address-types"></a>

Amazon S3 的 VPC 端点支持不同类型的 IP 地址，包括：
+ **IPv4**

  VPC 端点可以配置为仅使用 IPv4 地址进行连接。
+ **IPv6**

  VPC 端点可以配置为仅使用 IPv6 地址进行连接。
+ **双堆栈**

  VPC 端点可以配置为双堆栈模式，同时支持 IPv4 和 IPv6 地址。这提供了通过 IPv4 或 IPv6 网络访问 Amazon S3 灵活性。

您为 VPC 端点选择的 IP 地址类型取决于应用程序和基础设施的联网要求。注意事项包括您的 VPC、本地网络以及在 Amazon S3 的互联网连接中使用的 IP 地址方案。有关更多信息，请参阅《Amazon Virtual Private Cloud 指南》**中[接口端点](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html#aws-service-ip-address-type)和[网关端点](https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html#gateway-endpoint-ip-address-type)的 IP 地址类型。

## VPC 端点的 DNS 记录 IP 类型
<a name="privatelink-dns-record-types"></a>

根据您的 IP 地址类型，在调用 VPC 端点时，AWS 服务可以返回 `A` 记录、`AAAA` 记录或 `A` 和 `AAAA` 记录。您可以通过修改 DNS 记录 IP 类型来自定义 AWS 服务返回的记录类型。下表显示支持的 DNS 记录 IP 类型和 IP 地址类型：


| 支持的 IP 地址类型 | DNS 记录 IP 类型 | 
| --- | --- | 
| IPv4 | IPv4 | 
| IPv6 | IPv6 | 
| 双堆栈 | 双堆栈、IPv4、IPv6、服务定义 | 

### 为 Amazon S3 配置服务定义的 DNS 记录 IP 类型
<a name="privatelink-dns-record-types-configure"></a>

如果您为 Amazon S3 创建网关端点，将 DNS 记录 IP 类型配置为服务定义并使用区域服务端点（例如 `s3.us-east-2.amazonaws.com`），则 Amazon S3 会向客户端返回 `A` 记录。相反，如果您创建网关端点，使用双栈服务端点（例如 `s3.dualstack.us-east-2.amazonaws.com`）并为 DNS 记录 IP 类型选择 `service-defined`，则 Amazon S3 会向客户端返回 `A` 和 `AAAA` 记录。

同样，如果您创建接口端点，启用私有 DNS 并为 DNS 记录类型选择服务定义，则对于区域服务端点（例如 `s3.us-east-2.amazonaws.com`），Amazon S3 会向客户端返回 `A` 记录。而对于双堆栈服务端点（例如 `s3.dualstack.us-east-2.amazonaws.com`），Amazon S3 会同时返回 `A` 和 `AAAA` 记录。有关更多信息，请参阅《VPC 用户指南》**中[接口端点](https://docs.aws.amazon.com/vpc/latest/privatelink/privatelink-access-aws-services.html#aws-services-dns-record-ip-type)和[网关端点](https://docs.aws.amazon.com/vpc/latest/privatelink/gateway-endpoints.html#gateway-endpoint-dns-record-ip-type)的 DNS 记录 IP 类型。

下表显示网关和接口端点支持的 DNS 记录 IP 类型：


| IP 地址类型 | S3 网关端点支持的 DNS 记录 IP 类型 | S3 接口端点支持的 DNS 记录 IP 类型  | 
| --- | --- | --- | 
| IPv4 | IPv4，服务定义\$1 | IPv4 | 
| IPv6 | IPv6，服务定义\$1 | IPv6 | 
| 双堆栈 | IPv4、IPv6、双堆栈、服务定义\$1 | 双堆栈\$1、IPv4、IPv6、服务定义 | 

\$1 表示默认 DNS 记录 IP 类型。

要在现有 S3 网关或接口端点上启用 IPv6 连接，请将端点的 IP 地址类型更新为 **Dualstack**。更新后，Amazon S3 会自动使用网关端点的 IPv6 地址更新路由表。然后，您可以使用双栈服务端点（例如 `s3.dualstack.us-east-2.amazonaws.com`），Amazon S3 将为双堆栈 S3 DNS 查询返回 `A` 和 `AAAA` 记录。如果您要将 IPv6 与区域服务端点（例如 `s3.us-east-2.amazonaws.com`）结合使用，请将端点的 IP 地址类型修改为 **Dualstack**；将 DNS 记录 IP 类型修改为 **Dualstack**。然后，Amazon S3 将为区域 S3 DNS 查询返回 `A` 和 `AAAA` 记录。

**注意事项**  
如果您的网关端点的 IP 地址类型默认配置为 `IPv4`，而 DNS 记录 IP 类型为 `service-defined`，则对于双栈服务端点（例如 `s3.dualstack.us-east-2.amazonaws.com`），使用 `AAAA` 记录的流量将不会通过网关端点路由。相反，如果存在与 IPv6 兼容的路径，则流量将通过该路径路由，否则就丢弃。例如，如果您的虚拟私有云（VPC）有互联网网关，则在这种情况下，IPv6 流量将通过 VPC 中的互联网网关路由。如果您想确保流量始终通过 VPC 端点路由，可以使用 Amazon S3 存储桶策略，该策略在未使用指定的 VPC 端点情况下限制对特定存储桶的访问权限。有关更多信息，请参阅[限制对特定 VPC 端点的访问](https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies-vpc-endpoint.html#example-bucket-policies-restrict-accesss-vpc-endpoint)。
如果您的接口端点具有默认配置的 IP 地址类型（即 IPv4），并且 DNS 记录 IP 类型为 IPv4，则不支持双栈服务端点（例如 `ass3.dualstack.us-east-2.amazonaws.com`）。使用双堆栈服务端点 `A` 或 `AAAA` 记录的流量不会通过接口端点路由。相反，如果存在其他兼容的路径，则流量将通过该路径路由，否则就丢弃。
要创建或修改 DNS 记录 IP 类型并非服务定义的网关端点，需要将 `enableDnsSupport` 和 `enableDnsHostnames` VPC 属性都设置为 true。

## 私有 DNS
<a name="private-dns"></a>

VPC 接口端点的私有 DNS 选项简化了通过 VPC 端点路由 S3 流量的过程，并帮助您充分利用应用程序可用的最低成本网络路径。您可以使用私有 DNS 选项来路由区域 S3 流量，而无需更新 S3 客户端以使用接口端点的端点特定 DNS 名称，也无需管理 DNS 基础设施。启用私有 DNS 名称后，对于以下端点，区域 S3 DNS 查询将解析为 AWS PrivateLink 的私有 IP 地址：
+ 区域存储桶端点（例如 `s3.us-east-1.amazonaws.com`）
+ 控制端点（例如 `s3-control.us-east-1.amazonaws.com`）
+ 接入点端点（例如 `s3-accesspoint.us-east-1.amazonaws.com`）

如果您的 VPC 中有网关端点，则可以通过现有 S3 网关端点自动路由 VPC 内请求，并通过接口端点自动路由本地请求。此方法允许您使用 VPC 内流量不计费的网关端点来优化网络成本。您的本地应用程序可以在入站解析器端点的帮助下使用 AWS PrivateLink。Amazon 为您的 VPC 提供 DNS 服务器，称为 Route 53 Resolver。入站解析器端点将来自本地网络的 DNS 查询转发到 Route 53 Resolver。

**重要**  
要在使用**仅对入站端点启用私有 DNS** 时充分利用成本最低的网络路径，您的 VPC 中必须存在网关端点。当选择**仅对入站端点启用私有 DNS** 选项时，网关端点的存在有助于确保 VPC 内流量始终通过 AWS 私有网络路由。当选择**仅对入站端点启用私有 DNS** 选项时，必须维护此网关端点。如果要删除网关端点，则必须先清除**仅对入站端点启用私有 DNS**。  
如果您想要将现有接口端点更新为**仅对入站端点启用私有 DNS**，请先确认您的 VPC 具有 S3 网关端点。有关网关端点和管理私有 DNS 名称的更多信息，请分别参阅《AWS PrivateLink 指南》**中的[网关 VPC 端点](https://docs.aws.amazon.com//vpc/latest/privatelink/vpce-gateway.html)和[管理 DNS 名称](https://docs.aws.amazon.com//vpc/latest/privatelink/manage-dns-names.html)。  
启用**仅适用于入站解析器的私有 DNS** 时，网关端点的 `dnsRecordIpType` 必须与接口端点的该项匹配或者为**服务定义**。

**仅对入站端点启用私有 DNS** 选项仅适用于支持网关端点的服务。

有关创建使用**仅对入站端点启用私有 DNS** 的 VPC 端点的更多信息，请参阅《AWS PrivateLink 指南》**中的[创建接口端点](https://docs.aws.amazon.com//vpc/latest/privatelink/create-interface-endpoint.html)。

**使用 VPC 控制台**

在控制台中，您有两个选项：**启用 DNS 名称**和**仅对入站端点启用私有 DNS**。**启用 DNS 名称**是 AWS PrivateLink 支持的选项。通过使用**启用 DNS 名称**选项，您可以使用 Amazon 的与 Amazon S3 的私有连接，同时向默认公有端点 DNS 名称发出请求。启用此选项后，客户可以利用其应用程序可用的成本最低的网络路径。

当您在 Amazon S3 的现有或新的 VPC 接口端点上启用私有 DNS 名称时，默认情况下会选择**仅对入站端点启用私有 DNS** 选项。如果选择此选项，则您的应用程序仅对本地流量使用接口端点。这种 VPC 内流量会自动使用成本较低的网关端点。或者，您可以清除**仅对入站端点启用私有 DNS**，以通过您的接口端点路由所有 S3 请求。

**使用 AWS CLI**

如果不指定 `PrivateDnsOnlyForInboundResolverEndpoint` 的值，则它默认为 `true`。但是，在您的 VPC 应用设置之前，它会进行检查以确保 VPC 中存在网关端点。如果 VPC 中存在网关端点，则调用成功。否则，您将看到以下错误消息：

要将 PrivateDnsOnlyForInboundResolverEndpoint 设置为 true，VPC *vpce\$1id* 必须具有该服务的网关端点。

**对于新的接口 VPC 端点**

使用 `private-dns-enabled` 和 `dns-options` 属性通过命令行启用私有 DNS。`dns-options` 属性中的 `PrivateDnsOnlyForInboundResolverEndpoint` 选项必须设置为 `true`。将 `user input placeholders` 替换为您自己的信息。

```
aws ec2 create-vpc-endpoint \
--region us-east-1 \
--service-name s3-service-name \
--vpc-id client-vpc-id \
--subnet-ids client-subnet-id \ 
--vpc-endpoint-type Interface  \
--private-dns-enabled  \
--ip-address-type ip-address-type \ 
--dns-options PrivateDnsOnlyForInboundResolverEndpoint=true \
--security-group-ids client-sg-id
```

**对于现有 VPC 端点**

如果您想对现有 VPC 端点使用私有 DNS，请使用以下示例命令并将 `user input placeholders` 替换为您自己的信息。

```
aws ec2 modify-vpc-endpoint \
--region us-east-1 \
--vpc-endpoint-id client-vpc-id \
--private-dns-enabled \
--dns-options PrivateDnsOnlyForInboundResolverEndpoint=false
```

如果您想更新现有 VPC 端点以仅对入站解析器启用私有 DNS，请使用以下示例并将示例值替换为您自己的值。

```
aws ec2 modify-vpc-endpoint \
--region us-east-1 \
--vpc-endpoint-id client-vpc-id \
--private-dns-enabled \
--dns-options PrivateDnsOnlyForInboundResolverEndpoint=true
```

## 从 S3 接口端点访问存储桶、接入点和 Amazon S3 控制 API 操作
<a name="accessing-bucket-and-aps-from-interface-endpoints"></a>

您可以使用 AWS CLI 或 AWS 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`。







![\[VPC 控制台中的详细信息选项卡。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/vpc-console-details-tab.png)


使用 DNS 名称访问资源时，将 *\$1* 替换为相应的值。用来代替 `*` 的相应值如下所示：
+ `bucket`
+ `accesspoint`
+ `control`

例如，要访问存储桶，请使用如下所示的 *DNS 名称*。

 `bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.us-east-1.vpce.amazonaws.com`

有关如何使用 DNS 名称访问存储桶、接入点和 Amazon S3 控制 API 操作的示例，请参阅下面的章节：[AWS CLI 示例](#privatelink-aws-cli-examples)和[AWS SDK 示例](#privatelink-aws-sdk-examples)。

有关如何查看端点特定 DNS 名称的更多信息，请参阅《VPC 用户指南》**中的[查看端点服务私有 DNS 名称配置](https://docs.aws.amazon.com/vpc/latest/privatelink/view-vpc-endpoint-service-dns-name.html)。

### AWS CLI 示例
<a name="privatelink-aws-cli-examples"></a>

要在 AWS CLI 命令中通过 S3 接口端点访问 S3 存储桶、S3 接入点或 Amazon S3 控制 API操作，请使用 `--region` 和 `--endpoint-url` 参数。

**示例：使用端点 URL 列出存储桶中的对象**  
在以下示例中，将存储桶名称 `my-bucket`、区域 `us-east-1` 和 VPC 端点 ID 的 DNS 名称 `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 替换为您自己的信息。

```
aws s3 ls s3://my-bucket/ --region us-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`、区域 `us-east-1` 和 VPC 端点 ID `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 --region us-east-1 --endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
  ```

  如果您无法成功运行该命令，请将 AWS CLI 更新为最新版本，然后重试。有关更新说明的更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[安装或更新 AWS CLI 的最新版本](https://docs.aws.amazon.com//cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)。
+ **方法 2** – 将接入点的别名与区域存储桶端点结合使用

  在以下示例中，将接入点别名 `accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias`、区域 `us-east-1` 和 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 替换为您自己的信息。

  ```
  aws s3api list-objects-v2 --bucket accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias --region us-east-1 --endpoint-url https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
  ```
+ **方法 3** – 将接入点的别名与接入点端点结合使用

  首先，要构造一个包含存储桶作为主机名一部分的 S3 端点，请将寻址样式设置为 `virtual` 以供 `aws s3api` 使用。有关 `AWS configure` 的更多信息，请参阅《AWS Command Line Interface 用户指南》**中的[配置和凭证文件设置](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-files.html)。

  ```
  aws configure set default.s3.addressing_style virtual
  ```

  然后，在以下示例中，将接入点别名 `accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias`、区域 `us-east-1` 和 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 替换为您自己的信息。有关接入点别名的更多信息，请参阅[接入点别名](access-points-naming.md#access-points-alias)

  ```
  aws s3api list-objects-v2 --bucket accesspointexamplename-8tyekmigicmhun8n9kwpfur39dnw4use1a-s3alias --region us-east-1 --endpoint-url https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com
  ```

**示例：使用端点 URL 通过 S3 控制 API 操作列出任务**  
在以下示例中，将区域 `us-east-1`、VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 和账户 ID `12345678` 替换为您自己的信息。

```
aws s3control --region us-east-1 --endpoint-url https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com list-jobs --account-id 12345678
```

### AWS SDK 示例
<a name="privatelink-aws-sdk-examples"></a>

要在使用 AWS SDK 时通过 S3 接口端点访问 S3 存储桶、S3 接入点、Amazon S3 控制 API 操作，请将 SDK 更新到最新版本。然后，将客户端配置为使用端点 URL 通过 S3 接口端点访问存储桶、接入点或 Amazon S3 控制 API 操作。

------
#### [ SDK for Python (Boto3) ]

**示例：使用端点 URL 访问 S3 存储桶**  
在以下示例中，将区域 `us-east-1` 和 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 替换为您自己的信息。

```
s3_client = session.client(
service_name='s3',
region_name='us-east-1',
endpoint_url='https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com'
)
```

**示例：使用端点 URL 访问 S3 接入点**  
在以下示例中，将区域 `us-east-1` 和 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 替换为您自己的信息。

```
ap_client = session.client(
service_name='s3',
region_name='us-east-1',
endpoint_url='https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com'
)
```

**示例：使用端点 URL 访问 Amazon S3 控制 API**  
在以下示例中，将区域 `us-east-1` 和 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 替换为您自己的信息。

```
control_client = session.client(
service_name='s3control',
region_name='us-east-1',
endpoint_url='https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com'
)
```

------
#### [ SDK for Java 1.x ]

**示例：使用端点 URL 访问 S3 存储桶**  
在以下示例中，将 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 替换为您自己的信息。

```
// bucket client
final AmazonS3 s3 = AmazonS3ClientBuilder.standard().withEndpointConfiguration(
        new AwsClientBuilder.EndpointConfiguration(
                "https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com",
                Regions.DEFAULT_REGION.getName()
        )
).build();
List<Bucket> buckets = s3.listBuckets();
```

**示例：使用端点 URL 访问 S3 接入点**  
在以下示例中，将 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 和 ARN `us-east-1:123456789012:accesspoint/prod` 替换为您自己的信息。

```
// accesspoint client
final AmazonS3 s3accesspoint = AmazonS3ClientBuilder.standard().withEndpointConfiguration(
        new AwsClientBuilder.EndpointConfiguration(
                "https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com",
                Regions.DEFAULT_REGION.getName()
        )
).build();
ObjectListing objects = s3accesspoint.listObjects("arn:aws:s3:us-east-1:123456789012:accesspoint/prod");
```

**示例：使用端点 URL 访问 Amazon S3 控制 API 操作**  
在以下示例中，将 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 替换为您自己的信息。

```
// control client
final AWSS3Control s3control = AWSS3ControlClient.builder().withEndpointConfiguration(
        new AwsClientBuilder.EndpointConfiguration(
                "https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com",
                Regions.DEFAULT_REGION.getName()
        )
).build();
final ListJobsResult jobs = s3control.listJobs(new ListJobsRequest());
```

------
#### [ SDK for Java 2.x ]

**示例：使用端点 URL 访问 S3 存储桶**  
在以下示例中，将 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 和区域 `Region.US_EAST_1` 替换为您自己的信息。

```
// bucket client
Region region = Region.US_EAST_1;
s3Client = S3Client.builder().region(region)
                   .endpointOverride(URI.create("https://bucket.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com"))
                   .build()
```

**示例：使用端点 URL 访问 S3 接入点**  
在以下示例中，将 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 和区域 `Region.US_EAST_1` 替换为您自己的信息。

```
// accesspoint client
Region region = Region.US_EAST_1;
s3Client = S3Client.builder().region(region)
                   .endpointOverride(URI.create("https://accesspoint.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com"))
                   .build()
```

**示例：使用端点 URL 访问 Amazon S3 控制 API**  
在以下示例中，将 VPC 端点 ID `vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com` 和区域 `Region.US_EAST_1` 替换为您自己的信息。

```
// control client
Region region = Region.US_EAST_1;
s3ControlClient = S3ControlClient.builder().region(region)
                                 .endpointOverride(URI.create("https://control.vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com"))
                                 .build()
```

------

## 更新本地 DNS 配置
<a name="updating-on-premises-dns-config"></a>

使用特定于端点的 DNS 名称访问适用于 Amazon S3 的接口端点时，您无需更新本地 DNS 解析程序。您可以使用来自公有 Amazon S3 DNS 域的接口端点的私有 IP 地址解析特定于端点的 DNS 名称。

### 使用接口端点访问 Amazon S3，无需 VPC 中的网关端点和互联网网关
<a name="using-interface-endpoints"></a>

VPC 中的接口端点可以通过 Amazon 网络将 VPC 内的应用程序和本地应用程序路由到 Amazon S3，如下图所示。

![\[数据流程图，显示了使用接口端点和 AWS PrivateLink 访问 Amazon S3。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/interface-endpoints.png)


该图阐释了以下内容：
+ 您的本地部署网络使用 Direct Connect 或者 Site-to-Site VPN 连接到 VPC A。
+ 本地和 VPC A 中的应用程序使用特定于端点的 DNS 名称通过 S3 接口端点访问 Amazon S3。
+ 本地部署应用程序通过 Direct Connect（或 Site-to-Site VPN）将数据发送到 VPC 中的接口端点。AWS PrivateLink 通过 AWS 网络将数据从接口端点移动到 Amazon S3。
+ VPC 中的应用程序还向接口端点发送通信。AWS PrivateLink 通过 AWS 网络将数据从接口端点移动到 Amazon S3。

### 在同一 VPC 中同时使用网关端点和接口端点来访问 Amazon S3
<a name="using-gateway-and-interface-endpoints"></a>

您可以创建接口端点并将现有网关端点保留在同一 VPC 中，如下图所示。通过这种方法，您可以允许 VPC 内应用程序继续通过网关端点访问 Amazon S3，而无需付费。然后，只有您的本地应用程序才会使用接口端点访问 Amazon S3。要通过这种方式访问 Amazon S3，您必须更新本地应用程序，以使用适用于 Amazon S3 的特定于端点的 DNS 名称。

![\[数据流程图，显示了使用网关端点和接口端点访问 Amazon S3。\]](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/images/interface-and-gateway-endpoints.png)


下图说明了以下内容：
+ 本地部署应用程序使用特定于端点的 DNS 名称通过 Direct Connect（或 Site-to-Site VPN）将数据发送到 VPC 中的接口端点。AWS PrivateLink 通过 AWS 网络将数据从接口端点移动到 Amazon S3。
+ 使用默认的区域 Amazon S3 名称，VPC 内应用程序会将数据发送到通过 AWS 网络连接到 Amazon S3 的网关端点。

有关网关端点的更多信息，请参阅 *VPC 用户指南*中的[网关 VPC 端点](https://docs.aws.amazon.com/vpc/latest/privatelink/vpce-gateway.html)。

## 为 Amazon S3 创建 VPC 端点策略
<a name="creating-vpc-endpoint-policy"></a>

您可以为 VPC 端点附加控制对 Amazon S3 的访问的端点策略。该策略指定以下信息：
+ 可执行操作的 AWS Identity and Access Management (IAM) 主体 
+ 可执行的操作 
+ 可对其执行操作的资源 

您还可以使用 Amazon S3 存储桶策略，通过使用存储桶策略中的 `aws:sourceVpce` 条件限制从特定 VPC 端点访问特定存储桶。以下示例显示了限制对存储桶或端点的访问的策略。

**Topics**
+ [示例：限制从 VPC 端点对特定存储桶的访问](#privatelink-example-restrict-access-to-bucket)
+ [示例：限制从 VPC 端点对特定账户中存储桶的访问](#privatelink-example-access-bucket-in-specific-account-only)
+ [示例：限制对 S3 存储桶策略中特定 VPC 端点的访问](#privatelink-example-restrict-access-to-vpc-endpoint)

### 示例：限制从 VPC 端点对特定存储桶的访问
<a name="privatelink-example-restrict-access-to-bucket"></a>

您可以创建一个端点策略来仅允许访问特定的 Amazon S3 存储桶。如果您的 VPC 中有使用存储桶的其他 AWS 服务，这种策略会非常有用。以下存储桶策略限制为仅可访问 `amzn-s3-demo-bucket1`。要使用此端点策略，请将 `amzn-s3-demo-bucket1` 替换为您的存储桶名称。

------
#### [ JSON ]

****  

```
{
  "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:::amzn-s3-demo-bucket1",
                   "arn:aws:s3:::amzn-s3-demo-bucket1/*"]
    }
  ]
}
```

------

### 示例：限制从 VPC 端点对特定账户中存储桶的访问
<a name="privatelink-example-access-bucket-in-specific-account-only"></a>

您可以创建一个端点策略，以限制仅访问特定 AWS 账户中的 S3 存储桶。要防止 VPC 内的客户端访问并非您拥有的存储桶，请在端点策略中使用以下语句。以下示例语句创建了一个策略，此策略将访问限制为由单个 AWS 账户 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"
        }
      }
    }
  ]
}
```

**注意**  
要指定要访问的资源的 AWS 账户 ID，可以在 IAM 策略中使用 `aws:ResourceAccount` 或 `s3:ResourceAccount` 键。但请注意，有些 AWS 服务依赖于访问 AWS 托管式存储桶。因此，在 IAM 策略中使用 `aws:ResourceAccount` 或 `s3:ResourceAccount` 键也可能会影响对这些资源的访问。

### 示例：限制对 S3 存储桶策略中特定 VPC 端点的访问
<a name="privatelink-example-restrict-access-to-vpc-endpoint"></a>

以下 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。*支持 知识中心*内的如何修复策略才能访问存储桶？](https://aws.amazon.com/premiumsupport/knowledge-center/s3-regain-access/)。
在使用以下示例策略之前，将 VPC 端点 ID 替换为适合您的使用案例的值。否则，您将无法访问您的存储桶。
此策略禁用*控制台*访问指定的存储桶，因为控制台请求不是来自指定的 VPC 端点。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "Policy1415115909152",
  "Statement": [
    { "Sid": "Access-to-specific-VPCE-only",
      "Principal": "*",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket2",
                   "arn:aws:s3:::amzn-s3-demo-bucket2/*"],
      "Condition": {"StringNotEquals": {"aws:sourceVpce": "vpce-1a2b3c4d"}}
    }
  ]
}
```

------

有关更多策略示例，请参阅 *VPC 用户指南*中的 [Amazon S3 端点](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#vpc-endpoints-policies-s3)。

有关 VPC 连接的更多信息，请参阅 AWS 白皮书 [Amazon Virtual Private Cloud 连接性选项](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/welcome.html)中的 [Network-to-VPC connectivity options](https://docs.aws.amazon.com/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)（从网络到 VPC 的连接性选项）。