Módulo para AWS Secret Manager con valor/clave – Terraform
Tengo el siguiente módulo de Terraform para crear recursos de Secret Manager:
resource "aws_secretsmanager_secret" "secrets_manager" {
count = length(var.secrets)
name = element(split(":", var.secrets[count.index]), 0)
description = "Managed by Terraform"
}
resource "aws_secretsmanager_secret_version" "secret" {
count = length(var.secrets)
secret_id = aws_secretsmanager_secret.secrets_manager[count.index].id
secret_string = <<eof
{
"${element(split(":", var.secrets[count.index]), 1)}" : "${element(split(":", var.secrets[count.index]), 2)}"
}
eof
}
con:
module "secrets_manager" {
source = "./modules/secret_manager"
secrets = [
"secret_name:secret_value:secret_key",
...
]
}
esto ha estado funcionando perfectamente para mí. ahora lo que quiero es la posibilidad, sin cambiar este mecanismo, de crear un secreto sin especificar/crear un valor/clave.
module "secrets_manager" {
source = "./modules/secret_manager"
secrets = [
"secret_name:secret_value:secret_key",
"secret_name",
"secret_name:secret_value:secret_key",
...
]
}
he estado intentando usar un mapa como variable, etc…. sin suerte:
secrets_map = {
secret_one = {
secret_name = "...."
secret_value = "...."
secret_key = "...."
}
secret_two = {
secret_name = "...."
}
}
``` {="" "${element(split(":",="" var.secrets[count.index]),="" 1)}"="" :="" "${element(split(":",="" var.secrets[count.index]),="" 2)}"="" }="" eof="" }="" ```="" con:="" ```="" module="" "secrets_manager"="" {="" source="./modules/secret_manager" secrets="[" "secret_name:secret_value:secret_key",="" ...="" ]="" }="" ```="" esto="" ha="" estado="" funcionando="" perfectamente="" para="" mí.="" ahora="" lo="" que="" quiero="" es="" la="" posibilidad,="" sin="" cambiar="" este="" mecanismo,="" de="" crear="" un="" secreto="" sin="" especificar/crear="" un="" valor/clave.="" ```="" module="" "secrets_manager"="" {="" source="./modules/secret_manager" secrets="[" "secret_name:secret_value:secret_key",="" "secret_name",="" "secret_name:secret_value:secret_key",="" ...="" ]="" }="" ```="" he="" estado="" intentando="" usar="" un="" mapa="" como="" variable,="" etc....="" sin="" suerte:="" ```="" secrets_map="{" secret_one="{" secret_name="...." secret_value="...." secret_key="...." }="" secret_two="{" secret_name="...." }="" }=""></eof
{
"${element(split(":", var.secrets[count.index]), 1)}" : "${element(split(":", var.secrets[count.index]), 2)}"
}
eof
}
con:
module "secrets_manager" {
source = "./modules/secret_manager"
secrets = [
"secret_name:secret_value:secret_key",
...
]
}
esto ha estado funcionando perfectamente para mí. ahora lo que quiero es la posibilidad, sin cambiar este mecanismo, de crear un secreto sin especificar/crear un valor/clave.
module "secrets_manager" {
source = "./modules/secret_manager"
secrets = [
"secret_name:secret_value:secret_key",
"secret_name",
"secret_name:secret_value:secret_key",
...
]
}
he estado intentando usar un mapa como variable, etc…. sin suerte:
“`
secrets_map = {
secret_one = {
secret_name = "…."
secret_value = "…."
secret_key = "…."
}
secret_two = {
secret_name = "…."
}
}
“`>
davy.ai
Para crear un Secreto sin especificar un valor o una clave, puedes modificar el módulo existente de TF agregando una declaración “if” para comprobar si el secreto actual en la variable “secrets” tiene más de un elemento (es decir, si tiene un valor y una clave). Si es así, entonces crea el Secreto normalmente, como antes. Si no lo hace, entonces solo crea el nombre del Secreto sin un valor o clave. Aquí tienes un ejemplo de cómo puedes modificar el código:
en este código modificado, el valor de “secret_string” solo se completa si el secreto actual tiene un valor y una clave. si no es así, entonces “secret_string” se establece como null, lo que significa que no se creará ningún valor para este secreto.
luego puedes usar este módulo como antes, pero con la flexibilidad agregada para crear secretos sin valores o claves:
en este ejemplo, el primer secreto (“nombre_secreto:valor_secreto:clave_secreta”) se creará con un valor y una clave, mientras que el segundo secreto (“nombre_secreto”) solo se creará con un nombre y sin valor ni clave. el tercer secreto se creará nuevamente con un valor y una clave. {=”” “${element(split(“:”,=”” var.secrets[count.index]),=”” 1)}”:=”” “${element(split(“:”,=”” var.secrets[count.index]),=”” 2)}”=”” }=”” eof=”” :=”” null=”” }=””
="" en="" este="" código="" modificado,="" el="" valor="" de="" "secret_string"="" solo="" se="" completa="" si="" el="" secreto="" actual="" tiene="" un="" valor="" y="" una="" clave.="" si="" no="" es="" así,="" entonces="" "secret_string"="" se="" establece="" como="" null,="" lo="" que="" significa="" que="" no="" se="" creará="" ningún="" valor="" para="" este="" secreto.="" luego="" puedes="" usar="" este="" módulo="" como="" antes,="" pero="" con="" la="" flexibilidad="" agregada="" para="" crear="" secretos="" sin="" valores="" o="" claves:=""
=”” module=”” “secrets_manager”=”” {=”” source=”./modules/secret_manager” secrets=”[” “nombre_secreto:valor_secreto:clave_secreta”,=”” “nombre_secreto”,=”” “nombre_secreto:valor_secreto:clave_secreta”,=”” …=”” ]=”” }=”” “`=”” en=”” este=”” ejemplo,=”” el=”” primer=”” secreto=”” (“nombre_secreto:valor_secreto:clave_secreta”)=”” se=”” creará=”” con=”” un=”” valor=”” y=”” una=”” clave,=”” mientras=”” que=”” el=”” segundo=”” secreto=”” (“nombre_secreto”)=”” solo=”” se=”” creará=”” con=”” un=”” nombre=”” y=”” sin=”” valor=”” ni=”” clave.=”” el=”” tercer=”” secreto=”” se=”” creará=”” nuevamente=”” con=”” un=”” valor=”” y=”” una=””></eof{
“${element(split(“:”, var.secrets[count.index]), 1)}”: “${element(split(“:”, var.secrets[count.index]), 2)}”
}
eof : null
}
module “secrets_manager” {
source = “./modules/secret_manager”
secrets = [
“nombre_secreto:valor_secreto:clave_secreta”,
“nombre_secreto”,
“nombre_secreto:valor_secreto:clave_secreta”,
…
]
}
“`
en este ejemplo, el primer secreto (“nombre_secreto:valor_secreto:clave_secreta”) se creará con un valor y una clave, mientras que el segundo secreto (“nombre_secreto”) solo se creará con un nombre y sin valor ni clave. el tercer secreto se creará nuevamente con un valor y una clave.>