Шифрование на стороне сервера с помощью s3Boto - Шифрование на стороне сервера с помощью управляемого ключа KMS требует HTTP-заголовка x-amz-server-side-encryption: aws:kms
Я пытаюсь настроить шифрование на стороне сервера в моем приложении django для загрузки файлов. Я использую s3Boto3Storage. Я не могу найти четкую документацию о том, как реализовать шифрование на стороне сервера, и при попытке загрузить мой файл я получаю следующую ошибку:
An error occurred (InvalidArgument) when calling the PutObject operation: Server Side Encryption with KMS managed key requires HTTP header x-amz-server-side-encryption : aws:kms
Вот как выглядят мои настройки:
AWS_ACCESS_KEY_ID = 'XXXX'
AWS_SECRET_ACCESS_KEY = 'XXXX'
AWS_STORAGE_BUCKET_NAME = 'tickets'
AWS_S3_ENDPOINT_URL = 'https://sfo2.digitaloceanspaces.com'
AWS_S3_FILE_OVERWRITE = False
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
AWS_LOCATION = ''
AWS_DEFAULT_ACL = None
AWS_S3_ENCRYPTION = True
STATIC_URL = 'https://%s/%s/' % (AWS_S3_ENDPOINT_URL, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
0 ответов
Я считаю, что это говорит вам о том, что вам нужно включить заголовок x-amz-server-side-encryption: aws:kms где-нибудь здесь - возможно, в ваш AWS_S3_OBJECT_PARAMETERS dict.
Если вы пытаетесь использовать собственный CMK для шифрования, вам необходимо структурировать дополнительные заголовки следующим образом:
"ServerSideEncryption": "aws:kms" # This value instructs the request to use a CMK for
# server-side encryption, and requires you to pass your custom CMK id to the value
# for the next param, 'SSEKMSKeyId'.
# The other acceptable value is AES256, which uses the AWS S3 SSE to encrypt, and not a CMK.
"SSEKMSKeyId": "<your kms cmk key id goes here>" # This is the id of your custom CMK.
# This is not required if you set "ServerSideEncryption": "AES256" above.
Соответствующая документация, которую я тоже сначала не получил:
x-amz-server-side-encryption. Алгоритм шифрования на стороне сервера, используемый при сохранении этого объекта в S3 (например, AES256, aws:kms). Допустимые значения: AES256 | aws: кмс
x-amz-server-side-encryption-aws-kms-key-id Если присутствует x-amz-server-side-encryption и имеет значение aws:kms, в этом заголовке указывается идентификатор AWS Key Management Service. (AWS KMS) главный ключ шифрования, который использовался для объекта.
Если значение x-amz-server-side-encryption равно aws:kms, в этом заголовке указывается идентификатор главного ключа шифрования AWS Key Management Service(AWS KMS), который будет использоваться для объекта. Если указать x-amz-server-side-encryption:aws:kms, но не указать x-amz-server-side-encryption-aws-kms-key-id, Amazon S3 использует ключ AWS KMS по умолчанию для защиты данные.
Документация S3 PUT находится здесь: https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html