跳至内容

如何只允许特定 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": "*"  
    }  
  ]  
}

注意: 请将 DOC-EXAMPLE-BUCKET 替换为您的存储桶名称。

要将上述策略与 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": "*"  
    }  
  ]  
}

注意: 请将 DOC-EXAMPLE-BUCKET 替换为您的存储桶名称。

要将上述策略与 aws:VpcSourceIP 条件结合使用,请为 Amazon S3 创建 VPC 网关端点。将网关端点连接到 EC2 实例子网的路由表。端点必须与存储桶位于同一区域。

限制访问特定的公有 IP 地址或 IP 地址范围

要仅允许来自您指定的公有 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": "*"  
    }  
  ]  
}

注意: 请将 DOC-EXAMPLE-BUCKET 替换为您的存储桶名称。

除非上传请求来自 192.168.0.0/24172.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)

AWS 官方已更新 8 个月前