б.Мы создаем базу данных SQL в сценарии tf, включая назначение имени пользователя и пароля администратора (случайно сгенерированное значение).
Если вы используете Key Vault, то я предполагаю, что вы говорите о Azure SQLБазы данных.Однако в настоящее время Terraform поддерживает только назначение имени пользователя и пароля администратора для экземпляра SQL Server , а не баз данных SQL .
В этом случае я рекомендую использовать ресурсы random_password , чтобы присвоить значения azurerm_key_vault_secret , которые затем могут быть назначены как azurerm_sql_server
пароль администратора.
С этимвы точно знаете, что пароль в Key Vault всегда синхронизирован и может рассматриваться как источник правды для паролей вашего сервера SQL (если, конечно, кто-то не переходит и не сбрасывает пароль администратора вручную).
Теперь, если вы когда-нибудь захотите сбросить пароль SQL-сервера, просто измените значение random_password
, заставив его воссоздать новое значение, которое, в свою очередь, обновит значение azurerm_key_vault_secret
, а затем пароль azurerm_sql_server
.
Вот несколько быстрых HCL в качестве примера
resource "random_password" "password" {
length = 16
special = false
}
resource "azurerm_key_vault_secret" "password_secret" {
depends_on = [<the Key Vault access policy for your infra agent which runs terraform apply>]
...
value = random_password.password.result
...
}
resource "azurerm_sql_server" "sql_server" {
...
administrator_login_password = azurerm_key_vault_secret.password_secret.value
...
}
Это правильный подход?Нужно ли создавать KV в сценариях Infra Agent tf?Должны ли мы случайным образом генерировать пароли (как секреты)?
Это разумный подход, но помните, что оплата составляет за секрет, ключ или сертификат , а сами хранилища ключей бесплатны.Рекомендуется создать хранилище ключей для каждого приложения , поскольку политики доступа могут применяться только для хранилища ключей, а не для секрета / ключа / сертификата.
Мы не можем использоватьЗадача хранилища ключей (https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-key-vault?view=azure-devops) для чтения из KV, поскольку имя KV известно только во время выполнения (через файл tf vars)
Почему это известно только во время выполнения?как ограничение вашего собственного процесса, так как Terraform позволяет вам указывать имя для каждого хранилища ключей при его создании. Пересмотрите, действительно ли это требование, и почему вы это делаете. Если это определенно требование и ваши имена хранилищ ключейгенерируется динамически, затем вы можете использовать terraform output
, чтобы получить имя хранилища ключей во время конвейера, и установить его как переменную во время сборки .
.Имя хранилища ключей в качестве выхода просто используйте следующий HCL
output "key_vault_name" {
value = "${azurerm_key_vault.demo_key_vault.name}"
}
и запустите `terraform output key_vault_name", чтобы записать значение в стандартный вывод.