

# 使用 Amazon S3 on Outposts 进行开发
<a name="S3OutpostsDeveloping"></a>

通过使用 Amazon S3 on Outposts，您可以在 AWS Outposts 上创建 S3 桶，并在本地为需要本地数据访问、本地数据处理和数据驻留的应用程序轻松存储和检索对象。S3 on Outposts 提供了一个新的存储类 S3 Outposts (`OUTPOSTS`)；该存储类使用 Amazon S3 API，并且用于在 AWS Outposts 上的多个设备和服务器之间持久冗余地存储数据。您通过 Virtual Private Cloud（VPC）使用接入点和端点连接与 Outposts 桶进行通信。您可以像在 Amazon S3 桶中一样在 Outpost 桶上使用相同的 API 和功能，包括访问策略、加密和标记。您可以通过 AWS 管理控制台、AWS Command Line Interface (AWS CLI)、AWS SDK 或 REST API 使用 S3 on Outposts。有关更多信息，请参阅[什么是 Amazon S3 on Outposts？](S3onOutposts.md)

以下主题提供有关使用 S3 on Outposts 进行开发的信息。

**Topics**
+ [支持 S3 on Outposts 的区域](S3OutpostsRegions.md)
+ [Amazon S3 on Outposts API 操作](S3OutpostsAPI.md)
+ [使用适用于 Java 的 SDK 为 S3 on Outposts 配置 S3 控制客户端](S3OutpostsCongfigureS3ControlClientJava.md)
+ [通过 IPv6 向 S3 on Outposts 发出请求](S3OutpostsIPv6-access.md)

# 支持 S3 on Outposts 的区域
<a name="S3OutpostsRegions"></a>

以下 AWS 区域支持 S3 on Outposts。
+ 美国东部（弗吉尼亚州北部）(us-east-1)
+ 美国东部（俄亥俄州）(us-east-2)
+ 美国西部（加利福尼亚北部）(us-west-1)
+ 美国西部（俄勒冈州）(us-west-2)
+ 非洲（开普敦）(af-south-1)
+ 亚太地区（雅加达）（ap-sourtheast-3）
+ 亚太地区（孟买）(ap-south-1)
+ 亚太地区（大阪）(ap-northeast-3)
+ 亚太地区（首尔）(ap-northeast-2)
+ 亚太地区（新加坡）(ap-southeast-1)
+ 亚太地区（悉尼）(ap-southeast-2)
+ 亚太地区（东京）(ap-northeast-1)
+ 加拿大（中部）(ca-central-1)
+ 欧洲地区（法兰克福）(eu-central-1)
+ 欧洲地区（爱尔兰）(eu-west-1)
+ 欧洲（伦敦）(eu-west-2)
+ 欧洲（米兰）(eu-south-1)
+ 欧洲（巴黎）（eu-west-3）
+ 欧洲地区（斯德哥尔摩）(eu-north-1)
+ 以色列（特拉维夫）（il-central-1）
+ 中东（巴林）(me-south-1)
+ 南美洲（圣保罗）（sa-east-1）
+ AWS GovCloud（美国东部）(us-gov-east-1)
+ AWS GovCloud（美国西部）(us-gov-west-1)

# Amazon S3 on Outposts API 操作
<a name="S3OutpostsAPI"></a>

本主题列出了您可以与 Amazon S3 on Outposts 一起使用的 Amazon S3、Amazon S3 Control 和 Amazon S3 on Outposts API 操作。

