nav-img
Evolution

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 по отношению к параметрам шифрования.