如何指定我的 Amazon S3 存储桶可以访问的 VPC 终端节点或 IP 地址?

上次更新时间:2020 年 3 月 9 日

除来自特定 Amazon Virtual Private Cloud (VPC) 终端节点或特定外部 IP 地址的流量外,我想阻止所有指向我的 Amazon Simple Storage Service (Amazon S3) 存储桶的流量。或者,我正在使用存储桶托管一个静态网站并且希望只可通过特定 VPC 终端节点或 IP 地址访问该网站。该如何操作?

解决方案

使用存储桶策略指定可以访问 S3 存储桶的 VPC 终端节点外部 IP 地址

注意:外部 IP 地址是一个公共 IP 地址,可以在 VPC 内或 VPC 外。例如,外部 IP 地址可以是 Amazon Elastic Compute Cloud (Amazon EC2) 实例的弹性 IP 地址,或 VPC 的 NAT 网关或代理服务器的 IP 地址。

例如,以下存储桶策略将阻止指向该存储桶的流量,除非访问请求来自指定的 VPC 终端节点 (aws:sourceVpce) 或外部 IP 地址 (aws:SourceIp)。请注意以下各项:

警告:此示例存储桶策略显式拒绝对允许的 VPC 终端节点或 IP 地址之外的任何访问请求。如果未满足条件,即便用户已输入存储桶策略也会被拒绝访问存储桶。您必须先仔细检查存储桶策略,然后再进行保存。如果您被意外锁定,请参阅我意外拒绝了所有人对我的 Amazon S3 存储桶的访问。我如何重新获取访问权?

{
  "Version": "2012-10-17",
  "Id": "VPCe and SourceIP",
  "Statement": [{
    "Sid": "VPCe and SourceIP",
    "Effect": "Deny",
    "Principal": "*",
    "Action": "s3:*",
    "Resource": [
      "arn:aws:s3:::awsexamplebucket",
      "arn:aws:s3:::awsexamplebucket/*"
    ],
    "Condition": {
      "StringNotEquals": {
        "aws:sourceVpce": [
          "vpce-1111111",
          "vpce-2222222"
        ]
      },
      "NotIpAddress": {
        "aws:SourceIp": [
          "11.11.11.11/32",
          "22.22.22.22/32"
        ]
      }
    }
  }]
}

如果您必须允许特定用户(位于相同 AWS 账户内)访问存储桶,即便该用户不是从允许的 VPC 终端节点或 IP 地址发送请求,则您可以在存储桶策略的相同条件块内包括以下语句:

  • AROAEXAMPLEID 是想要允许的 IAM 角色的角色 ID
  • AIDAEXAMPLEID 是想要允许的 IAM 用户的用户 ID
  • 111111111111 是存储桶的 AWS 账户 ID,代表账户的根凭据
"StringNotLike": {
"aws:userId": [
"AROAEXAMPLEID:*",
"AIDAEXAMPLEID",
"111111111111"
]
}

有关授权对特定 IAM 角色的访问权限的更多信息,请参阅如何将 Amazon S3 存储桶访问权限限制为特定 IAM 角色


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?