Python S3存储桶策略防止boto设置缓存头
我已经开发了一个Python脚本,使用Python S3存储桶策略防止boto设置缓存头,python,amazon-s3,boto,Python,Amazon S3,Boto,我已经开发了一个Python脚本,使用boto库将文件上传到我的S3存储桶中。使用键.set\u contents\u from\u filename方法上载文件时,我指定缓存控制和过期标题以启用正确的浏览器缓存。这一切都很好,文件显示在我的bucket中,元数据字段中设置了正确的标题 为了防止文件热链接,我在S3中添加了以下bucket策略: { "Version": "2008-10-17", "Id": "MySite", "Statement": [
boto
库将文件上传到我的S3存储桶中。使用键.set\u contents\u from\u filename
方法上载文件时,我指定缓存控制
和过期
标题以启用正确的浏览器缓存。这一切都很好,文件显示在我的bucket中,元数据字段中设置了正确的标题
为了防止文件热链接,我在S3中添加了以下bucket策略:
{
"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
标题未设置。删除bucket策略可以解决问题,因此我显然没有正确指定bucket策略
关于如何修改我的bucket策略以允许使用boto上传元数据字段,同时仍然阻止热链接,有什么想法吗?我自己还没有测试过这些头。但问题可能出在Referer头上。我建议您添加此策略,允许使用Referer获取并将对象放入您的bucket
{
"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上。使用just*作为referer,如果它工作正常,那么肯定是你的referer问题