在 Django 中传递 S3 headers 的正确方法是什么?
What is the correct way of passing S3 headers inside Django?
我在我的 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,
}
但是一旦我添加这些 headers 我就开始收到以下错误。
[Error 104] Connection Reset by Peer
文件上传在没有 headers 的情况下工作正常。
我不明白为什么会这样?
如果需要更多详细信息,请告诉我。
简短回答:由于 boto2 实施已过时,您使用的包装器不支持自定义加密密钥。
长答案:
这里是S3BotoStorage. Now here come the puzzle of how boto2 saving file的来源。你在哪里找到 header?所以我看到他们建议这样
AWS_HEADERS = {
'Expires': 'Thu, 15 Apr 2010 20:00:00 GMT',
'Cache-Control': 'max-age=86400',
}
没有加密 headers 传递给 boto 的示例。您提供的 header 用于 REST API,而不是 S3BotoStorage 包装器。因此,您可能只能使用它而忘记为加密算法设置 AWS_HEADERS,提供自定义加密密钥。
而令人困惑的部分是,在 boto2 中,S3 object 名称是调用密钥(在 boto3 中,他们对其进行了改进并显式调用它 key_name)。这与加密密钥无关。
我在我的 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,
}
但是一旦我添加这些 headers 我就开始收到以下错误。
[Error 104] Connection Reset by Peer
文件上传在没有 headers 的情况下工作正常。
我不明白为什么会这样?
如果需要更多详细信息,请告诉我。
简短回答:由于 boto2 实施已过时,您使用的包装器不支持自定义加密密钥。
长答案: 这里是S3BotoStorage. Now here come the puzzle of how boto2 saving file的来源。你在哪里找到 header?所以我看到他们建议这样
AWS_HEADERS = {
'Expires': 'Thu, 15 Apr 2010 20:00:00 GMT',
'Cache-Control': 'max-age=86400',
}
没有加密 headers 传递给 boto 的示例。您提供的 header 用于 REST API,而不是 S3BotoStorage 包装器。因此,您可能只能使用它而忘记为加密算法设置 AWS_HEADERS,提供自定义加密密钥。
而令人困惑的部分是,在 boto2 中,S3 object 名称是调用密钥(在 boto3 中,他们对其进行了改进并显式调用它 key_name)。这与加密密钥无关。