es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 = "…."
}
}
“`>

Tags:  ,

Answer

  1. Avatar for 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:

    resource "aws_secretsmanager_secret" "secrets_manager" {
      count = length(var.secrets)
      name = element(split(":", var.secrets[count.index]), 0)
      description = "Administrado por Terraform"
    }
    
    resource "aws_secretsmanager_secret_version" "secret" {
      count = length(var.secrets)
      secret_id = aws_secretsmanager_secret.secrets_manager[count.index].id
      secret_string = length(split(":", var.secrets[count.index])) > 1 ? <<eof
         {
          "${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 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
    }


    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 clave.>

Comments are closed.