有什么方法可以在不提供 public 访问权限的情况下在 AWS S3 上托管静态网站?

Is there any way to host a static wesbite on AWS S3 without giving public access?

我希望在 Amazon S3 上托管一个静态网站,而不实际授予 public 存储桶的访问权限。我正在使用一个客户端 AWS 帐户,其中所有存储桶都被 public 访问阻止,当我尝试将我的存储桶配置为 public 时,它会将我重定向到我必须授予 public 权限的页面] 访问所有存储桶。

关于托管静态站点的 1 个 S3 存储桶,您可以在权限选项卡下添加存储桶策略,允许或禁止 IP 地址。这里有一些很好的例子,我添加了一个允许某些 IP 的简化示例。在这种情况下,授予对其他账户的 VPC NAT 网关 IP 地址的访问权限应该可行。 https://docs.aws.amazon.com/AmazonS3/latest/userguide/example-bucket-policies.html

{
  "Id":"PolicyId54",
  "Version":"2012-10-17",
  "Statement":[
    {
      "Sid":"AllowIPmix",
      "Effect":"Allow",
      "Principal":"*",
      "Action":"s3:*",
      "Resource": [
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET",
        "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*"
      ],
      "Condition": {
        "IpAddress": {
          "aws:SourceIp": [
            "54.240.143.0/24",
            "2001:DB8:1234:5678::/64"
          ]
        }
      }
    }
  ]
}

请注意,您仍然关闭“阻止 public 访问”以及上述政策。

您可以在静态站点前面加上一个 Amazon CloudFront distribution. In addition to providing the benefits of an integrated CDN, you can configure an Origin Access Identity,确保只能通过 CloudFront 访问存储桶,而不能通过 public S3。

与@PaulG 所说的类似,您还可以包含一个包含 sourceVpc 条件的存储桶策略,它允许您为存储桶设置一个 vpc 端点,并且只能从该 VPC 访问该存储桶。我记得几个月前测试过这个设置,它只能从 vpc 访问网站。