Управление ключами KMS с HashiCorp Terraform
Terraform-провайдер
Добавление ключа
Чтобы создать новый ключ:
-
Опишите в конфигурационном файле параметры ресурса
yandex_kms_symmetric_key
:resource "yandex_kms_symmetric_key" "key-a" { name = "<имя_ключа>" description = "<описание_ключа>" default_algorithm = "AES_128" rotation_period = "8760h" lifecycle { prevent_destroy = true } }
Где:
-
name
— имя ключа. Формат имени:- длина — от 3 до 63 символов;
- может содержать строчные буквы латинского алфавита, цифры и дефисы;
- первый символ — буква, последний — не дефис.
-
description
— описание ключа. -
default_algorithm
— алгоритм шифрования. Возможные значения:AES-128
,AES-192
илиAES-256
. -
rotation_period
— период ротации (частота смены версии ключа по умолчанию). Чтобы создать ключ без автоматической ротации, не указывайте параметрrotation_period
.
Важно
Удаление ключа KMS равносильно уничтожению всех зашифрованных с его помощью данных — без ключа восстановить данные не получится. Блок
lifecycle
необходим, чтобы обезопасить ключ от удаления (например, командойterraform destroy
).Более подробную информацию о параметрах ресурсов в Terraform см. в документации провайдера
. -
-
Проверьте конфигурацию командой:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминал слово
yes
и нажмите Enter.После этого в указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
или с помощью команд CLI:yc kms symmetric-key list
Управление доступом к ключу
Для управления доступом к ключу через Terraform назначьте необходимые роли на каталог, содержащий ключ.
Например, назначьте на сервисный аккаунт роль kms.keys.encrypterDecrypter
, дающую права шифровать и расшифровывать данные ключами из определенного каталога:
resource "yandex_resourcemanager_folder_iam_member" "admin" {
folder_id = "<идентификатор_каталога>"
role = "kms.keys.encrypterDecrypter"
member = "serviceAccount:<идентификатор_сервисного_аккаунта>"
}