有什么方法可以在不使用签名 URL 的情况下防止 Amazon S3 上的热链接?
7 回答
您需要一个存储桶策略,既允许来自您的域的引用者,又拒绝不来自您的域的引用者。我发现如果您不包含明确的拒绝,图像可以被热链接 - 许多指南和示例只是给出允许策略并且没有提及拒绝部分。
这是我的政策,只需将 BUCKET-NAME 和 YOUR-WEBSITE 更改为您自己的详细信息:
{
"Version": "2008-10-17",
"Id": "",
"Statement": [
{
"Sid": "Allow in my domains",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BUCKET-NAME/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"http://www.YOUR-WEBSITE.com/*"
]
}
}
},
{
"Sid": "Deny access if referer is not my sites",
"Effect": "Deny",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::BUCKET-NAME/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"http://www.YOUR-WEBSITE.com/*"
]
}
}
}
]
}
通过设置正确的 S3 存储桶策略,您可以添加引用策略以防止盗链。
http://s3browser.com/working-with-amazon-s3-bucket-policies.php
我使用 Apache RewriteMap 重新映射相关链接以选择文件扩展名 - *.jpg、*.gif、*swf、*.fla 到 Cloudfront。基本上使您的图像的网址显示为您网站的相对链接。它并不能完全阻止 S3/cloudfront url 的发现,只是为可能的小偷增加了一层难度。
可能值得一试,使用上述方法通过 htaccess 应用热链接限制。我自己没试过。
在他们的官方文档中
更改examplebucket
为您的存储桶名称和example.com
您的域。
"Version":"2012-10-17",
"Id":"http referer policy example",
"Statement":[
{
"Sid":"Allow get requests originating from www.example.com and example.com.",
"Effect":"Allow",
"Principal":"*",
"Action":"s3:GetObject",
"Resource":"arn:aws:s3:::examplebucket/*",
"Condition":{
"StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]}
}
}
]
}
这里有一个很好的教程。请务必查看评论,因为网站代码中有一个空格字符会导致解决方案不起作用。
盗链是亚马逊创建 Cloudfront 的原因之一。Cloudfront 要快得多。我写了一篇关于它的文章,你可以看看这里。
http://blog.sat.iit.edu/2011/12/amazon-aws-s3-vs-cloudwatch-performance-grudgematch/
编辑:S3 和 Cloudfront 都使用相同类型的存储桶策略来确保请求来自正确的 url。Cloudfront 仍然更快。
并不真地。您可以通过它运行 EC2 实例和代理。