

# S3 on Outposts 的 Amazon PrivateLink
S3 on Outposts 的 Amazon PrivateLink

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

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

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

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

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


有关接口端点的一般信息，请参阅 *Amazon PrivateLink 指南*中的[接口 VPC 端点 (Amazon PrivateLink)](https://docs.amazonaws.cn/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)

## 限制和局限性


当您通过 Amazon PrivateLink 访问 S3 on Outposts 桶和端点管理 API 时，将适用 VPC 限制。有关更多信息，请参阅 *Amazon PrivateLink 指南*中的[接口端点属性和限制](https://docs.amazonaws.cn/vpc/latest/privatelink/vpce-interface.html#vpce-interface-limitations)以及 [Amazon PrivateLink 配额](https://docs.amazonaws.cn/vpc/latest/privatelink/vpc-limits-endpoints.html)。

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

## 访问 S3 on Outposts 接口端点


要使用 Amazon PrivateLink 访问 S3 on Outposts 桶和端点管理 API，您*必须*更新应用程序以使用特定于端点的 DNS 名称。创建接口端点时，Amazon PrivateLink 会生成两种特定于端点的 S3 on Outposts 名称：*区域* 和*可用区*。
+ **区域 DNS 名称** – 包括唯一的 VPC 端点 ID、服务标识符、Amazon Web Services 区域和 `vpce.amazonaws.com`，例如 `vpce-1a2b3c4d-5e6f.s3-outposts.us-east-1.vpce.amazonaws.com`。
+ **可用区 DNS 名称** – 包括唯一的 VPC 端点 ID、可用区、服务标识符、Amazon Web Services 区域和 `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。

### Amazon CLI 示例


使用 `--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
```

### Amazon SDK 示例


将 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 的 Amazon 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 的 Amazon 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 配置


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

## 为 S3 on Outposts 创建 VPC 端点
创建 VPC 端点

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

## 为 S3 on Outposts 创建桶策略和 VPC 端点策略
创建 VPC 端点策略和桶策略

您可以向 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 的访问策略指定以下信息：
+ 允许或拒绝其操作的 Amazon Identity and Access Management (IAM) 主体。
+ 允许或拒绝的 S3 控制操作。
+ 允许或拒绝其操作的 S3 on Outposts 资源。

以下示例显示了限制对桶或端点的访问的策略。有关 VPC 连接的更多信息，请参阅 Amazon 白皮书 [Amazon Virtual Private Cloud 连接性选项](https://docs.amazonaws.cn/whitepapers/latest/aws-vpc-connectivity-options/welcome.html)中的 [Network-to-VPC connectivity options](https://docs.amazonaws.cn/whitepapers/latest/aws-vpc-connectivity-options/network-to-amazon-vpc-connectivity-options.html)（从网络到 VPC 的连接性选项）。

**重要**  
当您如本节所述对 VPC 端点应用示例策略时，您可能会无意中阻止对桶的访问权限。桶权限会限制桶访问源自 VPC 端点的连接，而这可能会阻止到桶的所有连接。有关如何修复此问题的信息，请参阅[我的桶策略有错误的 VPC 或 VPC 端点 ID。*Amazon Web Services 支持 知识中心*内的如何修复策略才能访问桶？](https://www.amazonaws.cn/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 端点对特定桶的访问


您可以创建一个端点策略以仅允许访问特定的 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 端点访问


以下 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"
                }
            }
        }
    ]
}
```

------