

# 通过 IPv6 向 S3 on Outposts 发出请求
<a name="S3OutpostsIPv6-access"></a>

Amazon S3 on Outposts 和 S3 on Outposts 双堆栈端点支持使用 IPv6 或 IPv4 协议向 S3 on Outposts 桶发出的请求。借助 S3 on Outposts 对 IPv6 的支持，可以通过 IPv6 网络使用 S3 on Outposts API 访问和操作桶以及控制面板资源。

**注意**  
不支持 IPv6 网络上的 [S3 on Outposts 对象操作](https://docs.amazonaws.cn/AmazonS3/latest/userguide/S3OutpostsAPI.html)（例如 `PutObject` 或 `GetObject`）。

通过 IPv6 网络访问 S3 on Outposts 不额外收费。有关 S3 on Outposts 的更多信息，请参阅 [S3 on Outposts 定价](https://www.amazonaws.cn/outposts/rack/pricing/)。

**Topics**
+ [IPv6 入门](#S3Outposts-ipv6-access-getting-started)
+ [使用双堆栈端点通过 IPv6 网络发出请求](#S3Outposts-ipv6-access-api)
+ [在 IAM 策略中使用 IPv6 地址](#S3Outposts-ipv6-access-iam)
+ [测试 IP 地址兼容性](#S3Outposts-ipv6-access-test-compatabilty)
+ [将 IPv6 与 Amazon PrivateLink 结合使用](#S3Outposts-ipv6-privatelink)
+ [使用 S3 on Outposts 双堆栈端点](s3-outposts-dual-stack-endpoints.md)

## IPv6 入门
<a name="S3Outposts-ipv6-access-getting-started"></a>

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

下面是在尝试通过 IPv6 访问 S3 on Outposts 桶之前的重要注意事项：
+ 访问存储桶的客户端和网络必须支持使用 IPv6。
+ 虚拟托管类型和路径类型请求必须都受支持，以便进行 IPv6 访问。有关更多信息，请参阅 [使用 S3 on Outposts 双堆栈端点](s3-outposts-dual-stack-endpoints.md)。
+ 如果您在 Amazon Identity and Access Management（IAM）用户策略或 S3 on Outposts 桶策略中使用源 IP 地址筛选，则必须更新策略以包括 IPv6 地址范围。
**注意**  
此要求仅适用于跨 IPv6 网络的 S3 on Outposts 桶操作和控制面板资源。不支持跨 IPv6 网络的 [Amazon S3 on Outposts 对象操作](https://docs.amazonaws.cn/AmazonS3/latest/userguide/S3OutpostsAPI.html)。
+ 如果使用 IPv6，服务器访问日志文件以 IPv6 格式输出 IP 地址。您必须对用于分析 S3 on Outposts 日志文件的现有工具、脚本和软件进行更新，以便它们能够分析 IPv6 格式的远程 IP 地址。然后，更新的工具、脚本和软件将正确解析 IPv6 格式的远程 IP 地址。

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

要通过 IPv6 使用 S3 on Outposts API 调用发出请求，可以通过 Amazon CLI 或 Amazon SDK 使用双堆栈端点。无论您是通过 IPv6 协议还是 IPv4 协议访问 S3 on Outposts，[Amazon S3 控制 API 操作](https://docs.amazonaws.cn/AmazonS3/latest/userguide/S3OutpostsAPI.html#S3OutpostsAPIsBucket)和 [S3 on Outposts API 操作](https://docs.amazonaws.cn/AmazonS3/latest/userguide/S3OutpostsAPI.html#S3OutpostsAPIs)的工作方式都是相同的。但请注意，IPv6 网络不支持 [S3 on Outposts 对象操作](https://docs.amazonaws.cn/AmazonS3/latest/userguide/S3OutpostsAPI.html)（例如 `PutObject` 或 `GetObject`）。

如果使用 Amazon Command Line Interface（Amazon CLI）和 Amazon SDK，可使用参数或标志以更改为双堆栈端点。您还可以在配置文件中直接将双堆栈端点指定为覆盖 S3 on Outposts 端点。

您可以通过以下任一方式，使用双堆栈端点通过 IPv6 访问 S3 on Outposts 桶：
+ Amazon CLI，请参阅[从 Amazon CLI 使用双堆栈端点](s3-outposts-dual-stack-endpoints.md#s3-outposts-dual-stack-endpoints-cli)。
+ 有关 Amazon 开发工具包，请参阅 [从 Amazon SDK 使用 S3 on Outposts 双堆栈端点](s3-outposts-dual-stack-endpoints.md#s3-outposts-dual-stack-endpoints-sdks)。

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

在尝试使用 IPv6 协议访问 S3 on Outposts 桶之前，请确保用于 IP 地址筛选的 IAM 用户策略或 S3 on Outposts 桶策略已更新为包括 IPv6 地址范围。如果未更新 IP 地址筛选策略以便处理 IPv6 地址，则在尝试使用 IPv6 协议时，您可能会无法访问 S3 on Outposts 桶。

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

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "IPAllow",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3-outposts:*",
            "Resource": "arn:aws:s3-outposts:{{us-east-1}}:{{111122223333}}:outpost/{{OUTPOSTS-ID}}/bucket/{{DOC-EXAMPLE-BUCKET}}/*",
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "54.240.143.0/24"
                }
            }
        }
    ]
}
```

------

您可以将 S3 on Outposts 桶策略的 `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 地址筛选来允许 IPv6 地址范围的所有相关 IAM 用户和存储桶策略进行更新。建议您使用组织的 IPv6 地址范围以及现有的 IPv4 地址范围来更新您的 IAM 策略。有关同时允许通过 IPv6 和 IPv4 进行访问的存储桶策略示例，请参阅[限制特定 IP 地址的访问权限](S3Outposts-example-bucket-policies.md#S3Outposts-example-bucket-policies-IP-1)。

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

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

如果您使用的是 Linux 或 Unix 实例或 macOS X 平台，则可以测试您通过 IPv6 对双堆栈端点的访问。例如，要测试通过 IPv6 与 Amazon S3 on Outposts 端点的连接，请使用 `dig` 命令：

```
dig s3-outposts.us-west-2.api.aws AAAA +short
```

如果正确设置了通过 IPv6 网络的双堆栈端点，则 `dig` 命令将返回连接的 IPv6 地址。例如：

```
dig s3-outposts.us-west-2.api.aws AAAA +short

2600:1f14:2588:4800:b3a9:1460:159f:ebce

2600:1f14:2588:4802:6df6:c1fd:ef8a:fc76

2600:1f14:2588:4801:d802:8ccf:4e04:817
```

## 将 IPv6 与 Amazon PrivateLink 结合使用
<a name="S3Outposts-ipv6-privatelink"></a>

S3 on Outposts 支持对 Amazon PrivateLink 服务和端点使用 IPv6 协议。由于 Amazon PrivateLink 支持 IPv6 协议，您可以通过 IPv6 网络，从本地或通过其它私有连接来连接到 VPC 内的服务端点。[Amazon PrivateLink for S3 on Outposts](https://docs.amazonaws.cn/AmazonS3/latest/userguide/s3-outposts-privatelink-interface-endpoints.html) 对 IPv6 的支持还允许您将 Amazon PrivateLink 与双堆栈端点集成。有关如何为 Amazon PrivateLink 启用 IPv6 的步骤，请参阅 [Expedite your IPv6 adoption with Amazon PrivateLink services and endpoints](https://www.amazonaws.cn/blogs/networking-and-content-delivery/expedite-your-ipv6-adoption-with-privatelink-services-and-endpoints/)。

**注意**  
要将支持的 IP 地址类型从 IPv4 更新为 IPv6，请参阅《Amazon PrivateLink User Guide》**中的 [Modify the supported IP address type](https://docs.amazonaws.cn/vpc/latest/privatelink/configure-endpoint-service.html#supported-ip-address-types)。

### 将 IPv6 与 Amazon PrivateLink 结合使用
<a name="3Outposts-ipv6-privatelink-dualstack-vpc"></a>

如果您将 Amazon PrivateLink 与 IPv6 结合使用，则必须创建 IPv6 或双堆栈 VPC 接口端点。有关如何使用 Amazon Web Services 管理控制台创建 VPC 端点的一般步骤，请参阅《Amazon PrivateLink User Guide》**中的 [Access an Amazon service using an interface VPC endpoint](https://docs.amazonaws.cn/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint)。

------
#### [ Amazon Web Services 管理控制台 ]

使用以下过程创建连接到 S3 on Outposts 的接口 VPC 端点。

1. 登录到 Amazon Web Services 管理控制台并打开 VPC 控制台，网址为：[https://console.aws.amazon.com/vpc/](https://console.amazonaws.cn/vpc/)。

1. 在导航窗格中，选择**端点**。

1. 选择 **创建端点**。

1. 对于**服务类别**，选择 **Amazon 服务**。

1. 对于**服务名称**，选择 S3 on Outposts 服务（**com.amazonaws.us-east-1.s3-outposts**）。

1. 对于 VPC，选择您要从中访问 S3 on Outposts 的 VPC。

1. 对于**子网**，对于每个可用区选择一个您将从中访问 S3 on Outposts 的子网。您无法从同一可用区中选择多个子网。对于您选择的每个子网，将创建一个新的端点网络接口。默认情况下，将子网 IP 地址范围中的 IP 地址分配给端点网络接口。要为端点网络接口指定 IP 地址，请选择**指定 IP 地址**，然后输入子网地址范围中的 IPv6 地址。

1. 对于 **IP 地址类型**，选择**双堆栈**。同时将 IPv4 和 IPv6 地址分配给端点网络接口。仅当所有选定子网都具有 IPv4 和 IPv6 地址范围时，才支持此选项。

1. 对于**安全组**，选择要与 VPC 端点的端点网络接口关联的安全组。默认情况下，默认安全组与 VPC 相关联。

1. 对于**策略**，请选择**完整访问权限**以允许所有主体通过 VPC 端点对所有资源执行所有操作。否则，选择**自定义**来附加 VPC 端点策略，该策略控制主体通过 VPC 端点对资源执行操作的权限。该选项仅在服务支持 VPC 端点策略时可用。有关更多信息，请参阅 [Endpoint policies](https://docs.amazonaws.cn/vpc/latest/privatelink/vpc-endpoints-access.html)。

1. （可选）若要添加标签，请选择**添加新标签**，然后输入该标签的键和值。

1. 选择**创建端点**。

**Example – S3 on Outposts 桶策略**  
要允许 S3 on Outposts 与 VPC 端点进行交互，您可以更新您的 S3 on Outposts 策略，如下所示：  

```
{
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3-outposts:*",
            "Resource": "*",
            "Principal": "*"
        }
    ]
}
```

------
#### [ Amazon CLI ]

**注意**  
要在您的 VPC 端点上启用 IPv6 网络，必须为 S3 on Outposts 的 `SupportedIpAddressType` 筛选条件设置 `IPv6`。

以下示例使用 `create-vpc-endpoint` 命令创建新的双堆栈接口端点。

```
aws ec2 create-vpc-endpoint \
--vpc-id {{vpc-12345678}} \
--vpc-endpoint-type {{Interface}} \
--service-name {{com.amazonaws.us-east-1.s3-outposts}} \
--subnet-id {{subnet-12345678}} \
--security-group-id {{sg-12345678}} \
--ip-address-type {{dualstack}} \
--dns-options "{{DnsRecordIpType=dualstack}}"
```

根据 Amazon PrivateLink 服务配置，新创建的端点连接可能需要先由 VPC 端点服务提供商接受，然后才能使用。有关更多信息，请参阅《Amazon PrivateLink User Guide》**中的 [Accept and reject endpoint connection requests](https://docs.amazonaws.cn/vpc/latest/privatelink/configure-endpoint-service.html#accept-reject-connection-requests)。

以下示例使用 `modify-vpc-endpoint` 命令将仅限 IPv4 的 VPC 端点更新为双堆栈端点。双堆栈端点同时允许访问 IPv4 和 IPv6 网络。

```
aws ec2 modify-vpc-endpoint \
--vpc-endpoint-id {{vpce-12345678}} \
--add-subnet-ids {{subnet-12345678}} \
--remove-subnet-ids {{subnet-12345678}} \
--ip-address-type {{dualstack}} \
--dns-options "{{DnsRecordIpType=dualstack}}"
```

有关如何为 Amazon PrivateLink 启用 IPv6 网络的更多信息，请参阅 [Expedite your IPv6 adoption with Amazon PrivateLink services and endpoints](https://www.amazonaws.cn/blogs/networking-and-content-delivery/expedite-your-ipv6-adoption-with-privatelink-services-and-endpoints/)。

------