我正在使用示例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。
答案 0 :(得分:1)
您可能无法将SSE指定为PUT的一部分,或者条件在预签名URL上不可用,因为它只查看标题。
我通过从表单上传(使用POST)进行测试,并且策略启动以阻止上传,因为它不是服务器端加密的,但是没有办法将加密指定为基于FORM的上传的一部分
但是,您提供的策略会成功阻止通过其他方法上传,除非他们指定SSE。