Python S3存储桶策略防止boto设置缓存头

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": [

我已经开发了一个Python脚本,使用
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问题