ПР. Создание и ротация ключей шифрования
Кратко:
- Создание ключей шифрования и управление ими в Yandex Cloud.
- Создание ключа шифрования с именем и алгоритмом шифрования.
- Ротация ключа каждый день с помощью утилиты командной строки.
- Использование созданного ключа для шифрования и расшифровки данных.
- Создание новой версии ключа и планирование удаления старой версии.
- Зашифрование файла с использованием новой версии ключа.
- Возможность отмены запланированного удаления версии ключа.
Практическая работа. Создание и ротация ключей шифрования
На прошлом уроке вы познакомились с возможностями сервиса управления ключами шифрования KMS. В этой практической работе вы научитесь создавать ключи шифрования и управлять ими, а также использовать эти ключи для шифрования и расшифрования данных.
Шаг 1
Перейдите в панель управления Yandex Cloud, нажмите кнопку Создать ресурс и выберите из выпадающего списка пункт Ключ шифрования.

Задайте для создаваемого ключа имя (например
yc-lab-key1
), заполните поле Описание (это необязательно) и выберите алгоритм шифрования. Предположим, что ключ нужно ротировать каждый день. Для этого в поле Период ротации, дни выберите вариант Своё значение
и введите число 1
в поле справа.Нажмите кнопку Создать. Когда операция создания ключа завершится, новый ключ появится в списке.

Нажав на строку с ключом, вы перейдёте на страницу детальной информации. На ней приведены все параметры ключа, а также список его версий. Обратите внимание, что ID (идентификатор) ключа и ID конкретной версии ключа отличаются. Важно их не путать.

Шаг 2
Давайте используем созданный ключ для шифрования и расшифрования данных. Создайте у себя на диске файл (например, текстовый файл с именем
plain.txt
). Добавьте в него любой текст и сохраните содержимое. Напомним, что размер файла не должен превышать 32 килобайта.Запустите утилиту командной строки (bash или cmd) и перейдите в каталог с файлом
plain.txt
. Зашифруйте этот файл с помощью утилиты yc
, а результат операции шифрования выведите в файл encrypted.txt
. Для этого выполните команду:
yc kms symmetric-crypto encrypt --id <ID ключа> --plaintext-file plain.txt --ciphertext-file encrypted.txt
После выполнения команды будет создан файл
encrypted.txt
, который содержит зашифрованный текст. Утилита yc
также выведет информацию о том, каким ключом и какой его версией файл был зашифрован.Шаг 3
Теперь расшифруйте этот файл, а результат операции выведите в файл
decrypted.txt
. Для этого выполните команду:
yc kms symmetric-crypto decrypt --id <ID ключа> --ciphertext-file encrypted.txt --plaintext-file decrypted.txt
В результате выполнения команды будет создан файл
decrypted.txt
с идентичным исходному файлу (plain.txt
) содержимым.Если расшифровать файл не удалось, утилита выдаст сообщение об ошибке.
Шаг 4
Создайте новую версию ключа. Для этого перейдите на страницу детальной информации о ключе и нажмите кнопку Ротировать. Новая версия ключа появится в списке версий и станет основной (
Primary
). Обратите внимание, что идентификаторы версий отличаются друг от друга.
Шаг 5
Запланируйте удаление первой версии ключа. Для этого в списке версий нажмите на значок … в строке с этой версией, а затем выберите пункт Запланировать удаление.
В появившемся окне установите время, по истечении которого ключ будет удалён, и нажмите Запланировать. Версия ключа не может быть удалена моментально, минимальный период времени для её удаления составляет один день.

После этого в списке версий удаляемый ключ будет помечен как запланированный на удаление (
Scheduled For Destruction
). Теперь этой версией ключа невозможно расшифровать файлы, которые были зашифрованы с её помощью.💡 Когда вы делаете версию ключа “запланированной к удалению”, в консоли управления соответствующая метка рядом с этой версией появляется сразу, а вот фактический статус версии ключа может обновиться с задержкой до 3 часов. Это не баг, это — фича. Дело в том, что это eventually consistent операция.
Провести ротацию ключа можно и из командной строки. Для этого используется команда:
yc kms symmetric-key rotate <ID ключа>
Шаг 6
Зашифруйте исходный файл
plain.txt
с помощью новой версии ключа. Результат запишите в файл encrypted_with_new_key.txt
.
yc kms symmetric-crypto encrypt --id <ID ключа> --plaintext-file plain.txt --ciphertext-file encrypted_with_new_key.txt
Теперь у вас есть два файла:
encrypted.txt
, зашифрованный версией ключа, которая помечена на удаление;encrypted_with_new_version.txt
, зашифрованный новой версией ключа.
Попробуйте расшифровать данные из обоих файлов. Вы увидите, что расшифровать первый файл не получилось, а файл, который зашифрован второй версией ключа, расшифрован.
Запланированное удаление первой версии ключа можно отменить. Это позволит расшифровать данные из первого файла.
В строке версии ключа, которая запланирована на удаление, нажмите значок
…
, а затем кнопку кнопку Отменить удаление. Эта версия снова получит статус активной. Проверьте, что она работает, расшифровав файл encrypted.txt
.