

# 使用存储桶策略控制从 VPC 端点的访问
<a name="example-bucket-policies-vpc-endpoint"></a>

您可以使用 Amazon S3 存储桶策略控制从特定虚拟私有云（VPC）端点或特定 VPC 对存储桶的访问。本部分包含可用于从 VPC 端点控制 Amazon S3 存储桶访问的示例存储桶策略。要了解如何设置 VPC 端点，请参阅 *VPC 用户指南*中的 [VPC 端点](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints.html)。

您可以使用 VPC 在您定义的虚拟网络内启动 AWS 资源。使用 VPC 端点可以在您的 VPC 和其它 AWS 服务之间创建私有连接。此私有连接不需要通过互联网、虚拟专用网络（VPN）连接、NAT 实例或 Direct Connect 进行访问。

Amazon S3 的 VPC 端点是 VPC 内的逻辑实体，仅允许连接到 Amazon S3。VPC 端点将请求路由到 Amazon S3 并将响应路由回 VPC。VPC 端点仅更改请求的路由方式。Amazon S3 公有端点和 DNS 名称将继续使用 VPC 端点。有关在 Amazon S3 中使用 VPC 端点的重要信息，请参阅《VPC 用户指南》**中的 [Gateway endpoints](https://docs.aws.amazon.com/vpc/latest/userguide/vpce-gateway.html) 和 [Gateway endpoints for Amazon S3](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-s3.html)。

Amazon S3 的 VPC 端点提供两种方式来控制对 Amazon S3 数据的访问：
+ 您可以控制允许通过特定 VPC 端点访问的请求、用户或组。有关此类型的访问控制的信息，请参阅**《VPC 用户指南》中的 [Controlling access to VPC endpoints using endpoint policies](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-endpoints-access.html)。
+ 可以使用 Amazon S3 存储桶策略控制哪些 VPC 或 VPC 端点有权访问存储桶。有关此类型存储桶策略访问控制的示例，请参阅以下有关限制访问的主题。

**Topics**
+ [限制对特定 VPC 端点的访问](#example-bucket-policies-restrict-accesss-vpc-endpoint)
+ [限制对特定 VPC 的访问](#example-bucket-policies-restrict-access-vpc)
+ [限制对 IPv6 VPC 端点的访问](#example-bucket-policies-ipv6-vpc-endpoint)

**重要**  
如本节中所述对 VPC 端点应用 Amazon S3 存储桶策略时，您可能会无意中阻止对存储桶的访问权限。存储桶权限旨在专门限制存储桶访问源自 VPC 端点的连接，而这可能会阻止到存储桶的所有连接。有关如何修复此问题的信息，请参阅**《AWS 支持 知识中心》中的[当 VPC 或 VPC 端点 ID 错误时，如何修复存储桶策略？](https://aws.amazon.com/premiumsupport/knowledge-center/s3-regain-access/)

## 限制对特定 VPC 端点的访问
<a name="example-bucket-policies-restrict-accesss-vpc-endpoint"></a>

下面是限制仅从 ID 为 `awsexamplebucket1` 的 VPC 端点访问特定存储桶 `vpce-1a2b3c4d` 的 Amazon S3 存储桶策略示例。如果未使用指定的端点，则该策略会拒绝对存储桶的所有访问。`aws:SourceVpce` 条件指定端点。`aws:SourceVpce` 条件不需要 VPC 端点资源的 Amazon 资源名称（ARN），而只需要 VPC 端点 ID。有关在策略中使用条件的更多信息，请参阅 [使用条件键的存储桶策略示例](amazon-s3-policy-keys.md)。

**重要**  
在使用以下示例策略之前，将 VPC 端点 ID 替换为适合您的使用案例的值。否则，您将无法访问您的存储桶。
此策略禁用控制台访问指定的存储桶，因为控制台请求不是来自指定的 VPC 端点。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Policy1415115909152",
   "Statement": [
     {
       "Sid": "Access-to-specific-VPCE-only",
       "Principal": "*",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:SourceVpce": "vpce-0abcdef1234567890"
         }
       }
     }
   ]
}
```

------

## 限制对特定 VPC 的访问
<a name="example-bucket-policies-restrict-access-vpc"></a>

可以使用 `aws:SourceVpc` 条件来创建用于限制对特定 VPC 的访问的存储桶策略。如果在同一 VPC 中配置了多个 VPC 端点，并且要管理对所有端点的 Amazon S3 存储桶的访问，这一点非常有用。以下是拒绝 VPC `vpc-111bbb22` 以外的任何人访问 `awsexamplebucket1` 及其对象的策略示例。如果未使用指定的 VPC，则该策略拒绝对存储桶的所有访问。此语句不授予针对存储桶的访问权限。要授予访问权限，必须添加单独的 `Allow` 语句。`vpc-111bbb22` 条件键不需要 VPC 资源 的 ARN，仅需要 VPC ID。

**重要**  
在使用以下示例策略之前，将 VPC ID 替换为适合您的使用案例的值。否则，您将无法访问您的存储桶。
此策略禁用控制台访问指定的存储桶，因为控制台请求不是来自指定的 VPC。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Id": "Policy1415115909153",
   "Statement": [
     {
       "Sid": "Access-to-specific-VPC-only",
       "Principal": "*",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:SourceVpc": "vpc-1a2b3c4d"
         }
       }
     }
   ]
}
```

------

## 限制对 IPv6 VPC 端点的访问
<a name="example-bucket-policies-ipv6-vpc-endpoint"></a>

以下示例策略拒绝对 *amzn-s3-demo-bucket* 存储桶及其对象执行所有 Amazon S3（`s3:`）操作，除非请求来自指定的 VPC 端点（`vpce-0a1b2c3d4e5f6g`），并且源 IP 地址与提供的 IPv6 CIDR 数据块相匹配。

```
{
   "Version": "2012-10-17", 		 	 	 
   "Id": "Policy1415115909154",
   "Statement": [
     {
       "Sid": "AccessSpecificIPv6VPCEOnly",
       "Action": "s3:*",
       "Effect": "Deny",
       "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket",
                    "arn:aws:s3:::amzn-s3-demo-bucket/*"],
       "Condition": {
         "StringNotEquals": {
           "aws:SourceVpc": "vpc-0a1b2c3d4e5f6g4h2"
         },
        "NotIpAddress": {
          "aws:VpcSourceIp": "2001:db8::/32"
        }
       }
     }
   ]
}
```

有关如何根据特定 IP 或 VPC 限制对存储桶的访问权限的信息，请参阅 AWS re:Post 知识中心中的[如何只允许特定的 VPC 端点或 IP 地址访问我的 Amazon S3 存储桶？](https://repost.aws/knowledge-center/block-s3-traffic-vpc-ip)