Шифрование секретов в HashiCorp Terraform
Чтобы зашифровать данные:
-
Опишите в конфигурационном файле параметры ресурса
yandex_kms_secret_ciphertext
с указанием на ключ KMS в полеkey_id
:resource "yandex_kms_secret_ciphertext" "password" { key_id = "<идентификатор_ключа>" aad_context = "additional authenticated data" plaintext = "strong password" }
Где:
key_id
— идентификатор ключа KMS.aad_context
— (AAD-контекст).plaintext
— строка, которую нужно зашифровать.
Важно
Использование
yandex_kms_secret_ciphertext
позволяет скрыть секреты при разворачивании инфраструктуры, но в общем случае указаниеplaintext
иaad_context
в конфигурационном файле в открытом виде небезопасно. Секреты могут быть прочитаны из файла конфигурации, могут попасть в Terraform-state или могут быть прочитаны из логов выполнения.Более подробную информацию о параметрах ресурсов в Terraform см. в документации провайдера
. -
Проверьте конфигурацию командой:
terraform validate
Если конфигурация является корректной, появится сообщение:
Success! The configuration is valid.
-
Выполните команду:
terraform plan
В терминале будет выведен список ресурсов с параметрами. На этом этапе изменения не будут внесены. Если в конфигурации есть ошибки, Terraform на них укажет.
-
Примените изменения конфигурации:
terraform apply
-
Подтвердите изменения: введите в терминал слово
yes
и нажмите Enter.После этого доступ к шифртексту можно получить через переменную
ciphertext
, а к зашифрованным данным —plaintext
.Для проверки вы можете добавить в файл конфигурации следующий код с выходной переменной
decrypted_pass
.Внимание
Это небезопасно и может быть использовано только для тестирования.
output "decrypted_pass" { sensitive = true value = yandex_kms_secret_ciphertext.password.plaintext }
После обновления конфигурации можно проверить зашифрованные данные командой:
terraform output decrypted_pass
Результат:
"strong password"
Рекомендации для безопасного хранения секретных данных
- Не указывайте значения секретов в конфигурационном файле явно. Читайте их из хранилища, доступ к которому ограничен (например, вы можете использовать хранилища секретов).
- Рассмотрите возможность удаленного хранения Terraform-state
.