S3只允许加密策略不起作用

时间:2015-05-19 18:22:16

标签: amazon-s3

我正在使用示例provided by Amazon禁止上传到没有启用加密的S3,如下所示:

{
"Version": "2012-10-17",
"Id": "PutObjPolicy",
"Statement": [
    {
        "Sid": "DenyUnEncryptedObjectUploads",
        "Effect": "Deny",
        "Principal": "*",
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::mybucket/*",
        "Condition": {
            "StringNotEquals": {
                "s3:x-amz-server-side-encryption": "AES256"
            }
        }
    }
]
}

当我尝试使用预先签名的URL上传时,我从S3获得“拒绝访问”。如果我删除了策略(它是存储桶中唯一设置的),它就可以工作。预签名的网址类似于

'https://mybucket.s3.amazonaws.com/myfile.txt?Signature=6UxyYNjZDLFHlibwx3Aypicx7o4%3D&Expires=1432059554&AWSAccessKeyId=AKI1234567890&x-amz-server-side-encryption=AES256'

出了什么问题?

编辑:我使用AWS boto提供的generate_url函数生成URL。

1 个答案:

答案 0 :(得分:1)

您可能无法将SSE指定为PUT的一部分,或者条件在预签名URL上不可用,因为它只查看标题。

我通过从表单上传(使用POST)进行测试,并且策略启动以阻止上传,因为它不是服务器端加密的,但是没有办法将加密指定为基于FORM的上传的一部分

但是,您提供的策略会成功阻止通过其他方法上传,除非他们指定SSE。