nav-img
Evolution

SSE-KMS

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

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

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

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

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

В ответ Object Storage получит две версии ключа:

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

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

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

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

В ответ Object Storage получает ключ в открытом виде, который использует для дешифрования данных.

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

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

Внимание

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

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

Чтобы зашифровать данные в 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