Облачная платформаEvolution

SSE-KMS


SSE-KMS — метод шифрования данных с использованием криптографического ключа, управляемого сервисом Key Management.

Принцип работы

SSE-KMS в Object Storage реализован согласно методу Envelope Encryption: для каждого объекта используются уникальные KMS-ключи шифрования (DEK), а в базе данных сохраняется зашифрованная версия этих ключей.

При шифровании данных (PutObject, CreateMultipartUpload, CopyObject) Object Storage обращается в Key Management с запросом на генерацию ключа — GenerateDataKey. В ответ Object Storage получает две версии ключа:

  • Зашифрованную — сохраняется в базе данных Object Storage для последующего доступа.

  • В открытом виде — используется для шифрования и дешифрования данных. После выполнения операции удаляется из памяти Object Storage.

В целях безопасности ключ недоступен в открытом виде даже пользователю-владельцу, а в оперативной памяти Object Storage он существует только на время выполнения конкретного запроса.

При дешифровании данных (GetObject, HeadObject, UploadPart, UploadPartCopy, CopyObject) Object Storage обращается в Key Management с запросом Decrypt и сохраненной для этого объекта зашифрованной версией ключа. В ответ Object Storage получает ключ в открытом виде, который использует для дешифрования данных.

Ключ для дешифрования ключа (KEK) хранится только в Key Management и не доступен извне.

Если пользователь не является владельцем KMS-ключа или не имеет нужных прав на него, то даже при наличии разрешения на доступ к самому объекту в Object Storage открыть зашифрованные данные не получится.

Для управления ключами пользователю должна быть назначена одна из сервисных ролей: sckm.admin или sckm.user.

Внимание

Если ключ был удален из Key Management, все данные, зашифрованные с его помощью, станут недоступны.

Шифрование данных

Чтобы зашифровать данные в Object Storage с использованием KMS-ключей:

Примечание

Для шифрования SSE-KMS Object Storage поддерживает только симметричные KMS-ключи.

  1. В Key Management сгенерируйте симметричный KMS-ключ и получите его идентификатор.

  2. При загрузке объекта в бакет укажите идентификатор и способ шифрования 'aws:kms'.

Object Storage автоматически зашифрует данные с помощью ключа в открытом виде соответствующим алгоритмом: AES-128, AES-192 или AES-256.

Объект будет храниться в Object Storage в зашифрованном виде.

Поддерживаемые операции

Ключи поддерживаются следующими операциями:

Заголовки для SSE-KMS

Для использования SSE-KMS укажите в запросе следующие заголовки:

  • x-amz-server-side-encryption-aws-kms-key-id: {kmsKeyID} — идентификатор ключа KMS, который нужно использовать для шифрования загружаемых данных.

  • x-amz-server-side-encryption: aws:kms — запрос SSE-KMS в REST API для добавления объектов в Object Storage.

  • x-amz-server-side-encryption-context — необязательный заголовок в формате закодированной в base64 JSON-строки. Содержит пары ключ:значение и позволяет добавить генерируемому KMS Data-ключу дополнительную информацию для увеличения степени его уникальности.

Примеры запросов в AWS CLI

  • Загрузка объекта с шифрованием:

    aws s3api put-object --bucket amzn-s3-demo-bucket --key example-object-key --server-side-encryption aws:kms --ssekms-key-id example-key-id --body filepath
  • Копирование незашифрованного объекта с включением шифрования копии:

    aws s3api copy-object --bucket amzn-s3-destination-bucket --key example-destination-object-key --copy-source amzn-s3-source-bucket/source-example-object-key --server-side-encryption aws:kms --ssekms-key-id example-key-id