仅允许CloudFront从原始服务器读取?

时间:2014-01-31 06:13:16

标签: amazon-ec2 amazon-cloudfront

我在CloudFront(而不是s3)上使用带有签名URL的原始服务器。我需要一种方法来确保对我的服务器的请求仅来自CloudFront。也就是说,一种阻止某人绕过CloudFront并直接在我的服务器上请求资源的方法。怎么办呢?

3 个答案:

答案 0 :(得分:1)

根据文档,还没有支持。我唯一能想到的是你可以限制更多的访问权限,尽管不完全只是允许亚马逊IP地址到你的网络服务器。他们应该能够提供给他们(IP地址范围),因为他们已经提供给我们。

这就是文档所说的:

将HTTP服务器用于私有内容

您可以对任何CloudFront分配使用签名URL,无论源是Amazon S3存储桶还是HTTP服务器。但是,要使CloudFront访问HTTP服务器上的对象,对象必须保持可公开访问。由于对象是可公开访问的,因此在HTTP服务器上具有对象URL的任何人都可以访问该对象,而不受CloudFront签名URL提供的保护。如果您使用签名URL并且您的源是HTTP服务器,请不要将HTTP服务器上的对象的URL提供给您的客户或组织外的其他人。

答案 1 :(得分:1)

我刚刚为自己做了这件事,并且认为我在这里开始搜索的地方留下答案。

这里有你需要输入.htaccess的几行(假设你已经打开了重写引擎):

 RewriteCond %{HTTP_HOST} ^www-origin\.example\.com [NC]
 RewriteCond %{HTTP_USER_AGENT} !^Amazon\ CloudFront$ [NC]
 RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

这会将所有访问者重定向到您的Cloudfront分发版 - {3} {3}示例 - 并且只允许www-origin.example.com适用于Amazon CloudFront。如果您的网站代码也在不同的URL(例如开发或登台服务器)上,那么这不会妨碍。

注意:用户代理是可猜测和可欺骗的;更安全的实现方法是在Cloudfront中设置自定义HTTP标头,并在.htaccess中检查其值。

答案 2 :(得分:0)

我最终创建了 3 个仅填充 CloudFront IP 地址的安全组。

我在这个 list of IPs 上找到了 AWS docs page

如果您只想将 IP 范围复制并粘贴到控制台中,您可以使用我创建的这个列表:

区域: 13.113.196.64/26, 13.113.203.0/24, 52.199.127.192/26, 13.124.199.0/24, 3.35.130.128/25, 52.78.247.128/26, 13.233.177.192/26, 15.207.13.128/25, 15.207.213.128/25, 52.66.194.128/26, 13.228.69.0/24, 52.220.191.0/26, 13.210.67.128/26, 13.54.63.128/26, 99.79.169.0/24, 18.192.142.0/23, 35.158.136.0/24, 52.57.254.0/24, 13.48.32.0/24, 18.200.212.0/23, 52.212.248.0/26, 3.10.17.128/25, 3.11.53.0/24, 52.56.127.0/25, 15.188.184.0/24, 52.47.139.0/24, 18.229.220.192/26, 54.233.255.128/26, 3.231.2.0/25, 3.234.232.224/27, 3.236.169.192/26, 3.236.48.0/23, 34.195.252.0/24, 34.226.14.0/24, 13.59.250.0/26, 18.216.170.128/25, 3.128.93.0/24, 3.134.215.0/24, 52.15.127.128/26, 3.101.158.0/23, 52.52.191.128/26, 34.216.51.0/25, 34.223.12.224/27, 34.223.80.192/26, 35.162.63.192/26, 35.167.191.128/26, 44.227.178.0/24, 44.234.108.128/25, 44.234.90.252/30

全球: 120.52.22.96/27, 205.251.249.0/24, 180.163.57.128/26, 204.246.168.0/22, 205.251.252.0/23, 54.192.0.0/16, 204.246.173.0/24, 54.230.200.0/21, 120.253.240.192/26, 116.129.226.128/26, 130.176.0.0/17, 99.86.0.0/16, 205.251.200.0/21, 223.71.71.128/25, 13.32.0.0/15, 120.253.245.128/26, 13.224.0.0/14, 70.132.0.0/18, 13.249.0.0/16, 205.251.208.0/20, 65.9.128.0/18, 130.176.128.0/18, 58.254.138.0/25, 54.230.208.0/20, 116.129.226.0/25, 52.222.128.0/17, 64.252.128.0/18, 205.251.254.0/24, 54.230.224.0/19, 71.152.0.0/17, 216.137.32.0/19, 204.246.172.0/24, 120.52.39.128/27, 118.193.97.64/26, 223.71.71.96/27, 54.240.128.0/18, 205.251.250.0/23, 180.163.57.0/25, 52.46.0.0/18, 223.71.11.0/27, 52.82.128.0/19, 54.230.0.0/17, 54.230.128.0/18, 54.239.128.0/18, 130.176.224.0/20, 36.103.232.128/26, 52.84.0.0/15, 143.204.0.0/16, 144.220.0.0/16, 120.52.153.192/26, 119.147.182.0/25, 120.232.236.0/25, 54.182.0.0/16, 58.254.138.128/26, 120.253.245.192/27, 54.239.192.0/19, 18.64.0.0/14, 120.52.12.64/26, 99.84.0.0/16, 130.176.192.0/19, 52.124.128.0/17, 204.246.164.0/22, 13.35.0.0/16, 204.246.174.0/23, 36.103.232.0/25, 119.147.182.128/26, 118.193.97.128/25, 120.232.236.128/26, 204.246.176.0/20, 65.8.0.0/16, 65.9.0.0/17, 120.253.241.160/27, 64.252.64.0/18

我想指出的是,默认情况下,安全组每个最多只允许 60 个入站和出站规则,这就是我将这些 122 个 IP 拆分为 3 个安全组的原因。

创建 3 个安全组后,将它们附加到您的 EC2(您可以将多个安全组附加到一个 EC2)。我离开了 EC2 的默认安全组,只允许来自我的 IP 地址的 SSH 流量。

那你就可以出发了!这会强制用户使用您的 CloudFront 分配并保持您的 EC2 的 IP/DNS 私有。