有没有办法在不使用签名URL的情况下防止Amazon S3上的热链接?
有没有办法在不使用签名URL的情况下防止Amazon S3上的热链接?
你需要一个桶策略,既允许来自你的域名的引用者,又拒绝不来自你的域名的引用者。我发现,如果不包含明确的否定,图片可能会被热链接 - 许多指南和示例只提供允许策略,不提及拒绝部分。
这是我的策略,请将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/*"
]
}
}
}
]
}
你可以在他们的官方文档中查看。
将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实例并通过它进行代理。