Шифрование секретов в 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
.