

# 通过 IPv6 向 Amazon S3 发出请求
<a name="ipv6-access"></a>

除了 IPv4 协议之外，Amazon Simple Storage Service (Amazon S3) 还支持使用 Internet 协议版本 6 (IPv6) 访问 S3 存储桶的功能。Amazon S3 双堆栈终端节点支持通过 IPv6 和 IPv4 向 S3 存储桶发出请求。通过 IPv6 访问 Amazon S3 不额外收费。有关定价的更多信息，请参阅 [Amazon S3 定价](https://www.amazonaws.cn/s3/pricing/)。

**注意**  
以下信息适用于公有 Amazon S3 IPv6 端点。有关 Amazon 虚拟私有云（VPC）端点的信息，请参阅[适用于 Amazon S3 的 Amazon PrivateLink](https://docs.amazonaws.cn/AmazonS3/latest/userguide/privatelink-interface-endpoints.html)。

**Topics**
+ [通过 IPv6 发出请求入门](#ipv6-access-getting-started)
+ [在 IAM 策略中使用 IPv6 地址](#ipv6-access-iam)
+ [测试 IP 地址兼容性](#ipv6-access-test-compatabilty)
+ [使用 Amazon S3 双堆栈端点](dual-stack-endpoints.md)

## 通过 IPv6 发出请求入门
<a name="ipv6-access-getting-started"></a>

要通过 IPv6 向 S3 存储桶发出请求，您需要使用双堆栈终端节点。下一节介绍如何使用双堆栈终端节点通过 IPv6 发出请求。

下面是在尝试通过 IPv6 访问存储桶之前应了解的部分事项：
+ 访问存储桶的客户端和网络必须支持使用 IPv6。
+ 虚拟托管类型和路径类型请求必须都受支持，以便进行 IPv6 访问。有关更多信息，请参阅 [Amazon S3 双堆栈端点](dual-stack-endpoints.md#dual-stack-endpoints-description)。
+ 如果您 Amazon Identity and Access Management (IAM) 用户或存储桶策略中使用源 IP 地址筛选，则需要更新策略以包括 IPv6 地址范围。有关更多信息，请参阅 [在 IAM 策略中使用 IPv6 地址](#ipv6-access-iam)。
+ 如果使用 IPv6，服务器访问日志文件以 IPv6 格式输出 IP 地址。您需要对用于分析 Amazon S3 日志文件的现有工具、脚本和软件进行更新，以便它们能够分析 IPv6 格式的 `Remote IP` 地址。有关更多信息，请参阅[使用服务器访问日志记录来记录请求](https://docs.amazonaws.cn//AmazonS3/latest/userguide/ServerLogs.html)。
**注意**  
如果在日志文件中遇到与 IPv6 地址相关的问题，请联系 [Amazon Web Services Support](https://www.amazonaws.cn/premiumsupport/)。



### 使用双堆栈终端节点通过 IPv6 发出请求
<a name="ipv6-access-api"></a>

您可以使用双堆栈终端节点和 Amazon S3 API 调用通过 IPv6 发出请求。无论您是通过 IPv6 还是通过 IPv4 访问 Amazon S3，Amazon S3 API 操作的工作方式都相同。性能也应该是相同的。

如果使用 REST API，您是直接访问双堆栈终端节点。有关更多信息，请参阅 [双堆栈端点](dual-stack-endpoints.md#dual-stack-endpoints-description)。

如果使用 Amazon Command Line Interface (Amazon CLI) 和 Amazon 开发工具包，可使用参数或标志以更改为双堆栈终端节点。您还可以在配置文件中直接将双堆栈终端节点指定为覆盖 Amazon S3 终端节点。

您可以通过以下任一方式，使用双堆栈终端节点通过 IPv6 访问存储桶：
+ Amazon CLI，请参阅[从 Amazon CLI 使用双堆栈端点](dual-stack-endpoints.md#dual-stack-endpoints-cli)。
+ 有关 Amazon 开发工具包，请参阅 [从 Amazon SDK 使用双堆栈端点](dual-stack-endpoints.md#dual-stack-endpoints-sdks)。
+ REST API，请参阅[通过使用 REST API 向双堆栈终端节点发出请求](RESTAPI.md#rest-api-dual-stack)。

### 不可通过 IPv6 使用的功能
<a name="ipv6-not-supported"></a>

当通过来自 S3 存储桶的 IPv6: Static 网站托管访问 S3 存储桶时，以下功能目前不受支持。

## 在 IAM 策略中使用 IPv6 地址
<a name="ipv6-access-iam"></a>

在尝试使用 IPv6 访问存储桶之前，您必须确保用于 IP 地址筛选的所有 IAM 用户或 S3 存储桶策略已更新为包括 IPv6 地址范围。在开始使用 IPv6 时，未更新为处理 IPv6 地址的 IP 地址筛选策略可能导致客户端错误地丢失或获得存储桶访问权。有关使用 IAM 管理访问权限的更多信息，请参阅 [Amazon S3 的身份和访问管理](https://docs.amazonaws.cn//AmazonS3/latest/userguide/security-iam.html)。

筛选 IP 地址的 IAM 策略使用 [IP 地址条件运算符](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements.html#Conditions_IPAddress)。下面的存储桶策略通过使用 IP 地址条件运算符确定允许的 IPv4 地址范围为 54.240.143.\*。此范围之外的所有 IP 地址对存储桶 (`examplebucket`) 的访问都会被拒绝。由于所有 IPv6 地址都在允许范围之外，此策略会阻止 IPv6 地址访问 `examplebucket`。

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "IPAllow",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::{{examplebucket}}/*",
      "Condition": {
         "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}
      } 
    } 
  ]
}
```

------

您可以将存储桶策略的 `Condition` 元素修改为同时允许 IPv4 (`54.240.143.0/24`) 和 IPv6 (`2001:DB8:1234:5678::/64`) 地址范围，如以下示例所示。您可以使用示例中所示的相同类型的 `Condition` 块来更新 IAM 用户和存储桶策略。

```
1.        "Condition": {
2.          "IpAddress": {
3.             "aws:SourceIp": [
4.               "54.240.143.0/24",
5.                "2001:DB8:1234:5678::/64"
6.              ]
7.           }
8.         }
```

在使用 IPv6 之前，必须对使用 IP 地址筛选的所有相关 IAM 用户和存储桶策略进行更新。我们建议不要在存储桶策略中使用 IP 地址筛选。

您可以在 [https://console.aws.amazon.com/iam/](https://console.amazonaws.cn/iam/) 上使用 IAM 控制台查看 IAM 用户策略。有关 IAM 的更多信息，请参阅 [IAM 用户指南](https://docs.amazonaws.cn/IAM/latest/UserGuide/)。有关编辑 S3 存储桶策略的信息，请参阅[添加存储桶策略](https://docs.amazonaws.cn//AmazonS3/latest/userguide/add-bucket-policy.html)。

## 测试 IP 地址兼容性
<a name="ipv6-access-test-compatabilty"></a>

如果使用 Linux/Unix 或 Mac OS X，则通过使用下例所示的 `curl` 命令，可以测试您能否通过 IPv6 访问双堆栈终端节点：

**Example**  

```
curl -v  http://s3.dualstack.us-west-2.amazonaws.com/
```
您获得的信息如下例所示。如果通过 IPv6 连接，则连接的 IP 地址将会是 IPv6 地址。  

```
* About to connect() to s3-us-west-2.amazonaws.com port 80 (#0)
*   Trying {{IPv6 address}}... connected
* Connected to s3.dualstack.us-west-2.amazonaws.com ({{IPv6 address}}) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.18.1 (x86_64-unknown-linux-gnu) libcurl/7.18.1 OpenSSL/1.0.1t zlib/1.2.3
> Host: s3.dualstack.us-west-2.amazonaws.com
```

如果使用 Microsoft 7 或 10，则通过使用下例所示的 `ping` 命令，可以测试您能否通过 IPv6 或 IPv4 访问双堆栈端点。

```
ping ipv6.s3.dualstack.us-west-2.amazonaws.com 
```