Skip to content

Instalando HashiCorp Vault para la Gestión de Secretos

En cualquier arquitectura de software, la gestión de secretos (contraseñas, claves de API, certificados) es una de las tareas más críticas y a menudo, peor manejadas. “Hardcodear” secretos en el código o en archivos de configuración dentro de repositorios de Git es un anti-patrón de seguridad garrafal.

La solución profesional es un gestor de secretos centralizado. Para nuestro ecosistema, utilizaremos el estándar de la industria: HashiCorp Vault.

En esta guía, desplegaremos Vault en modo de desarrollo y realizaremos la configuración inicial para preparar el terreno para nuestros microservicios.

  1. Añadir el Repositorio de Helm de HashiCorp Primero, le enseñamos a Helm dónde encontrar los charts oficiales de HashiCorp.

    Terminal window
    helm repo add hashicorp https://helm.releases.hashicorp.com
    Añadiendo el repositorio de Helm de HashiCorp
  2. Crear y Etiquetar el Namespace Desplegaremos Vault en su propio namespace dedicado y lo etiquetaremos para la inyección del sidecar de Istio, lo que nos permitirá aplicar políticas de seguridad mTLS en el futuro.

    Terminal window
    kubectl create namespace vault
    kubectl label namespace vault istio-injection=enabled
    Creando y etiquetando el namespace para Vault
  3. Preparar el Archivo de Configuración (values.yaml) Para instalar Vault en modo de desarrollo con la UI habilitada, creamos un archivo values.yaml:

    values.yaml
    global:
    enabled: true
    resources:
    requests:
    memory: 256Mi
    cpu: 250m
    limits:
    memory: 256Mi
    cpu: 250m
    server:
    dev:
    enabled: true
    devRootToken: "ANGq0*B2acD1n5%F"
    service:
    enabled: true
    type: ClusterIP
    port: 8200
    targetPort: 8200
    ui:
    enabled: true
    serviceType: ClusterIP
    externalPort: 8200
    injector:
    enabled: "false"
    • server.dev.enabled: true: Inicia Vault en un modo de desarrollo simple, con un solo nodo y almacenamiento en memoria (ideal para pruebas, nunca para producción).
    • ui.enabled: true: Habilita la interfaz web de Vault.
    • serviceType: "ClusterIP": Expone la UI con un servicio interno, que luego haremos accesible a través de nuestro Gateway de Istio.
    • server.dev.devRootToken: Establece el token raíz a un valor conocido para facilitar el acceso en desarrollo.
  4. Instalar Vault Usamos Helm para desplegar Vault con nuestra configuración personalizada.

    Terminal window
    helm install vault hashicorp/vault -n vault --values values.yaml
    Instalando Vault con Helm
  5. Verificar el Despliegue en Lens En Lens, bajo “Helm > Releases”, vemos la nueva release vault.

    Verificando la release de Vault en Lens

    Y en “Workloads > Pods”, encontramos el pod vault-0 corriendo en el namespace vault.

    Verificando el pod de Vault en Lens

Parte 2: Exponiendo la UI y Configuración Inicial

Section titled “Parte 2: Exponiendo la UI y Configuración Inicial”
  1. Crear el VirtualService para la UI de Vault Creamos un archivo network.yaml para indicarle a Istio cómo enrutar el tráfico hacia la UI de Vault.

    network.yaml
    apiVersion: networking.istio.io/v1
    kind: VirtualService
    metadata:
    name: vault-virtualservice
    namespace: vault
    spec:
    hosts:
    - vault.codedesignplus.app
    gateways:
    - istio-ingress/istio-inventory-gateway
    http:
    - route:
    - destination:
    host: vault-ui.vault.svc.cluster.local
    port:
    number: 8200

    Aplicamos el manifiesto:

    Terminal window
    kubectl apply -f .\network.yaml
    Aplicando el VirtualService para Vault Verificando el VirtualService de Vault en Lens
  2. Configurar el Acceso Local (Archivo hosts) Añadimos la entrada temporal a nuestro archivo hosts para que nuestro navegador pueda encontrar vault.codedesignplus.app.

    192.168.0.30 vault.codedesignplus.app
    Editando el archivo hosts para Vault
  3. Iniciar Sesión por Primera Vez Abrimos el navegador en https://vault.codedesignplus.app. Para iniciar sesión, usamos el token que definimos en nuestro values.yaml.

    Pantalla de inicio de sesión de Vault

    ¡Estamos dentro! Ya podemos ver el panel principal de Vault.

    Panel principal de Vault
  4. Configurar la CLI de Vault Para configuraciones avanzadas, usaremos la CLI. Primero, iniciamos sesión desde nuestra terminal especificando el token que definimos en el values.yaml.

    Terminal window
    $env:VAULT_ADDR = "https://vault.codedesignplus.app"
    vault login token=<token>
    Iniciando sesión en Vault con la CLI

