【问题标题】:How to disable Amazon S3 raw endpoint access如何禁用 Amazon S3 原始终端节点访问
【发布时间】:2015-02-22 13:49:51
【问题描述】:

假设你想在 S3 上托管一个静态网站:

  1. 您创建一个名为 your-website.com 的存储桶并将其设置为网络托管;
  2. 您在域的区域文件中添加一个 CNAME 以指向您的 S3 存储桶。

太好了。当您访问http://your-website.com 时一切正常。但您不希望原始/“裸”端点可访问。

bucket中是否有任何设置禁止直接访问http://your-website.com.s3-website.your-region.amazonaws.com

原因是如果您的网站可以通过http://your-website.comhttp://your-website.com.s3-website.your-region.amazonaws.com 访问会损害您的搜索引擎优化(重复内容)

【问题讨论】:

  • 不确定这是否可行。您是否阅读过website endpointsvirtual hosting 上的文档?来自前者:“网站端点 - 访问控制 - 仅支持公开可读的内容。”
  • 是的,但找不到任何关于此的“线索”。也许这可以通过在混合中加入一些云端来实现......
  • 这是否只允许 Cloudfront 通过 REST API 而不是网站 API 访问 S3?网站端点具有更多功能(对象级重定向、404 上的 html 正文等)。
  • @redben,你介意解释一下为什么你想这样做吗?另外,disable 到底是什么意思(403?404?50x?30x?200 有错误页面?没有 DNS 解析?...)

标签: amazon-web-services amazon-s3


【解决方案1】:

您提到您主要关心的是搜索引擎优化。为此,您可以使用其他技术,这可能比您最初询问的技术更容易实现。

处理重复内容的主要技术之一是使用rel=canonical,这可能相当容易实现。欲了解更多信息,请参阅http://googlewebmastercentral.blogspot.com.br/2013/04/5-common-mistakes-with-relcanonical.html

如果您坚持需要禁用对存储桶的访问,除非客户端通过您的 CNAME 连接,那么您最好的选择是使用 CloudFront。您禁用存储桶上的 S3 网站托管选项,将 S3 存储桶设为私有(即,删除存储桶策略或允许公开读取的 ACL),创建 CloudFront 分配,将存储桶定义为源,在分配上配置 CNAME,更改您的DNS 记录指向您的分配而不是存储桶,在您的分配上创建 原始访问身份 (OAI) 并授予该 OAI 对您的存储桶的访问权限。唷。

通过执行所有这些操作,用户将无法访问您的 S3 存储桶上的内容(显然,除非他们拥有有权读取存储桶并发送签名请求的 AK/SK)。唯一的方法是通过您的域。

有关源访问身份的更多详细信息,请参阅http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html

【讨论】:

  • 谢谢,这就是我所做的,cloudFront。但是后来我遇到了一个问题,我的存储桶位于仅支持 v4 身份验证的新法兰克福位置(cloudFront 不使用它)。所以我要把我的水桶搬到一个较旧的地方
  • 对于 rel 规范,这不是一个选项,因为我不能保证网站管理员遵守该规则...
  • 我不确定如何完成define your bucket as the origin 的步骤 - 有人能澄清这意味着什么吗?谢谢。
  • @fuzzi -“CloudFront 入门”文档页面显示了如何逐步define your bucket as the origin。检查一下:docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…。干杯!
猜你喜欢
  • 2021-10-01
  • 2021-12-04
  • 2019-09-06
  • 2018-05-30
  • 2021-10-22
  • 2018-12-17
  • 1970-01-01
  • 2014-02-01
  • 1970-01-01
相关资源
最近更新 更多