

# S3 on Outposts 的 AWS PrivateLink
<a name="s3-outposts-privatelink-interface-endpoints"></a>

S3 on Outposts 支持 AWS PrivateLink，后者通过虚拟专用网络中的私有端点，提供对 S3 on Outposts 存储的直接管理访问。这样，您就可以使用虚拟私有云（VPC）中的私有 IP 地址，简化内部网络架构并对 Outposts 对象存储执行管理操作。使用 AWS PrivateLink，无需使用公有 IP 地址或代理服务器。

通过将 AWS PrivateLink 用于 Amazon S3 on Outposts，您可以在虚拟私有云（VPC）中预调配*接口 VPC 端点*，以访问 S3 on Outposts [存储桶管理](S3OutpostsAPI.md#S3OutpostsAPIsBucket)和[端点管理](S3OutpostsAPI.md#S3OutpostsAPIs) API。通过虚拟专用网络（VPN）或 AWS Direct Connect，可以直接从部署在 VPC 中或本地的应用程序访问接口 VPC 端点。您可以通过 AWS PrivateLink 访问桶和端点管理 API。AWS PrivateLink 不支持[数据传输](S3OutpostsAPI.md#S3OutpostsAPIsObject) API 操作，例如 GET、PUT 和类似的 API。这些操作已经通过 S3 on Outposts 端点和接入点配置私密传输。有关更多信息，请参阅 [S3 on Outposts 的网络](S3OutpostsNetworking.md)。

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

接口端点通过 AWS 网络和通过 AWS PrivateLink 路由对 S3 on Outposts 桶和端点管理 API 的请求，如下图所示。

![数据流图显示了接口端点如何路由对 S3 on Outposts 存储桶和端点管理 API 的请求。](http://docs.aws.amazon.com/zh_cn/AmazonS3/latest/s3-outposts/images/s3-outposts-interface-endpoints.png)


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

**Topics**
+ [限制和局限性](#s3-outposts-privatelink-restrictions)
+ [访问 S3 on Outposts 接口端点](#s3-outposts-accessing-s3-interface-endpoints)
+ [更新本地 DNS 配置](#s3-outposts-updating-on-premises-dns-config)
+ [为 S3 on Outposts 创建 VPC 端点](#s3-outposts-creating-vpc)
+ [为 S3 on Outposts 创建桶策略和 VPC 端点策略](#s3-outposts-creating-vpc-endpoint-policy)

## 限制和局限性
<a name="s3-outposts-privatelink-restrictions"></a>

当您通过 AWS PrivateLink 访问 S3 on Outposts 桶和端点管理 API 时，将适用 VPC 限制。有关更多信息，请参阅 *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)。

此外，AWS PrivateLink 不支持以下内容：
+ [美国联邦信息处理标准 (FIPS) 端点](https://aws.amazon.com/compliance/fips/)
+ [S3 on Outposts 数据传输 API](S3OutpostsAPI.md#S3OutpostsAPIsObject)，例如，GET、PUT 和类似的对象 API 操作。
+ 私有 DNS

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

要使用 AWS PrivateLink 访问 S3 on Outposts 桶和端点管理 API，您*必须*更新应用程序以使用特定于端点的 DNS 名称。创建接口端点时，AWS PrivateLink 会生成两种特定于端点的 S3 on Outposts 名称：*区域* 和*可用区*。
+ **区域 DNS 名称** – 包括唯一的 VPC 端点 ID、服务标识符、AWS 区域和 `vpce.amazonaws.com`，例如 `{{vpce-1a2b3c4d-5e6f}}.s3-outposts.us-east-1.vpce.amazonaws.com`。
+ **可用区 DNS 名称** – 包括唯一的 VPC 端点 ID、可用区、服务标识符、AWS 区域和 `vpce.amazonaws.com`，例如 `{{vpce-1a2b3c4d-5e6f}}-us-east-1a.s3-outposts.us-east-1.vpce.amazonaws.com`。如果您的架构隔离了可用区，则可以使用此选项。例如，您可以将可用区 DNS 名称用于故障控制或降低区域数据传输成本。

**重要**  
S3 on Outposts 接口端点是从公有 DNS 域解析出来的。S3 on Outposts 不支持私有 DNS。将 `--endpoint-url` 参数用于所有桶和端点管理 API。

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

使用 `--region` 和 `--endpoint-url` 参数，通过 S3 on Outposts 接口端点访问桶管理和端点管理 API。

**Example ：使用端点 URL 列出具有 S3 控制 API 的桶**  
在以下示例中，将区域 `{{us-east-1}}`、VPC 端点 URL `{{vpce-1a2b3c4d-5e6f.s3.us-east-1.vpce.amazonaws.com}}` 和账户 ID `{{111122223333}}` 替换为相应的信息。  

```
aws s3control list-regional-buckets --region {{us-east-1}} --endpoint-url https://{{vpce-1a2b3c4d-5e6f.s3-outposts.us-east-1.vpce.amazonaws.com}} --account-id {{111122223333}}
```

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

将 SDK 更新到最新版本，然后将客户端配置为使用端点 URL 访问 S3 on Outposts 接口端点的 S3 控制 API。

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

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

```
control_client = session.client(
service_name='s3control',
region_name='{{us-east-1}}',
endpoint_url='https://{{vpce-1a2b3c4d-5e6f.s3-outposts.us-east-1.vpce.amazonaws.com}}'
)
```
有关更多信息，请参阅《Boto3 开发人员指南》**中的[适用于 Amazon S3 的 AWS PrivateLink](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-example-privatelink.html)。

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

**Example ：使用端点 URL 访问 S3 控制 API**  
在以下示例中，将 VPC 端点 URL `{{vpce-1a2b3c4d-5e6f.s3-outposts.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://{{vpce-1a2b3c4d-5e6f.s3-outposts.us-east-1.vpce.amazonaws.com}}"))
                                 .build()
```
有关更多信息，请参阅《适用于 Java 的 AWS SDK API Reference》**中的 [https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3control/S3ControlClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3control/S3ControlClient.html)。

------

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

使用特定于端点的 DNS 名称访问适用于 S3 on Outposts 桶管理和端点管理 API 的接口端点时，您不必更新本地 DNS 解析程序。您可以使用来自公有 S3 on Outposts DNS 域的接口端点的私有 IP 地址解析特定于端点的 DNS 名称。

## 为 S3 on Outposts 创建 VPC 端点
<a name="s3-outposts-creating-vpc"></a>

要为 S3 on Outposts 创建 VPC 接口端点，请参阅《AWS PrivateLink 指南》**中的[创建 VPC 端点](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html#create-interface-endpoint-aws)。

## 为 S3 on Outposts 创建桶策略和 VPC 端点策略
<a name="s3-outposts-creating-vpc-endpoint-policy"></a>

您可以向 VPC 端点附加用于控制对 S3 on Outposts 的访问的端点策略。您还可以在 S3 on Outposts 桶策略中使用 `aws:sourceVpce` 条件来限制从特定 VPC 端点访问特定的桶。使用 VPC 端点策略，您可以控制对 S3 on Outposts 桶管理 API 和端点管理 API 的访问。使用桶策略，您可以控制对 S3 on Outposts 桶管理 API 的访问。但是，您无法使用 `aws:sourceVpce` 管理对 S3 on Outposts 的对象操作的访问。

S3 on Outposts 的访问策略指定以下信息：
+ 允许或拒绝其操作的 AWS Identity and Access Management (IAM) 主体。
+ 允许或拒绝的 S3 控制操作。
+ 允许或拒绝其操作的 S3 on Outposts 资源。

以下示例显示了限制对桶或端点的访问的策略。有关 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 的连接性选项）。

**重要**  
当您如本节所述对 VPC 端点应用示例策略时，您可能会无意中阻止对桶的访问权限。桶权限会限制桶访问源自 VPC 端点的连接，而这可能会阻止到桶的所有连接。有关如何修复此问题的信息，请参阅[我的桶策略有错误的 VPC 或 VPC 端点 ID。*支持 知识中心*内的如何修复策略才能访问桶？](https://aws.amazon.com/premiumsupport/knowledge-center/s3-regain-access/)。
在使用以下示例桶策略之前，请将 VPC 端点 ID 替换为适合您的使用案例的值。否则，您将无法访问您的桶。
如果您的策略仅允许从特定 VPC 端点访问 S3 on Outposts 桶，它将禁用通过控制台访问该桶，因为控制台请求不是源自指定的 VPC 端点。

**Topics**
+ [示例：限制从 VPC 端点对特定桶的访问](#privatelink-example-restrict-access-to-bucket)
+ [示例：在 S3 on Outposts 桶策略中拒绝从特定 VPC 端点访问](#s3-outposts-privatelink-example-deny-access-from-vpc-endpoint)

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

您可以创建一个端点策略以仅允许访问特定的 S3 on Outposts 桶。以下策略将 GetBucketPolicy 操作的访问权限仅限于 `{{example-outpost-bucket}}`。要使用此策略，请将示例值替换为您自己的值。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Policy1415115909151",
    "Statement": [
        {
            "Sid": "Access-to-specific-bucket-only",
            "Principal": {
                "AWS": "111122223333"
            },
            "Action": "s3-outposts:GetBucketPolicy",
            "Effect": "Allow",
            "Resource": "arn:aws:s3-outposts:{{us-east-1}}:{{123456789012}}:outpost/{{op-01ac5d28a6a232904}}/bucket/{{example-outpost-bucket}}"
        }
    ]
}
```

------

### 示例：在 S3 on Outposts 桶策略中拒绝从特定 VPC 端点访问
<a name="s3-outposts-privatelink-example-deny-access-from-vpc-endpoint"></a>

以下 S3 on Outposts 桶策略拒绝通过 `{{vpce-1a2b3c4d}}` VPC 端点访问 `{{example-outpost-bucket}}` 桶上的 GetBucketPolicy。

`aws:sourceVpce` 条件指定端点，不需要 VPC 端点资源的 Amazon 资源名称 (ARN)，只需要端点 ID。要使用此策略，请将示例值替换为您自己的值。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "Policy1415115909152",
    "Statement": [
        {
            "Sid": "Deny-access-to-specific-VPCE",
            "Principal": {
                "AWS": "111122223333"
            },
            "Action": "s3-outposts:GetBucketPolicy",
            "Effect": "Deny",
            "Resource": "arn:aws:s3-outposts:{{us-east-1}}:{{123456789012}}:outpost/{{op-01ac5d28a6a232904}}/bucket/{{example-outpost-bucket}}",
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": "{{vpce-1a2b3c4d}}"
                }
            }
        }
    ]
}
```

------