Шифрование на стороне сервера с помощью 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

Другие вопросы по тегам