KMS
Описание
Key Management Service (KMS) - служба шифрования. KMS предоставляет возможность генерации, безопасного хранения и применения ключей шифрования, SSH ключей и интеграции с другими сервисами для обеспечения безопасности данных.
Схема шифрования в NWS имеет иерархическую структуру. Это означает, что можно и нужно генерировать отдельный ключ для шифрования данных для рызных сервисов (S3, RDS). Однако, сами ключи шифрования также являются ценным ресурсом и сами подлежат шифрованию.

Типы ключей
NWS реализует 3 типа ключей, которые используют разные алгоритмы.
Первый тип - корневой ключ шифрования MEK. Этот ключ используется как последняя инстанция для шифрования других ключей шифрования.
Второй тип - ключ шифрования данных DEK. Этот ключ используется для шифрования бинарных данных, файлов, объектов, потоков и т.д.
Третий тип - ключ шифрования ключей KEK. Этот ключ используется для шифрования ключей шифрования DEK.
Шифрование
Для шифрования файла небходимо сгенерировать DEK и входной файл. На выходе - зашифрованный данным ключом файл ciphertext. DEK является уникальным и разшифровать можно будет только этим ключом.

Дешифрование
Для дешифрования файла небходимо использовать DEK и входной зашифрованный ciphertext файл. На выходе - разашифрованный plaintext файл.
ВНИМАНИЕ: Если DEK был удален пользователем, то зашифрованные им данные восстановлению НЕ ПОДЛЕЖАТ!!!.
В связи с этим, NWS предпринимает меры для защиты ВСЕХ ключей, в т.ч от случайного удаления пользователем.

Примеры кода
Пример 1: Шифрование файла при помощи Data Encryption Key
- Создаем кастомный
DEKдля нашего сервисаHello World:
nws kms create --region ru-msk-0a --key-type dek --desc 'DEK for the Hello-world service' --alias 'hello-dek'
02 Mar 2024 22:30:03 MSK INFO REST API URL: https://api.nws.neurodyne.pro
02 Mar 2024 22:30:03 MSK INFO PROTO API URL: api.nws.neurodyne.pro:443
02 Mar 2024 22:30:03 MSK INFO ✅ Success! KMS key created
id: 3f8b7bb3-eb20-456e-b01b-7ec5e0a3966e
key type: dek
alias: hello-dek
region: ru-msk-0a
description: DEK for the Hello-world service
- Используем новый ключ для шифрования файла
export DEK_ID="3f8b7bb3-eb20-456e-b01b-7ec5e0a3966e"
echo "Hello World!" > index.html
nws kms encrypt --key-id $DEK_ID --key-type dek --region ru-msk-0a --input ./index.html --output ./index.html.dek
03 Mar 2024 00:22:10 MSK INFO ✅ Success! \
Encrypted file ./index.html with the key type `dek` ID 3f8b7bb3-eb20-456e-b01b-7ec5e0a3966e
В результате появился новый файл index.html.dek.cipher, который содержит данные, зашифрованные при помощи нашего DEK_ID.
- Используем новый ключ для дешифрования файла
nws kms decrypt --key-id $KEY_ID --key-type dek --region ru-msk-0a --input ./index.html.dek.cipher --output ./index.html.dek
03 Mar 2024 00:28:22 MSK INFO ✅ Success! \
Decrypted file ./index.html.dek.cipher with the key type `dek` ID 3f8b7bb3-eb20-456e-b01b-7ec5e0a3966e