Parte 3: Configuración de Motores y Autenticación

Section titled “Parte 3: Configuración de Motores y Autenticación”

Ahora prepararemos Vault para que nuestros microservicios puedan usarlo.

  1. Habilitar el Método de Autenticación AppRole AppRole es uno de los métodos para que las máquinas (nuestros microservicios o la CLI) se autentiquen en Vault. Sin embargo, en un ambiente de producción, deberíamos usar un método más robusto como Kubernetes o OIDC. Para este tutorial, habilitamos AppRole para simplificar.

    Terminal window
    vault auth enable approle
    Habilitando el método de autenticación AppRole
  2. Habilitar los Motores de Secretos Habilitaremos varios “motores” que Vault usará para gestionar diferentes tipos de secretos.

    Terminal window
    vault secrets enable -path=inventory-keyvalue kv-v2
    vault secrets enable -path=inventory-database database
    vault secrets enable -path=inventory-rabbitmq rabbitmq
    vault secrets enable -path=inventory-transit transit
    Habilitando varios motores de secretos

    En la UI, bajo “Secrets Engines”, ahora podemos ver todos los motores que hemos habilitado.

    Verificando los motores de secretos en la UI de Vault
  3. Crear una Política de Acceso Las políticas definen qué puede hacer una identidad en Vault. Crearemos una política de “acceso total” para nuestro entorno de desarrollo. Creamos un archivo full-access.hcl:

    full-access.hcl
    path "*" {
    capabilities = ["create", "read", "update", "delete", "list"]
    }

    Y la aplicamos con la CLI:

    Terminal window
    vault policy write full-access .\full-access.hcl
    Creando una política de acceso en Vault

    Podemos verificar la política en la UI, bajo “Policies”.

    Verificando la política en el dashboard Viendo la lista de políticas ACL Detalle de la política full-access
  4. Crear un Rol de AppRole y Obtener Credenciales Ahora, creamos un rol que une la política de full-access con el método de autenticación AppRole. Luego generamos las credenciales (RoleID y SecretID) que podremos usar en el CLI para llevar a cabo las configuraciones de nuestros microservicios.

    Terminal window
    vault write auth/approle/role/inventory-approle policies="full-access"
    vault read auth/approle/role/inventory-approle/role-id
    vault write -f auth/approle/role/inventory-approle/secret-id
    Creando un AppRole y obteniendo sus credenciales

    Podemos verificar la creación del método approle en la UI, bajo “Access > Authentication Methods”.

    Verificando el método de autenticación AppRole en la UI Detalles de la configuración de AppRole Panel principal de Vault con los motores de secretos visibles
  5. Probar el Login con AppRole Para asegurarnos de que todo funciona, podemos hacer un login de prueba usando las credenciales que acabamos de generar.

    Terminal window
    vault write auth/approle/login role_id=TU_ROLE_ID secret_id=TU_SECRET_ID
    Probando el inicio de sesión con RoleID y SecretID
  6. Crear un Secreto de Ejemplo Finalmente, creamos nuestro primer secreto en el motor inventory-keyvalue.

    Terminal window
    vault kv put -mount=inventory-keyvalue ms-my-microservice `
    "MySecret1=Value1" `
    "MySecret2=Value2"
    Creando un secreto de ejemplo con la CLI de Vault

    Podemos ver el secreto creado en la UI, navegando al motor inventory-keyvalue.

    Viendo el secreto en la UI de Vault Detalles del secreto creado

¡Has desplegado y configurado exitosamente HashiCorp Vault! Ahora tienes un almacén centralizado y seguro para toda la configuración de tu ecosistema.

En los próximos artículos, cuando empecemos a desplegar el ecosistema base de CodeDesignPlus, verás cómo nuestros microservicios utilizan el método de autenticación Kubernetes en un entorno de producción para conectarse a Vault y obtener los secretos que definiremos para cada uno, como las cadenas de conexión a la base de datos o las claves de API. Sin embargo, continuaremos con el método de autenticación AppRole para el CLI y Token para simplificar el proceso de configuración inicial y para la conexión de los microservicios en desarrollo.

Si deseas profundizar en el uso de la CLI y los diferentes motores de Vault, puedes consultar nuestra guía: Administrando Vault: Guía Avanzada.