使用AWS CloudFront时,如何从公共隐藏自定义源服务器?

时间:2012-10-26 19:45:50

标签: authentication cdn reverse-proxy amazon-cloudfront proxy-authentication

我不确定这是否完全符合StackOverflow的要求,但由于我需要以编程方式执行此操作,并且我认为很多人使用CloudFront,我认为它确实......所以这里有:

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

CloudFront来自自定义来源,但是我无法找到文档或任何类型的例子来阻止用户在CloudFront后面代理时直接请求我的来源,除非我的来源是S3 ...这不是自定义的情况原点。

我可以使用哪种技术来识别/验证通过CloudFront代理请求而不是客户端直接请求?

CloudFront文档仅在与S3原点一起使用时才涵盖此案例。列出CloudFront IP地址的AWS论坛帖子有一个免责声明,该列表不保证是最新的,不应该依赖。见https://forums.aws.amazon.com/ann.jspa?annID=910

我认为使用CloudFront的任何人都有某种方式来隐藏自定义来源直接请求/抓取工具。我很感激能让我入手的任何提示。感谢。

3 个答案:

答案 0 :(得分:0)

我建议使用类似于facebook的robots.txt的内容,以防止所有抓取工具访问您网站中的所有敏感内容。

https://www.facebook.com/robots.txt(您可能需要稍微调整一下)

之后,只需将您的应用程序...(例如Rails)指向自定义原始服务器。

现在重写您网站上的所有网址,成为绝对网址:

https://d2d3cu3tt4cei5.cloudfront.net/hello.html

基本上所有网址都应指向您的云端分发。现在,如果有人从https://d2d3cu3tt4cei5.cloudfront.net/hello.html请求文件并且它没有hello.html ..它可以从您的服务器(通过https等加密通道)获取它,然后将其提供给用户。

因此,即使用户使用了查看源,他们也不知道您的源服务器......只知道您的云端分发。

有关在此设置此内容的详细信息:

http://blog.codeship.io/2012/05/18/Assets-Sprites-CDN.html

答案 1 :(得分:0)

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

例如,如果您的网站为http://abc.mydomain.net,则为http://xyz.mydomain.net设置指向完全相同位置的CNAME,并将该新域放入CloudFront作为原始拉取服务器。然后,根据请求,您可以判断它是否来自CloudFront,并执行您想要的任何操作。

缺点是这是通过默默无闻的安全。客户从未看到http://xyzy.mydomain.net的请求,但这并不意味着他们无法通过某种方式解决问题。

答案 2 :(得分:-1)

[我知道这个帖子已经过时了,但我正在为像我这样几个月后才能看到它的人回答。]

从我所阅读和看到的内容来看,CloudFront并未在请求中始终如一地标识自己。但您可以通过覆盖CloudFront分发版的robots.txt来解决此问题。

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

2)转到AWS控制台中的分配设置,然后单击“创建原点”。添加桶。

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

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

5)转到失效并使/robots.txt无效。

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

另一个域/子域也可以代替存储桶,但为什么会遇到麻烦。