我使用boto
库开发了一个Python脚本,将文件上传到我的S3存储桶。使用Key.set_contents_from_filename
方法上传文件时,我指定Cache-Control
和Expires
标头以启用正确的浏览器缓存。这一切都运行正常,文件显示在我的桶中,并在元数据字段中设置了正确的标题。
为了防止我的文件热链接,我在S3中添加了以下存储桶策略:
{
"Version": "2008-10-17",
"Id": "MySite",
"Statement": [
{
"Sid": "Deny access if not specified referrer",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::mybucket/*",
"Condition": {
"StringNotLike": {
"aws:Referer": [
"http://www.mysite.com/*",
"http://mysite.com/*"
]
}
}
}
]
}
此政策有助于防止热链接,但现在当我使用boto上传文件时,Cache-Control
和Expires
标头未设置。删除存储桶策略可以解决问题,因此我显然没有正确指定存储桶策略。
有关如何修改我的存储桶策略以允许使用boto上传元数据字段同时仍然阻止热链接的任何想法?
答案 0 :(得分:0)
我自己没有测试过标题。但也许问题在于Referer标题。我建议您添加此策略,允许使用Referer将get和put对象添加到您的存储桶中。
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowFromReferer",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::745684876799:user/IAM_USER"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::BUCKET_NAME/*",
"Condition": {
"StringLike": {
"aws:Referer": [
"http://mysite.com/*",
"http://www.mysite.com/*"
]
}
}
}
]
}
如果失败,您可以认为问题出在Referer上。只使用*作为referer,如果它工作正常,那么它肯定是你的Referer问题。