Шифрование диска ВМ в Облаке с помощью YC KMS
Описание
Схема работы
Описание работы решения
- В cloud-init скрипт при развертывания ВМ передатися необходимые данные
- Устанавливается ПО: awscli, cryptsetup-bin, curl
- Передается созданный terraform ssh ключ
- На ВМ выполняется bash скрипт с аргументом create: создается ключ шифрования с высокой энтропией методом KMS generateDataKey и записывается на диск в открытом и зашифрованном виде
- Шифруется и монтируется второй диск ВМ на основе ключа шифрования
- Ключ в зашифрованном виде копируется в Yandex Object Storage и удаляется из файловой системы
- Скрипт с аргументом open добавляется в автозагрузку ОС (чтобы при перезагрузке автоматически примонтировать шифрованный диск)
- В момент монтирования ключ шифрования скачивается из S3, расшифровывается и по окончанию мониторования удаляется из файловой системы
Все операции с KMS и Object Storage выполняются с помощью токена сервисного аккаунта, привязанного к ВМ при ее создании
Описание аргументов скрипта:
- create: Скрипт выполняет создание ключа с высокой энтропией методом KMS generateDataKey
- open: Монтирование зашифрованного диска в расшифрованный объект
- close: Размонтирование зашифрованного устройства
- erase: Удаление исходного устройства
Пререквизиты (настраиваются с помощью примера Terraform скрипта):
- установить на ВМ yc client
- создать сервисную УЗ
- создать ключ KMS
- назначить права на ключ KMS созданному сервисному аккаунту (kms.keys.encrypterDecrypter)
- создать Object Storage Bucket
- назначить права на Object Storage bucket созданному сервисному аккаунту (storage.uploader, storage.viewer + BucketPolicy)
- назначить на ВМ сервисную УЗ
- установить aws cli (
apt install awscli
)
- установить cryptsetup (
apt install cryptsetup-bin
)
Запуск решения
- Скачайте файлы
- Заполните файл variables.tf
- Выполните команды terraform:
terraform init
terraform apply
Итоги развертывания
- Проверить статус примонтированных объектов:
lsblk
- Проверить статус шифрования диска:
cryptsetup status encrypted1
- Проверить диск на другой ВМ: Создать snapshot диска:
sudo mount /dev/vdb /mnt