

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 适用于 Amazon S3 的网关端点
<a name="vpc-endpoints-s3"></a>

您可以使用网关 VPC 端点从 VPC 访问 Amazon S3。创建网关端点后，您可以将其添加为从您的 VPC 流向 Amazon S3 的流量的路由表中的目标。

使用网关端点不会发生任何额外费用。

Amazon S3 同时支持网关端点和接口端点。借助网关端点，您可以从 VPC 访问 Amazon S3，而无需为 VPC 配备互联网网关或 NAT 设备，也无需任何额外费用。但是，网关终端节点不允许从本地网络、其他 AWS 区域的对 VPCs 等设备或通过传输网关进行访问。对于这些场景，您必须使用接口端点，后者需要额外付费。有关更多信息，请参阅《Amazon S3 用户指南》**中的[适用于 Amazon S3 的 VPC 端点类型](https://docs.aws.amazon.com/AmazonS3/latest/userguide/privatelink-interface-endpoints.html#types-of-vpc-endpoints-for-s3)。

**Topics**
+ [注意事项](#gateway-endpoint-considerations-s3)
+ [私有 DNS](#private-dns-s3)
+ [创建网关端点](#create-gateway-endpoint-s3)
+ [使用存储桶策略控制访问](#bucket-policies-s3)
+ [关联路由表](#associate-route-tables-s3)
+ [编辑 VPC 端点策略](#edit-vpc-endpoint-policy-s3)
+ [删除网关端点](#delete-gateway-endpoint-s3)

## 注意事项
<a name="gateway-endpoint-considerations-s3"></a>
+ 网关端点仅在您创建该端点所在的区域可用。请务必在您的 S3 存储桶所在的区域内创建网关端点。
+ 如果您使用的是 Amazon DNS 服务器，则必须为您的 VPC 同时启用 [DNS 主机名和 DNS 解析](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating)。如果您使用自己的 DNS 服务器，请确保将针对 Amazon S3 的请求正确解析为 AWS维护的 IP 地址。
+ 对于通过网关端点访问 Amazon S3 的实例，安全组的出站规则必须允许进出 Amazon S3 的流量。您可以在安全组规则中引用 Amazon S3 的[前缀列表](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-aws-managed-prefix-lists.html)的 ID。
+ 对于通过网关端点访问 Amazon S3 的实例，子网的网络 ACL 必须允许进出 Amazon S3 的流量。您不能在网络 ACL 规则中引用前缀列表，但可以从 Amazon S3 的[前缀列表](https://docs.aws.amazon.com/vpc/latest/userguide/working-with-aws-managed-prefix-lists.html)中获取 Amazon S3 的 IP 地址范围。
+ 检查您使用的是否需要访问 S3 存储桶。 AWS 服务 例如，某项服务可能需要访问包含日志文件的存储桶，或者可能需要您将驱动程序或代理下载到 EC2 实例。如果是，请确保您的终端节点策略允许 AWS 服务 或资源使用`s3:GetObject`操作访问这些存储桶。
+ 对于通过 VPC 端点向 Amazon S3 发出的请求，不能在身份策略或存储桶策略中使用 `aws:SourceIp` 条件。改为使用 `aws:VpcSourceIp` 条件。或者，您可以使用路由表来控制哪些 EC2 实例可以通过 VPC 端点访问 Amazon S3。
+ Amazon S3 收到的来自受影响子网中实例的一个 IPv4 或多个源 IPv6 地址在您的 VPC 中从公有地址更改为私有地址。端点将切换网络路由，并断开打开的 TCP 连接。之前使用公共地址的连接不会恢复。建议您在创建或修改端点时不要运行任何重要任务；或进行测试以确保您的软件在连接中断后可自动重新连接到 Amazon S3。
+ 无法将端点连接扩展到 VPC 之外。VPN 连接、VPC 对等连接、传输网关或您的 VPC 中 Direct Connect 连接另一端的资源无法使用网关终端节点与 Amazon S3 通信。
+ 您的账户的默认配额为每个区域 20 个网关端点，该配额可调整。每个 VPC 的网关端点限制为 255 个。

## 私有 DNS
<a name="private-dns-s3"></a>

在为 Amazon S3 创建网关端点和接口端点时，您可以配置私有 DNS 以优化成本。

**Route 53 Resolver**  
Amazon 为您的 VPC 提供 DNS 服务器，称为 [Route 53 Resolver](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/resolver.html)。Route 53 Resolver 自动解析私有托管区域中的本地 VPC 域名和记录。但是，您不能从 VPC 外部使用 Route 53 Resolver。Route 53 提供解析器端点和解析器规则，以便您可从 VPC 外部使用 Route 53 Resolver。*入站解析器端点*将来自本地网络的 DNS 查询转发到 Route 53 Resolver。*出站解析器端点*将来自 Route 53 Resolver 的 DNS 查询转发到本地网络。

当您将 Amazon S3 的接口端点配置为仅对入站解析器端点使用私有 DNS 时，我们会创建入站解析器端点。对于 Amazon S3 的 DNS 查询，入站解析器端点会将其从本地解析到接口端点的私有 IP 地址。我们还将 Route 53 Resolver 的 ALIAS 记录添加到 Amazon S3 的公共托管区域，这样来自 VPC 的 DNS 查询便会解析到 Amazon S3 公有 IP 地址，从而将流量路由到网关端点。

**私有 DNS**  
如果您为 Amazon S3 的接口端点配置私有 DNS，但并非仅为入站解析器端点配置私有 DNS，则来自您的本地网络和 VPC 的请求都使用接口端点访问 Amazon S3。因此，您需要付费使用接口端点处理来自 VPC 的流量，而不是免费使用网关端点。

![\[使用两种端点类型的 Amazon S3 请求路由。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/privatelink/images/s3-private-dns-default.png)


**私有 DNS 仅适用于入站解析器端点**  
如果您仅为入站解析器端点配置私有 DNS，则来自您的本地网络的请求会使用接口端点访问 Amazon S3，而来自 VPC 的请求会使用网关端点访问 Amazon S3。因此，您可以优化成本，因为您只需为无法使用网关端点的流量，付费使用接口端点。

要进行此配置，网关终端节点的 DNS 记录 IP 类型必须与接口终端节点相匹配或匹配`service-defined`。 AWS PrivateLink 不支持任何其他组合。有关更多信息，请参阅 [DNS 记录 IP 类型](gateway-endpoints.md#gateway-endpoint-dns-record-ip-type)。

![\[使用私有 DNS 和入站解析器端点的 Amazon S3 请求路由。\]](http://docs.aws.amazon.com/zh_cn/vpc/latest/privatelink/images/s3-private-dns-inbound-endpoint.png)


**配置私有 DNS**  
您可以在创建 Amazon S3 的接口端点时或在创建后，为其配置私有 DNS。有关更多信息，请参阅 [创建 VPC 端点](create-interface-endpoint.md#create-interface-endpoint-aws)（创建期间配置）或 [启用私有 DNS 名称](interface-endpoints.md#enable-private-dns-names)（创建后配置）。

## 创建网关端点
<a name="create-gateway-endpoint-s3"></a>

使用以下过程创建连接到 Amazon S3 的网关端点。

**使用控制台创建网关端点**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

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

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

1. 对于 **Service category**（服务类别），选择 **AWS 服务**。

1. 对于**服务**，添加过滤器**类型 = 网关**。

   如果您的 Amazon S3 数据存储在通用存储桶中，请选择 **com** .amazonaws。 *region***.s3。**

   如果您的 Amazon S3 数据存储在目录存储桶中，请选择 **com** .amazonaws。 *region***.s3express。**

1. 在 **VPC** 选项中，选择要创建端点的 VPC。

1. 对于 **IP address type**（IP 地址类型），可从以下选项中进行选择：
   + **IPv4**— 为端点网络接口分配 IPv4 地址。仅当所有选定的子网都有 IPv4 地址范围并且服务接受 IPv4 请求时，才支持此选项。
   + **IPv6**— 为端点网络接口分配 IPv6 地址。仅当所有选定的子网仅为子网并且服务接受 IPv6 IPv6 请求时，才支持此选项。
   + **Dualstack** — 将 IPv4 和 IPv6 地址分配给端点网络接口。仅当所有选定的子网同时具有 IPv4 和 IPv6 地址范围，并且服务同时接受 IPv4 和 IPv6 请求时，才支持此选项。

1. 对于 **Route tables**（路由表），选择端点要使用的路由表。我们将自动添加一个路由，将以服务为目的地的流量指向端点网络接口。

1. 对于 **Policy**（策略），选择 **Full access**（完全访问权限）以允许所有主体通过 VPC 端点对所有资源执行所有操作。否则，选择 **Custom**（自定义）以附加 VPC 端点策略，该策略控制主体通过 VPC 端点对资源执行操作的权限。

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

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

**使用命令行创建网关端点**
+ [create-vpc-endpoint](https://docs.aws.amazon.com/cli/latest/reference/ec2/create-vpc-endpoint.html) (AWS CLI)
+ [New-EC2VpcEndpoint](https://docs.aws.amazon.com/powershell/latest/reference/items/New-EC2VpcEndpoint.html)（适用于 Windows 的工具 PowerShell）

## 使用存储桶策略控制访问
<a name="bucket-policies-s3"></a>

您可以使用存储桶策略来控制从特定终端节点、 VPCs、IP 地址范围和 AWS 账户对存储桶的访问。这些示例假设还有一个允许您的使用案例所需访问权限的策略语句。

**Example 示例：限制对特定端点的访问**  
您可以使用 [aws:sourceVpce](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpce) 条件键来创建限制对特定端点的访问的存储桶策略。除非使用了指定的网关端点，否则以下策略会使用指定的操作拒绝对指定桶的访问。请注意，此策略通过 AWS 管理控制台使用指定的操作阻止对指定桶的访问。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Allow-access-to-specific-VPCE",
      "Effect": "Deny",
      "Principal": "*",
      "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
      "Resource": ["arn:aws:s3:::bucket_name",
                   "arn:aws:s3:::bucket_name/*"],
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpce": "vpce-1a2b3c4d"
        }
      }
    }
  ]
}
```

**Example 示例：限制对特定 VPC 的访问**  
您可以使用 a [ws: Sour](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourcevpc) ceVPC 条件密钥创建限制访问特定 VPCs 存储桶策略。如果您在同一 VPC 中配置了多个端点，这会非常有用。除非请求来自指定的 VPC，否则以下策略会使用指定的操作拒绝对指定桶的访问。请注意，此策略通过 AWS 管理控制台使用指定的操作阻止对指定桶的访问。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Allow-access-to-specific-VPC",
      "Effect": "Deny",
      "Principal": "*",
      "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
      "Resource": ["arn:aws:s3:::example_bucket",
                   "arn:aws:s3:::example_bucket/*"],
      "Condition": {
        "StringNotEquals": {
          "aws:sourceVpc": "vpc-111bbb22"
        }
      }
    }
  ]
}
```

**Example 示例：限制对特定 IP 地址范围的访问**  
您可以使用 aws[: VpcSourceIp](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-vpcsourceip) 条件键创建限制对特定 IP 地址范围的访问的策略。除非请求来自指定的 IP 地址，否则以下策略会使用指定的操作拒绝对指定桶的访问。请注意，此策略通过 AWS 管理控制台使用指定的操作阻止对指定桶的访问。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Allow-access-to-specific-VPC-CIDR",
      "Effect": "Deny",
      "Principal": "*",
      "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
      "Resource": ["arn:aws:s3:::bucket_name",
                   "arn:aws:s3:::bucket_name/*"],
      "Condition": {
        "NotIpAddress": {
          "aws:VpcSourceIp": "172.31.0.0/16"
        }
      }
    }
  ]
}
```

**Example 示例：限制对特定存储桶的访问权限 AWS 账户**  
您可以使用 `s3:ResourceAccount` 条件键来创建策略，用于限制对特定 AWS 账户 中 S3 存储桶的访问。除非 S3 桶归指定的 AWS 账户所有，否则以下策略会使用指定的操作拒绝对这些桶的访问。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Allow-access-to-bucket-in-specific-account",
      "Effect": "Deny",
      "Principal": "*",
      "Action": ["s3:GetObject", "s3:PutObject", "s3:DeleteObject"],
      "Resource": "arn:aws:s3:::*",
      "Condition": {
        "StringNotEquals": {
          "s3:ResourceAccount": "111122223333"
        }
      }
    }
  ]
}
```

## 关联路由表
<a name="associate-route-tables-s3"></a>

您可以更改与网关端点关联的路由表。当您关联路由表时，我们将自动添加一个路由，将以服务为目的地的流量指向端点网络接口。当您取消关联路由表时，我们会自动从路由表中删除端点路由。

**使用控制台关联路由表**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

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

1. 选择网关端点。

1. 选择 **Actions**、**Manage route tables**。

1. 根据需要选择或取消选择路由表。

1. 选择 **Modify route tables**（修改路由表）。

**使用命令行关联路由表**
+ [modify-vpc-endpoint](https://docs.aws.amazon.com/cli/latest/reference/ec2/modify-vpc-endpoint.html) (AWS CLI)
+ [Edit-EC2VpcEndpoint](https://docs.aws.amazon.com/powershell/latest/reference/items/Edit-EC2VpcEndpoint.html)（适用于 Windows 的工具 PowerShell）

## 编辑 VPC 端点策略
<a name="edit-vpc-endpoint-policy-s3"></a>

您可以为网关端点编辑端点策略，以此控制通过端点从 VPC 对 Amazon S3 进行的访问。在更新完端点策略后，您所做的更改可能需要几分钟才能生效。默认策略允许完全访问。有关更多信息，请参阅 [端点策略](vpc-endpoints-access.md)。

**使用控制台更改端点策略**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

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

1. 选择网关端点。

1. 依次选择 **Actions**（操作）、**Manage policy**（管理策略）。

1. 选择 **Full Access**（完全访问）以允许对服务进行完全访问，或者选择 **Custom**（自定义）并附加自定义策略。

1. 选择**保存**。

下面是访问 Amazon S3 的端点策略示例。

**Example 示例：限制对特定存储桶的访问**  
您可以创建一个策略来仅允许访问特定 S3 存储桶。如果您的 VPC AWS 服务 中有其他使用 S3 存储桶，则此功能非常有用。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Allow-access-to-specific-bucket",
      "Effect": "Allow",
      "Principal": "*",
      "Action": [
         "s3:ListBucket",
         "s3:GetObject",
         "s3:PutObject"
      ],
      "Resource": [
        "arn:aws:s3:::bucket_name",
        "arn:aws:s3:::bucket_name/*"
      ]
    }
  ]
}
```

**Example 示例：限制对特定 IAM 角色的访问权限**  
您可以创建限制对特定 IAM 角色的访问权限的策略。必须使用 `aws:PrincipalArn` 向主体授予访问权限。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Allow-access-to-specific-IAM-role",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "ArnEquals": {
          "aws:PrincipalArn": "arn:aws:iam::111122223333:role/role_name"
        }
      }
    }
  ]
}
```

**Example 示例：限制对特定账户中用户的访问**  
您可以创建限制对特定账户的访问权限的策略。    
****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "Allow-callers-from-specific-account",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "*",
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:PrincipalAccount": "111122223333"
        }
      }
    }
  ]
}
```

## 删除网关端点
<a name="delete-gateway-endpoint-s3"></a>

用完网关端点后可以将其删除。当您删除网关端点时，我们会从子网路由表中删除端点路由。

如果私有 DNS 已启用，则无法删除网关端点。

**使用控制台删除网关端点**

1. 打开位于 [https://console.aws.amazon.com/vpc/](https://console.aws.amazon.com/vpc/) 的 Amazon VPC 控制台。

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

1. 选择网关端点。

1. 选择 **Actions**（操作）、**Delete VPC Endpoint**（删除 VPC 端点）。

1. 当系统提示进行确认时，输入 **delete**。

1. 选择**删除**。

**使用命令行删除网关端点**
+ [delete-vpc-endpoints](https://docs.aws.amazon.com/cli/latest/reference/ec2/delete-vpc-endpoints.html) (AWS CLI)
+ [Remove-EC2VpcEndpoint](https://docs.aws.amazon.com/powershell/latest/reference/items/Remove-EC2VpcEndpoint.html)（适用于 Windows 的工具 PowerShell）