我正在尝试使用和强制amazon s3服务器端加密。我按照他们的文档创建了以下桶策略:
{
"Version":"2012-10-17",
"Id":"PutObjPolicy",
"Statement":[{
"Sid":"DenyUnEncryptedObjectUploads",
"Effect":"Deny",
"Principal":"*",
"Action":"s3:PutObject",
"Resource":"arn:aws:s3:::YourBucket/*",
"Condition":{
"StringNotEquals":{
"s3:x-amz-server-side-encryption":"AES256"
}
}
}
]
}
我正在使用python boto包,当我添加x-amz-server-side-encryption
头时,它的工作就像一个魅力。
问题是应用程序中有几个地方使用HTML表单的post请求来上传文件到s3。
我已经设法添加了x-amz-server-side-encryption
头和文件上传。然而,当检查amazon后端控制台时,我可以看到这些文件是而不是加密的。
有人知道我做错了什么吗?我也试图通过x-amz-server-side-encryption
作为一个表单字段,但它没有帮助。有趣的部分是,当我删除x-amz-server-side-encryption
标头时,请求因"访问拒绝"原因失败。
解决方案是将x-amz-server-side-encryption
添加到策略对象中。
POLICY = """{'expiration': '2016-01-01T00:00:00Z',
'conditions': [
{'bucket': 'my_bucket'},
['starts-with', '$key', '%s/'],
{'acl': 'public-read'},
['starts-with', '$Content-Type', ''],
['content-length-range', 0, 314572800],
{'x-amz-server-side-encryption': 'AES256'}
]
}"""
并添加值为"AES256"的'x-amz-server-side-encryption'表单字段。在本例中,不需要将其添加为标题