**Topics**
+ [用于管理对象的 Amazon S3 API 操作](#S3OutpostsAPIsObject)
+ [用于管理存储桶的 Amazon S3 控制 API](#S3OutpostsAPIsBucket)
+ [用于管理端点的 S3 on Outposts API 操作](#S3OutpostsAPIs)

## 用于管理对象的 Amazon S3 API 操作
<a name="S3OutpostsAPIsObject"></a>

S3 on Outposts 旨在使用与 Amazon S3 相同的对象 API 操作。您必须使用访问点才能访问 Outpost 存储桶中的任何对象。将对象 API 操作与 S3 on Outposts 结合使用时，您需要提供 Outposts 访问点 Amazon 资源名称（ARN）或访问点别名。有关访问点别名的更多信息，请参阅[为您的 S3 on Outposts 桶访问点使用桶式别名](s3-outposts-access-points-alias.md)。

Amazon S3 on Outposts 支持以下Amazon S3 API 操作：
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html)
+ [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_CreateMultipartUpload.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjectTagging.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObjectTagging.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectVersions.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListParts.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectTagging.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPart.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_UploadPartCopy.html)

## 用于管理存储桶的 Amazon S3 控制 API
<a name="S3OutpostsAPIsBucket"></a>

S3 on Outposts 支持以下用于处理存储桶的 Amazon S3 控制 API 操作。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateAccessPoint.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_CreateBucket.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPoint.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteAccessPointPolicy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucket.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucket.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketLifecycleConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketLifecycleConfiguration.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketPolicy.html)
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketReplication.html) 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_DeleteBucketTagging.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPoint.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetAccessPointPolicy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucket.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucket.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketLifecycleConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketLifecycleConfiguration.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketPolicy.html)
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketReplication.html) 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketTagging.html)
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketVersioning.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_GetBucketVersioning.html) 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListAccessPoints.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListRegionalBuckets.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_ListRegionalBuckets.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutAccessPointPolicy.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketLifecycleConfiguration.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketLifecycleConfiguration.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketPolicy.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketPolicy.html)
+  [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketReplication.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketReplication.html) 
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketTagging.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketTagging.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketVersioning.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_control_PutBucketVersioning.html)

## 用于管理端点的 S3 on Outposts API 操作
<a name="S3OutpostsAPIs"></a>

S3 on Outposts 支持以下用于管理终端节点的 Amazon S3 on Outposts API 操作。
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3outposts_CreateEndpoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3outposts_CreateEndpoint.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3outposts_DeleteEndpoint.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3outposts_DeleteEndpoint.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3outposts_ListEndpoints.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3outposts_ListEndpoints.html)
+ [ListOutpostsWithS3](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3outposts_ListOutpostsWithS3.html)
+ [https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3outposts_ListSharedEndpoints.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3outposts_ListSharedEndpoints.html)

# 使用适用于 Java 的 SDK 为 S3 on Outposts 配置 S3 控制客户端
<a name="S3OutpostsCongfigureS3ControlClientJava"></a>

以下示例使用 适用于 Java 的 AWS SDK 为 Amazon S3 on Outposts 配置 Amazon S3 控制客户端。要使用此示例，请将每个 `user input placeholder` 替换为您自己的信息。

```
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3control.AWSS3Control;
import com.amazonaws.services.s3control.AWSS3ControlClient;

public AWSS3Control createS3ControlClient() {

    String accessKey = AWSAccessKey;
    String secretKey = SecretAccessKey;
    BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);

    return AWSS3ControlClient.builder().enableUseArnRegion()
            .withCredentials(new AWSStaticCredentialsProvider(awsCreds))
            .build();

}
```

# 通过 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.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsAPI.html)（例如 `PutObject` 或 `GetObject`）。

通过 IPv6 网络访问 S3 on Outposts 不额外收费。有关 S3 on Outposts 的更多信息，请参阅 [S3 on Outposts 定价](https://aws.amazon.com/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 与 AWS 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)。
+ 如果您在 AWS Identity and Access Management（IAM）用户策略或 S3 on Outposts 桶策略中使用源 IP 地址筛选，则必须更新策略以包括 IPv6 地址范围。
**注意**  
此要求仅适用于跨 IPv6 网络的 S3 on Outposts 桶操作和控制面板资源。不支持跨 IPv6 网络的 [Amazon S3 on Outposts 对象操作](https://docs.aws.amazon.com/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 调用发出请求，可以通过 AWS CLI 或 AWS SDK 使用双堆栈端点。无论您是通过 IPv6 协议还是 IPv4 协议访问 S3 on Outposts，[Amazon S3 控制 API 操作](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsAPI.html#S3OutpostsAPIsBucket)和 [S3 on Outposts API 操作](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsAPI.html#S3OutpostsAPIs)的工作方式都是相同的。但请注意，IPv6 网络不支持 [S3 on Outposts 对象操作](https://docs.aws.amazon.com/AmazonS3/latest/userguide/S3OutpostsAPI.html)（例如 `PutObject` 或 `GetObject`）。

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

您可以通过以下任一方式，使用双堆栈端点通过 IPv6 访问 S3 on Outposts 桶：
+ AWS CLI，请参阅[从 AWS CLI 使用双堆栈端点](s3-outposts-dual-stack-endpoints.md#s3-outposts-dual-stack-endpoints-cli)。
+ 有关 AWS 开发工具包，请参阅 [从 AWS 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.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Conditions_IPAddress)。下面的 S3 on Outposts 桶策略通过使用 IP 地址条件运算符，确定允许的 IPv4 地址的 IP 范围为 54.240.143.\$1。此范围之外的所有 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.aws.amazon.com/iam/) 上使用 IAM 控制台查看 IAM 用户策略。有关 IAM 的更多信息，请参阅 [IAM 用户指南](https://docs.aws.amazon.com/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 与 AWS PrivateLink 结合使用
<a name="S3Outposts-ipv6-privatelink"></a>

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

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

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

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

------
#### [ AWS 管理控制台 ]

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

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

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

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

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

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.aws.amazon.com/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": "*"
        }
    ]
}
```

------
#### [ AWS 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"
```

