使用存储桶策略控制从 VPC 端点的访问 - Amazon Simple Storage Service

使用存储桶策略控制从 VPC 端点的访问

您可以使用 Amazon S3 存储桶策略控制从特定虚拟私有云(VPC)端点或特定 VPC 对存储桶的访问。本部分包含可用于从 VPC 端点控制 Amazon S3 存储桶访问的示例存储桶策略。要了解如何设置 VPC 端点,请参阅 VPC 用户指南中的 VPC 端点

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

Amazon S3 的 VPC 端点是 VPC 内的逻辑实体,仅允许连接到 Amazon S3。VPC 端点将请求路由到 Amazon S3 并将响应路由回 VPC。VPC 端点仅更改请求的路由方式。Amazon S3 公有端点和 DNS 名称将继续使用 VPC 端点。有关在 Amazon S3 中使用 VPC 端点的重要信息,请参阅《VPC 用户指南》中的 Gateway endpointsGateway endpoints for Amazon S3

Amazon S3 的 VPC 端点提供两种方式来控制对 Amazon S3 数据的访问:

  • 您可以控制允许通过特定 VPC 端点访问的请求、用户或组。有关此类型的访问控制的信息,请参阅《VPC 用户指南》中的 Controlling access to VPC endpoints using endpoint policies

  • 可以使用 Amazon S3 存储桶策略控制哪些 VPC 或 VPC 端点有权访问存储桶。有关此类型存储桶策略访问控制的示例,请参阅以下有关限制访问的主题。

重要

如本节中所述对 VPC 端点应用 Amazon S3 存储桶策略时,您可能会无意中阻止对存储桶的访问权限。存储桶权限旨在专门限制存储桶访问源自 VPC 端点的连接,而这可能会阻止到存储桶的所有连接。有关如何修复此问题的信息,请参阅《AWS Support 知识中心》中的当 VPC 或 VPC 端点 ID 错误时,如何修复存储桶策略?

限制对特定 VPC 端点的访问

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

重要
  • 在使用以下示例策略之前,将 VPC 端点 ID 替换为适合您的使用案例的值。否则,您将无法访问您的存储桶。

  • 此策略禁用控制台访问指定的存储桶,因为控制台请求不是来自指定的 VPC 端点。

{ "Version": "2012-10-17", "Id": "Policy1415115909152", "Statement": [ { "Sid": "Access-to-specific-VPCE-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::awsexamplebucket1", "arn:aws:s3:::awsexamplebucket1/*"], "Condition": { "StringNotEquals": { "aws:SourceVpce": "vpce-1a2b3c4d" } } } ] }

限制对特定 VPC 的访问

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

重要
  • 在使用以下示例策略之前,将 VPC ID 替换为适合您的使用案例的值。否则,您将无法访问您的存储桶。

  • 此策略禁用控制台访问指定的存储桶,因为控制台请求不是来自指定的 VPC。

{ "Version": "2012-10-17", "Id": "Policy1415115909153", "Statement": [ { "Sid": "Access-to-specific-VPC-only", "Principal": "*", "Action": "s3:*", "Effect": "Deny", "Resource": ["arn:aws:s3:::awsexamplebucket1", "arn:aws:s3:::awsexamplebucket1/*"], "Condition": { "StringNotEquals": { "aws:SourceVpc": "vpc-111bbb22" } } } ] }