S3 只允许加密策略不起作用
S3 allow only encrypted policy doesn't work
我正在使用示例 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 返回了一个 "access denied"。如果我删除该策略(它是存储桶中唯一的一组),它就会起作用。预签名的 URL 看起来像
'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。
您可能无法将 SSE 指定为 PUT 的一部分,或者条件在 pre-signed URL 上不可用,因为它只查看 headers.
我通过从表单上传(使用 POST)和阻止上传的策略 kicks-in 进行了测试,因为它没有 server-side 加密,但没有办法将加密指定为 FORM-based 上传的一部分。
但是,您提供的策略成功阻止了通过其他方法上传,除非它们指定了 SSE。
我正在使用示例 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 返回了一个 "access denied"。如果我删除该策略(它是存储桶中唯一的一组),它就会起作用。预签名的 URL 看起来像
'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。
您可能无法将 SSE 指定为 PUT 的一部分,或者条件在 pre-signed URL 上不可用,因为它只查看 headers.
我通过从表单上传(使用 POST)和阻止上传的策略 kicks-in 进行了测试,因为它没有 server-side 加密,但没有办法将加密指定为 FORM-based 上传的一部分。
但是,您提供的策略成功阻止了通过其他方法上传,除非它们指定了 SSE。