我只想允许来自特定 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 策略或存储桶策略中的其他语句,以允许用户级别的权限。