SSE-C
SSE-C (Server-Side Encryption with Customer-Provided Keys) — это метод шифрования данных в Object Storage, при котором пользователь предоставляет собственный ключ для шифрования. Ключ используется только во время обработки запроса и не сохраняется в Object Storage, что обеспечивает высокий уровень контроля и безопасности.
Принцип работы
Механизм работы SSE-C:
Пользователь передает ключ шифрования через HTTP-заголовки в запросах к Object Storage. Ключ не сохраняется в Object Storage и не передается по сети после завершения запроса. Ключ существует только в памяти сервера во время обработки запроса.
Данные шифруются перед сохранением и расшифровываются при получении с использованием предоставленного ключа.
Для проверки ключа в случае доступа к объекту используется хранимый SHA-256 HMAC ключа, использовавшийся при загрузке.
Пример генерации ключа и хеша:
secret="32bytesOfTotallyRandomCharacters"key=$(echo -n $secret | base64)keymd5=$(echo -n $secret | openssl dgst -md5 -binary | base64)
Поддерживаемые операции
Примененные к CreateMultipartUpload параметры шифрования должны также быть применены к UploadPart и UploadPartCopy. Если CreateMultipartUpload выполнен без шифрования — все части (парты) также не должны иметь шифрования. Если CreateMultipartUpload выполнен с шифрованием — все части (парты) должны использовать такой же набор параметров шифрования.
Заголовки для SSE-C
Для использования SSE-C укажите в запросе следующие заголовки:
x-amz-server-side-encryption-customer-algorithm — алгоритм шифрования (AES256).
x-amz-server-side-encryption-customer-key— ключ шифрования в формате base64. AES256 поддерживает ключи длиной только 32 байта (256 бит). Эти 32 байта кодируются в base64 для дальнейшей передачи. Если размер ключа до кодирования в base64 превышает 32 байта, система выдаст ошибку 400.
x-amz-server-side-encryption-customer-key-MD5 — MD5-хеш ключа в формате base64. Хэш должен быть посчитан до конвертации в base64.
Примеры запросов в AWS CLI
Загрузка объекта с шифрованием:
secret="32bytesOfTotallyRandomCharacters"key=$(echo -n $secret | base64)keymd5=$(echo -n $secret | openssl dgst -md5 -binary | base64)aws s3api put-object --endpoint-url https://s3.cloud.ru --bucket customer-bucket-name --key customer-object-key --body /Desktop/customer_object.html --sse-customer-algorithm AES256 --sse-customer-key $key --sse-customer-key-md5 $keymd5Выгрузка шифрованного объекта:
aws s3api get-object -endpoint-url https://s3.cloud.ru --bucket customer-bucket-name --key customer-object-key --sse-customer-algorithm AES256 --sse-customer-key $key --sse-customer-key-md5 $keymd5
Если параметр --sse-customer-key-md5 задается вручную, AWS CLI не конвертирует ключ и MD5-хеш в формат base64. Если опустить параметр md5, AWS CLI автоматически сконвертирует ключ и MD5-хеш в формат base64. Это обусловлено поведением библиотеки boto3 по отношению к параметрам шифрования.