我可以隐藏 S3 和 Cloudfront 端点吗?

我可以隐藏 S3 和 Cloudfront 端点吗?

我在 AWS S3 上设置了一个静态网站,并使用 AWS Cloudfront 对其进行加速,但之后,我能够使用 AWS Route53 将我的域名连接到 Cloudfront 端点。现在除了域名之外,还有另外两个入口点,S3 和 Cloudfront。

是否可以隐藏 S3 和 Cloudfront 端点from the public这样他们只能通过设置的域名访问网站?

多谢!

答案1

是的,你可以。要隐藏 S3,您可以使用原始访问身份,并且不将 s3 端点暴露给 CloudFront 以外的任何其他服务。

要限制对 CloudFront 的访问,您有两种选择。您可以使用 CloudFront 的私有内容功能并按时间或特定 IP 限制访问。或者,您可以使用 AWS WAF 并阻止对除您要允许的特定 IP 之外的任何源 IP 的访问

答案2

是否可以向公众隐藏 S3 端点,以便他们只能通过设置的域名访问网站?

嗯,据我所知,没有官方的目前还没有解决方案,但有一个解决方法AWS 建议。下面是一个对我来说可行的实现:

  1. 创建 S3 存储桶并启用网站托管。转到权限的存储桶策略部分并输入类似于此的策略:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "PublicReadForGetBucketObjects",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::[YOUR_WEBSITE_BUCKET_NAME]/*",
                "Condition": {
                    "StringEquals": {
                        "aws:Referer": "[SOME_LONG_SECRET_VALUE]"
                        }
                }
            }
        ]
    }
    
  2. 创建 CloudFront 分发并配置:

    1. 以下来源:[YOUR_WEBSITE_BUCKET_NAME].s3-website-[AWS_REGION_NAME].amazonaws.com。寻址值得关注的是,从 CloudFront 的角度来看,这不是 S3 Bucket Origin,而只是一个 Custom Origin。
    2. 以下来源自定义标头:
      • 标头名称:Referer
      • 值:([SOME_LONG_SECRET_VALUE]来自您的存储桶策略)
  3. 照常配置其余 CloudFront 分发设置。

因此,只有当请求包含Referer具有指定密钥值的标头时,存储桶策略才会允许对象 GET,这将阻止直接向您的 S3 网站发送请求并允许通过 CloudFront 发送请求。而且,显然,您可能会不时想到轮换此密钥值。

请注意,通过这样做,CloudFront 将在将Referer任何传入请求转发到原点之前覆盖其标头(如果存在),因此如果您依赖它,则此解决方案将不起作用。

相关内容