我在我的django应用中使用S3BotoStorage
作为我的DEFAULT_FILE_STORAGE
。因此,我上传到我的应用程序的所有文件都上传到S3存储桶。
我想使用SSE-C加密我的文件,因此我遵循AWS提供的文档here。我在settings.py
# settings.py
AWS_S3_ENCRYPTION = True
key = ...
key_md5 = ...
AWS_HEADERS = {
'x-amz-server-side-encryption-customer-algorithm': 'AES256',
'x-amz-server-side-encryption-customer-key': key,
'x-amz-server-side-encryption-customer-key-MD5': key_md5,
}
但是只要我添加这些标题,我就会收到以下错误。
[Error 104] Connection Reset by Peer
文件上传工作正常,没有标题。
我不知道为什么会这样?
如果需要更多细节,请告诉我。
答案 0 :(得分:1)
简短回答:由于过时的boto2实现,您使用的包装器不支持自定义加密密钥。
答案很长: 这是S3BotoStorage的来源。现在来到how boto2 saving file的难题。你在哪里找到标题?所以我看到他们建议这样的事情
AWS_HEADERS = {
'Expires': 'Thu, 15 Apr 2010 20:00:00 GMT',
'Cache-Control': 'max-age=86400',
}
没有传递给boto的加密标头的示例。您给出的标头是REST API,而不是S3BotoStorage包装器。因此,您可能只能使用此功能而忘记为加密算法设置AWS_HEADERS,并提供自定义加密密钥。
令人困惑的部分是,在boto2中,S3对象名称是调用键(在boto3中,它们改进了它并明确地将其命名为key_name)。这与加密密钥无关。