5

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

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

CloudFront 从自定义源中提取,但是我找不到文档或任何类型的示例来防止用户在 CloudFront 后面代理时直接向我的源发出请求,除非我的源是 S3 ......自定义源不是这种情况。

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

CloudFront 文档仅涵盖与 S3 源一起使用时的这种情况。列出 CloudFront 的 IP 地址的 AWS 论坛帖子有一个免责声明,即不能保证该列表是最新的,不应依赖该列表。请参阅https://forums.aws.amazon.com/ann.jspa?annID=910

我假设任何使用 CloudFront 的人都有某种方法可以从直接请求/爬虫中隐藏他们的自定义来源。我将不胜感激任何提示让我开始。谢谢。

4

3 回答 3

0

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

例如,如果您的站点是http://abc.mydomain.net ,则为http://xyz.mydomain.net设置一个 CNAME ,指向完全相同的位置,并将该新域放在 CloudFront 中作为源拉服务器. 然后,根据请求,您可以判断它是否来自 CloudFront,然后做任何您想做的事情。

缺点是这是通过默默无闻的安全性。客户端永远不会看到对http://xyzy.mydomain.net的请求,但这并不意味着他们没有办法弄清楚。

于 2014-02-09T23:09:02.347 回答
0

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

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

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

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

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

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

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

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

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

于 2013-01-08T20:19:32.253 回答
-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 将从存储桶提供,其他所有内容都将从您的域提供。您可以单独选择允许/禁止在任一级别进行爬网。

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

于 2013-05-16T05:13:51.833 回答