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-ключей:
В Key Management сгенерируйте KMS-ключ (симметричный или асимметричный) и получите его идентификатор (симметричного ключа или асимметричного ключа).
При загрузке объекта в бакет укажите идентификатор и способ шифрования '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
- Принцип работы
- Шифрование данных
- Поддерживаемые операции
- Заголовки для SSE-KMS
- Примеры запросов в AWS CLI