Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何只允许特定的 VPC 端点或 IP 地址访问我的 Amazon S3 存储桶?
我只想允许来自特定 Amazon Virtual Private Cloud (Amazon VPC) 端点或 IP 地址的流量到我的 Amazon Simple Storage Service (Amazon S3) 存储桶。
解决方法
使用存储桶策略来指定可以访问您的 S3 存储桶的 VPC 端点、私有 IP 地址或公有 IP 地址。
**警告:**以下示例桶策略显式拒绝除了许可 VPC 端点或 IP 地址之外的某些访问请求。评估您的存储桶策略,以确定它们是否会影响与控制台相关的请求。
如果您的策略拒绝访问所有 S3 操作,则您的存储桶将锁定。在保存存储桶策略之前,请务必查看该策略。如果您将自己锁定在存储桶之外,请参阅不小心拒绝所有人访问 Amazon S3 存储桶后如何重新获得访问权限?
限制对特定 VPC 端点的访问
要仅允许来自您指定的 VPC 端点的流量,请在您的存储桶策略中使用 aws:SourceVpce 密钥。以下示例存储桶策略拒绝向存储桶上传权限,除非上传请求来自 vpce-1111111 或 vpce-2222222 VPC 端点:
{ "Id": "VPCe", "Version": "2012-10-17", "Statement": [ { "Sid": "VPCe", "Action": "s3:PutObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "StringNotEquals": { "aws:SourceVpce": [ "vpce-1111111", "vpce-2222222" ] } }, "Principal": "*" } ] }
要将上述策略与 aws:sourceVpce 条件结合使用,请将 Amazon S3 的 VPC 网关端点连接到 Amazon Elastic Compute Cloud (Amazon EC2) 实例子网的路由表。端点必须与存储桶位于同一 AWS 区域中。
限制访问特定的私有 IP 地址
要仅允许来自您指定的私有 IP 地址的流量,请在您的存储桶策略中使用 aws:VpcSourceIp 密钥。除非上传请求来自 10.1.1.1/32 或 172.1.1.1/32 私有 IP 地址,否则以下示例存储桶策略会拒绝对存储桶的上传权限:
{ "Id": "VpcSourceIp", "Version": "2012-10-17", "Statement": [ { "Sid": "VpcSourceIp", "Action": "s3:PutObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "NotIpAddress": { "aws:VpcSourceIp": [ "10.1.1.1/32", "172.1.1.1/32" ] } }, "Principal": "*" } ] }
要将上述策略与 aws:VpcSourceIP 条件结合使用,您必须将 Amazon S3 的 VPC 网关端点连接到 EC2 实例子网的路由表。端点必须与存储桶位于同一区域。
限制访问特定的公有 IP 地址
要仅允许来自您指定的公有 IP 地址的流量,请在存储桶策略中使用 aws:SourceIp 密钥。以下示例存储桶策略拒绝对存储桶的上传权限,除非上传请求来自 11.11.11.11/32 或 22.22.22.22/32 公有 IP 地址:
{ "Id": "SourceIP", "Version": "2012-10-17", "Statement": [ { "Sid": "SourceIP", "Action": "s3:PutObject", "Effect": "Deny", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": [ "11.11.11.11/32", "22.22.22.22/32" ] } }, "Principal": "*" } ] }
要允许同一 AWS 账户中的特定 AWS Identity and Access Management (IAM) 实体访问存储桶,请在策略的条件块中添加 aws:PrincipalArn 密钥:
"Condition": { "ArnNotLike": { "aws:PrincipalArn": [ "arn:aws:iam::123456789012:role/role-name", "arn:aws:iam::123456789012:user/user-name", "arn:aws:iam::123456789012:root" ] } }
要允许用户使用 VPC 端点或 IP 地址对存储桶执行 S3 操作,请明确允许用户级别的权限。您可以修改 IAM 策略或存储桶策略中的其他语句,以允许用户级别的权限。