根据 AWS PrivateLink 服务配置，新创建的端点连接可能需要先由 VPC 端点服务提供商接受，然后才能使用。有关更多信息，请参阅《AWS PrivateLink User Guide》**中的 [Accept and reject endpoint connection requests](https://docs.aws.amazon.com/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"
```

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

------

# 使用 S3 on Outposts 双堆栈端点
<a name="s3-outposts-dual-stack-endpoints"></a>

S3 on Outposts 双堆栈端点支持通过 IPv6 和 IPv4 向 S3 on Outposts 桶发出的请求。本节介绍如何使用 S3 on Outposts 双堆栈端点。

**Topics**
+ [S3 on Outposts 双堆栈端点](#s3-outposts-dual-stack-endpoints-description)
+ [从 AWS CLI 使用双堆栈端点](#s3-outposts-dual-stack-endpoints-cli)
+ [从 AWS SDK 使用 S3 on Outposts 双堆栈端点](#s3-outposts-dual-stack-endpoints-sdks)

## S3 on Outposts 双堆栈端点
<a name="s3-outposts-dual-stack-endpoints-description"></a>

当您向双堆栈端点发出请求时，S3 on Outposts 桶 URL 解析为 IPv6 或 IPv4 地址。有关如何通过 IPv6 访问 S3 on Outposts 桶的更多信息，请参阅[通过 IPv6 向 S3 on Outposts 发出请求](S3OutpostsIPv6-access.md)。

要通过双堆栈端点访问 S3 on Outposts 桶，请使用路径样式端点名称。S3 on Outposts 只支持区域双堆栈端点名称，这意味着，您必须在名称中指定区域。

对于双堆栈路径样式的 FIP 端点，请使用以下命名约定：

```
s3-outposts-fips.region.api.aws
```

对于双堆栈非 FIPS 端点，请使用以下命名约定：

```
s3-outposts.region.api.aws
```

**注意**  
S3 on Outposts 不支持虚拟托管样式的端点名称。

## 从 AWS CLI 使用双堆栈端点
<a name="s3-outposts-dual-stack-endpoints-cli"></a>

本节提供用于向双堆栈端点发出请求的 AWS CLI 命令示例。有关设置 AWS CLI 的说明，请参阅[通过 AWS CLI 和适用于 Java 的 SDK 开始使用](S3OutpostsGSCLIJava.md)。

在 AWS Config 文件内的配置文件中将配置值 `use_dualstack_endpoint` 设置为 `true`，从而将 `s3` 和 `s3api` AWS CLI 命令发出的所有 Amazon S3 请求都定向到指定区域的双堆栈端点。您可以在配置文件或命令中使用 `--region` 选项指定区域。

通过 AWS CLI 使用双堆栈端点时，仅支持 `path` 寻址样式。在配置文件中设置的寻址样式确定桶名称是在主机名中还是在 URL 中。有关更多信息，请参阅《AWS CLI 用户指南》**中的 [https://docs.aws.amazon.com/cli/latest/reference/s3outposts/](https://docs.aws.amazon.com/cli/latest/reference/s3outposts/)。

要通过 AWS CLI 使用双栈端点，请将 `--endpoint-url` 参数与 `http://s3.dualstack.region.amazonaws.com` 或 `https://s3-outposts-fips.region.api.aws` 端点一起用于任何 `s3control` 或 `s3outposts` 命令。

例如：

```
$  aws s3control list-regional-buckets --endpoint-url https://s3-outposts.region.api.aws
```

## 从 AWS SDK 使用 S3 on Outposts 双堆栈端点
<a name="s3-outposts-dual-stack-endpoints-sdks"></a>

本节提供一些示例，介绍如何使用 AWS SDK 来访问双堆栈端点。

### AWS SDK for Java 2.x双堆栈端点示例
<a name="s3-outposts-dual-stack-endpoints-examples-javav2"></a>

以下示例显示了当使用 AWS SDK for Java 2.x 创建 S3 on Outposts 客户端时，如何使用 `S3ControlClient` 和 `S3OutpostsClient` 类来启用双堆栈端点。有关为 Amazon S3 on Outposts 创建和测试有效 Java 示例的说明，请参阅[通过 AWS CLI 和适用于 Java 的 SDK 开始使用](S3OutpostsGSCLIJava.md)。

**Example – 创建启用双堆栈端点的 `S3ControlClient` 类**  

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3control.S3ControlClient;
import software.amazon.awssdk.services.s3control.model.ListRegionalBucketsRequest;
import software.amazon.awssdk.services.s3control.model.ListRegionalBucketsResponse;
import software.amazon.awssdk.services.s3control.model.S3ControlException;


public class DualStackEndpointsExample1 {

    public static void main(String[] args) {
        Region clientRegion = Region.of("us-east-1");
        String accountId = "111122223333";
        String navyId = "9876543210";

        try {
            // Create an S3ControlClient with dual-stack endpoints enabled.
            S3ControlClient s3ControlClient = S3ControlClient.builder()
                                                             .region(clientRegion)
                                                             .dualstackEnabled(true)
                                                             .build();
            ListRegionalBucketsRequest listRegionalBucketsRequest = ListRegionalBucketsRequest.builder()
                                                                                              .accountId(accountId)
                                                                                              .outpostId(navyId)
                                                                                              .build();

            ListRegionalBucketsResponse listBuckets = s3ControlClient.listRegionalBuckets(listRegionalBucketsRequest);
            System.out.printf("ListRegionalBuckets Response: %s%n", listBuckets.toString());
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 on Outposts couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        }
        catch (S3ControlException e) {
            // Unknown exceptions will be thrown as an instance of this type.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 on Outposts couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3 on Outposts.
            e.printStackTrace();
        }
    }
}
```

**Example – 创建启用双堆栈端点的 `S3OutpostsClient`**  

```
import com.amazonaws.AmazonServiceException;
import com.amazonaws.SdkClientException;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3outposts.S3OutpostsClient;
import software.amazon.awssdk.services.s3outposts.model.ListEndpointsRequest;
import software.amazon.awssdk.services.s3outposts.model.ListEndpointsResponse;
import software.amazon.awssdk.services.s3outposts.model.S3OutpostsException;


public class DualStackEndpointsExample2 {

    public static void main(String[] args) {
        Region clientRegion = Region.of("us-east-1");

        try {
            // Create an S3OutpostsClient with dual-stack endpoints enabled.
            S3OutpostsClient s3OutpostsClient = S3OutpostsClient.builder()
                                                              .region(clientRegion)
                                                              .dualstackEnabled(true)
                                                              .build();
            ListEndpointsRequest listEndpointsRequest = ListEndpointsRequest.builder().build();

            ListEndpointsResponse listEndpoints = s3OutpostsClient.listEndpoints(listEndpointsRequest);
            System.out.printf("ListEndpoints Response: %s%n", listEndpoints.toString());
        } catch (AmazonServiceException e) {
            // The call was transmitted successfully, but Amazon S3 on Outposts couldn't process
            // it, so it returned an error response.
            e.printStackTrace();
        }
        catch (S3OutpostsException e) {
            // Unknown exceptions will be thrown as an instance of this type.
            e.printStackTrace();
        } catch (SdkClientException e) {
            // Amazon S3 on Outposts couldn't be contacted for a response, or the client
            // couldn't parse the response from Amazon S3 on Outposts.
            e.printStackTrace();
        }
    }
}
```

如果要在 Windows 上使用 AWS SDK for Java 2.x，可能必须设置以下 Java 虚拟机（JVM）属性：

```
java.net.preferIPv6Addresses=true
```