Authentication 使用AWS CloudFront时,如何对公众隐藏自定义源服务器?

Authentication 使用AWS CloudFront时,如何对公众隐藏自定义源服务器?,authentication,cdn,reverse-proxy,amazon-cloudfront,proxy-authentication,Authentication,Cdn,Reverse Proxy,Amazon Cloudfront,Proxy Authentication,我不确定这是否完全符合StackOverflow的要求,但由于我需要通过编程来实现这一点,而且我认为很多人都在使用CloudFront,所以我认为它确实。。。下面是: 我想隐藏对自定义源服务器的公共访问 CloudFront来自自定义源代码,但是我找不到阻止用户在CloudFront后面代理时直接请求我的源代码的文档或任何类型的示例,除非我的源代码是S3。。。这与自定义来源不同 我可以使用什么技术来识别/验证请求是通过CloudFront代理的,而不是由客户端直接请求的 CloudFront文档

我不确定这是否完全符合StackOverflow的要求,但由于我需要通过编程来实现这一点,而且我认为很多人都在使用CloudFront,所以我认为它确实。。。下面是:

我想隐藏对自定义源服务器的公共访问

CloudFront来自自定义源代码,但是我找不到阻止用户在CloudFront后面代理时直接请求我的源代码的文档或任何类型的示例,除非我的源代码是S3。。。这与自定义来源不同

我可以使用什么技术来识别/验证请求是通过CloudFront代理的,而不是由客户端直接请求的

CloudFront文档仅在与S3源站一起使用时介绍这种情况。列出CloudFront IP地址的AWS论坛帖子有一个免责声明,该列表不保证是最新的,不应被依赖。看


我假设任何使用CloudFront的人都可以通过某种方式隐藏他们的自定义源代码,以防直接请求/爬虫。如果能给我一些建议,我将不胜感激。谢谢。

我建议使用类似于facebook的robots.txt的东西,以防止所有爬虫访问您网站中的所有敏感内容

(您可能需要稍微调整一下)

之后,只需指向你的应用程序。。(如Rails)作为自定义源服务器

现在重写站点上的所有URL,使其成为绝对URL,如:

基本上,所有URL都应该指向cloudfront发行版。现在,如果有人从请求文件,但该文件没有hello.html。。它可以从您的服务器(通过https等加密通道)获取它,然后将其提供给用户

因此,即使用户没有查看源,他们也不知道您的源服务器。。。只知道你的cloudfront分布

有关在此设置的更多详细信息:


[我知道这个帖子很老了,但我是为像我这样几个月后看到它的人回答的。]

从我阅读和看到的情况来看,CloudFront在请求中并不一致地标识自己。但是您可以通过覆盖CloudFront发行版中的robots.txt来解决这个问题

1) 创建一个只包含一个文件的新S3存储桶:robots.txt。这将是您的CloudFront域的robots.txt

2) 转到AWS控制台中的分发设置,然后单击创建原点。把桶加上

3) 转到“行为”,然后单击“创建行为”: 路径模式:robots.txt 产地:(你的新水桶)

4) 将robots.txt行为设置为较高的优先级(较低的数字)

5) 转到invalidations和invalidate/robots.txt

现在abc123.cloudfront.net/robots.txt将从桶中提供服务,其他所有内容将从您的域中提供。您可以独立选择允许/不允许在任一级别进行爬网


另一个域/子域也可以代替bucket工作,但是为什么要麻烦呢。

创建一个只有CloudFront使用的自定义CNAME。在您自己的服务器上,阻止任何非来自该CNAME的静态资产请求

例如,如果您的站点设置了一个CNAME,该CNAME指向完全相同的位置,并将该新域放在CloudFront中作为原始拉取服务器。然后,根据请求,您可以判断它是否来自CloudFront,并根据需要执行任何操作


不利的一面是,这是通过默默无闻的安全。客户从未看到请求,但这并不意味着他们无法找到解决方法。

感谢您的回复。但这并不能真正解决我问题中的问题,因为源站仍然会提供直接请求,而不是将它们重定向到CDN。Cloudfront基本上是作为站点的缓存。。如果html文件中的所有链接指向cloudfront域上的其他资源。。您的Web服务器可以提供的唯一请求是domain.com/index.html。。现在,查看代码的人可以在html页面中对cloudfront URL进行反向工程。。说链接到。。。然后尝试从www.domain.com/index2.html手动请求。。但是只有想查看源代码并增加服务器负载的用户才能这样做。。不是搜索机器人。你可以做的另一件事是只列出从亚马逊主机名到你服务器的连接。因此,除了AmazonCloudFront之外,没有人可以直接访问服务器上的任何文件(home.html除外)。这是特定于服务器的,apache的配置与thin或unicorn不同。您可能会发现这很有用>