- Решение позволяет выполнять шифрование диска (кроме загрузочного) Yandex Compute Cloud ВМ с помощью Yandex Key Management Service и dm-crypt+LUKS
- Развертывание решения и пререквизитов выполняется с помощью примера terraform скрипта
- В 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: Удаление исходного устройства
- установить на ВМ 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