如何只允许特定的 VPC 端点或 IP 地址访问我的 Amazon S3 存储桶?

2 分钟阅读
0

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

AWS 官方
AWS 官方已更新 1 个月前