我正在尝试使用并强制执行亚马逊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
标头并上传文件。但是,在亚马逊后端控制台检查时,我可以看到这些文件不 加密。
有人知道我做错了什么吗?我还尝试将x-amz-server-side-encryption
作为表单字段传递,但它没有帮助。
有趣的是,当我删除x-amz-server-side-encryption
标头时,请求因“访问拒绝”原因而失败。
答案 0 :(得分:1)
解决方案是将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'}
]
}"""
并添加“x-amz-server-side-encryption”表单字段,其中包含“AES256”值。在这种情况下,无需将其添加为标题