【问题标题】:How to hide AWS S3 Bucket URL with custom CNAME如何使用自定义 CNAME 隐藏 AWS S3 存储桶 URL
【发布时间】:2019-02-15 07:45:21
【问题描述】:

我想将 CDN 连接到 AWS S3 存储桶,但 AWS Document 表示存储桶名称必须与 CNAME 相同。因此,很容易被别人猜到真正的 s3 bucket url。

例如,

- My domain: example.com  
- My S3 Bucket name: image.example.com  
- My CDN CNAME(image.example.com) will point to image.example.com.s3.amazonaws.com

之后,人们可以访问 CDN URL -> http://image.example.com 以从我的 S3 Bucket 中获取资源。但是,在这个限制下,人们可以很容易地从 CNAME (CNAME + s3.amazonaws.com) 中猜出我真实的 S3 存储桶 url。

所以,我的问题是如何隐藏我真正的 s3 存储桶 url?因为我不想将我的真实 S3 url 暴露给任何人以防止任何攻击。

【问题讨论】:

  • 从 image.example.com/resource 和 image.example.com.s3.amazonaws.com/resource 获取资源的人有什么区别?隐藏域名有什么帮助?
  • @kichik 可能是因为您不想公开您的存储桶的真实姓名,这唯一且专门帮助您了解其用途。这就是为什么当您需要处理许多存储桶/resources_of_the_same_type 时必须使用有意义的名称

标签: amazon-web-services amazon-s3 cdn


【解决方案1】:

我不确定我是否理解您的要求或您想要做什么 [隐藏您的存储桶并没有真正帮助任何事情],但是我会尝试回答您关于“隐藏”您的存储桶名称的问题。在回答之前,我想问两个问题:

  • 为什么要隐藏 S3 存储桶 URL?
  • 您要防止什么样的攻击?

您是正确的,S3 存储桶名称必须与您的 URL 相同。这不再是要求,因为您可以使用 cloudfront 屏蔽 S3 存储桶。如您所知,CloudFront 是 AWS 的 CDN。因此存储桶名称可以是任何东西(随机字符串)。

您可以限制对存储桶的访问,以便只有 CloudFront 可以访问它。然后将存储桶中的数据复制到边缘位置并从那里提供服务。即使知道 S3 URL,它也不会做任何事情,因为对 s3 存储桶的访问受到限制,IAM 规则授予 CloudFront 访问权限,而没有其他人。

访问限制是通过源访问完成的,虽然您可以使用存储桶策略手动配置它,但您也可以在 CloudFront 中设置一个标志来代表您执行此操作。更多信息请见here

在 Route53 中使用 CloudFront 名称。不要使用 CNAME,而是使用 A 类型,并将其设置为别名。有关更多信息,请参阅document

如果您使用不同的 DNS 提供商,AWS 别名自然不可用。我建议将区域文件从您的其他提供商移动到 AWS。如果您不能这样做,那么您仍然可以使用 CNAME。再次查看here了解更多信息。

我建议使用您自己的 CloudFront 域名并设置 HTTPS。 AWS 为 AWS 内的服务免费提供证书。您可以为您的域名注册一个由 DNS 条目或电子邮件验证的证书。要进行此设置,请参阅此document

如果您想限制对 AWS 中特定文件的访问,您可以使用签名 URL。更多信息请见here

【讨论】:

    猜你喜欢
    • 2020-04-05
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2019-01-27
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多