如何只允许特定 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": "*" } ] }
注意: 请将 DOC-EXAMPLE-BUCKET 替换为您的存储桶名称。
要将上述策略与 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": "*" } ] }
注意: 请将 DOC-EXAMPLE-BUCKET 替换为您的存储桶名称。
要将上述策略与 aws:VpcSourceIP 条件结合使用,请为 Amazon S3 创建 VPC 网关端点。将网关端点连接到 EC2 实例子网的路由表。端点必须与存储桶位于同一区域。
限制访问特定的公有 IP 地址或 IP 地址范围
要仅允许来自您指定的公有 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": "*" } ] }
注意: 请将 DOC-EXAMPLE-BUCKET 替换为您的存储桶名称。
除非上传请求来自 192.168.0.0/24 或 172.16.0.0/24 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": [ "192.168.0.0/24", "172.16.0.0/24" ] } }, "Principal": "*" } ] }
注意: 请将 DOC-EXAMPLE-BUCKET 替换为您的存储桶名称。
以下条件块允许同一 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 策略或存储桶策略中的其他语句以允许用户级别的权限。
限制所有 S3 存储桶的访问权限
要限制您账户中所有 S3 存储桶的访问权限,请通过 AWS Organizations 配置服务控制策略 (SCP)。

