用 Amazon S3 和 Cloudfront 做防盗链
前言,因为一个网站上面的部分静态图片当时放在了 aws 的 S3 上面,后来陆续发现有信用卡扣款,查看了 aws 的账单发现,属于S3 和 Cloudfront 的流量导致。
因为之前没有设置访问权限,也就意味着图片链接被人拿走在任意网站或者其他地方随处访问,总所周知 aws 的速度很快,所以导致流失流量也比较快。
所以就相当了采用防盗链来防止资源外链,这里顺便说一下,S3 防盗链设置不同于国内比如说阿里云的 os ,以及七牛等类似的对象存储,因为国内都是直接可以采用选项来设置的,就是说很非常简单方便,但是 S3 不同,他需要自己编写存储桶策略来编写。
还有顺便提下,全球大部分做云计算的基本都是抄袭 aws ,包括功能啊,文档啊等,这也就是为什么 aws 目前是全球云计算份额最大的企业了。
设置参考网站:https://s3browser.com/working-with-amazon-s3-bucket-policies.php
阅读了部分 aws 的部分策略文档,真心感叹强大。
接下来开始设置:
进入存储桶,然后先选择‘阻止公共访问权限’至右边的编辑将阻止全部公共访问权限打开勾选。
然后选择选择存储桶策略填入以下内容:
{
"Version": "2012-10-17",
"Id": "PreventHotLinking",
"Statement": [
{
"Sid": "Allow get requests originated from www.xx.com xx.com www.cc.com and cc.com",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::buckets/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"http://www.xx.com/*",
"http://xx.com/*",
"https://www.xx.com/*",
"https://xx.com/*",
"http://www.cc.com/*",
"http://cc.com/*",
"https://www.cc.com/*",
"https://cc.com/*"
]
}
}
}
]
}
官方只给出了不带 https 的配额范例,我想着因为我的站点全部都带 https,于是我就多加了几个域名在里面。
然后在进行资源测试访问,访问过的因为带缓存,所以请清除缓存测试。
资源链接打开会出现以下错误:
以上是一个简单的防盗链策略设置。