#azure #terraform #terraform-provider-azure
Вопрос:
Я пытаюсь найти отличный способ создания рандомизированных секретов в хранилище ключей Azure с использованием Terraform. Где я немного застрял, так это когда я хочу использовать сгенерированные секреты в других модулях. Выходные данные секретов отображаются в виде карты объектов, и я не могу найти правильный синтаксис для ссылки на сгенерированные секреты в других модулях.
Для некоторых подробностей:
В модуле Keyvault я генерирую такие секреты, пустые строки генерируют новый секрет:
# Generate a random password
resource "random_password" "password" {
for_each = var.secrets
length = 20
min_upper = 2
min_lower = 2
min_numeric = 2
min_special = 2
override_special = "!@#$*()-_= []{}<>:"
keepers = {
name = each.key
}
}
# Create Azure Key Vault secrets
resource "azurerm_key_vault_secret" "secret" {
for_each = var.secrets
key_vault_id = azurerm_key_vault.key-vault.id
name = each.key
value = lookup(each.value, "value") != "" ? lookup(each.value, "value") : random_password.password[each.key].result
tags = var.tags
depends_on = [
azurerm_key_vault.key-vault,
azurerm_key_vault_access_policy.default_policy,
]
}
Var.secrets-это карта, определенная следующим образом:
variable "secrets" {
type = map(object({
value = string
}))
description = "Define Azure Key Vault secrets"
default = {}
}
Такое событие, как это:
kv-secrets = {
secret-x = {
value = ""
}
secret-y = {
value = ""
}
secret-z = {
value = ""
}
}
Секреты определяются как выходные данные для модуля хранилища ключей, такого как этот:
output "key-vault-secrets" {
value = values(azurerm_key_vault_secret.secret).*.value
}
Теперь предположим, что я хотел бы использовать сгенерированный секрет в других модулях моего проекта terraform, возможно, в базе данных PSQL:
module "psql" {
source = "./modules/psql"
psql_server_name = var.psql_server_name
location = var.location
prefix = var.prefix
environment = var.environment
resource_group_name = azurerm_resource_group.rg.name
administrator_login = var.administrator_login
administrator_login_password = ?module.keyvault.key-vault-secrets?
..
..
}
Кто-нибудь знает, как ссылаться на сгенерированный секрет, присваивая значение «login_password»? Или я подхожу к этому неправильно.
кредит: https://gmusumeci.medium.com/how-to-manage-azure-key-vault-with-terraform-943bf7251369
Комментарии:
1. Что не так с вашим нынешним подходом? Какие ошибки вы получаете?
2. Я предполагаю, что это поиск правильного синтаксиса для извлечения определенного секрета из модуля’. keyvault.вывод секретов хранилища ключей. например, я хотел бы сделать что-то вроде этого: ‘administrator_login_password = модуль. keyvault.ключ-хранилище-секреты[«секрет-x»].значение’
Ответ №1:
Если вы хотите использовать module.keyvault.key-vault-secrets["secret-x"].value'
синтаксис, то ваш вывод должен быть:
output "key-vault-secrets" {
value = azurerm_key_vault_secret.secret
}
Комментарии:
1. Хорошо, все сработало так, как задумывалось. Большое спасибо!