0

我开发了一个 Python 脚本,使用该boto库将文件上传到我的 S3 存储桶。使用该Key.set_contents_from_filename方法上传文件时,我指定Cache-ControlExpires标头以启用适当的浏览器缓存。这一切都很好,文件出现在我的存储桶中,并在元数据字段中设置了正确的标题。

为了防止我的文件被盗链接,我在 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-ControlExpires没有设置和标头。删除存储桶策略可以解决问题,因此我显然没有正确指定存储桶策略。

关于如何修改我的存储桶策略以允许使用 boto 上传元数据字段同时仍防止盗链的任何想法?

4

1 回答 1

0

我自己没有测试过标题。但也许问题出在Referer 标头上。我建议您添加此策略,允许使用Referer 获取和放置对象到您的存储桶。

{
"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。只使用 * 作为推荐人,如果它工作正常,那么这绝对是您的推荐人问题。

于 2013-06-25T09:22:05.913 回答