2016-05-16 25 views
0

我在我的django应用程序中使用S3BotoStorage作为我的DEFAULT_FILE_STORAGE。所以我上传到我的应用程序的所有文件都上传到S3存储桶。 我想使用SSE-C对我的文件进行加密,所以我遵循AWS提供的文档here。我添加以下行到我的settings.py在Django中传递S3头文件的正确方法是什么?

# 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

由于您正在使用第三方调用API,因此您应该检查并利用代码库参数,因为它会覆盖并忽略它不理解的内容。并在源中搜索“加密”: https://github.com/jschneier/django-storages/blob/master/storages/backends/s3boto.py,看起来你只需要启用一个参数。 – mootmoot

+0

@mootmoot感谢您指出了这一点,但我已经启用了您正在讨论的参数。我已更新问题描述。 – Darwesh

+0

请说明您是要使用自己的加密密钥还是使用S3加密? – mootmoot

回答

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)。这与加密密钥无关。

相关问题