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.
Parte 1: Desplegando Vault con Helm
Section titled “Parte 1: Desplegando Vault con Helm”-
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
-
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 vaultkubectl label namespace vault istio-injection=enabled
-
Preparar el Archivo de Configuración (
values.yaml) Para instalar Vault en modo de desarrollo con la UI habilitada, creamos un archivovalues.yaml:values.yaml global:enabled: trueresources:requests:memory: 256Micpu: 250mlimits:memory: 256Micpu: 250mserver:dev:enabled: truedevRootToken: "ANGq0*B2acD1n5%F"service:enabled: truetype: ClusterIPport: 8200targetPort: 8200ui:enabled: trueserviceType: ClusterIPexternalPort: 8200injector: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.
-
Instalar Vault Usamos Helm para desplegar Vault con nuestra configuración personalizada.
Terminal window helm install vault hashicorp/vault -n vault --values values.yaml
-
Verificar el Despliegue en Lens En Lens, bajo “Helm > Releases”, vemos la nueva release
vault.
Y en “Workloads > Pods”, encontramos el pod
vault-0corriendo en el namespacevault.
Parte 2: Exponiendo la UI y Configuración Inicial
Section titled “Parte 2: Exponiendo la UI y Configuración Inicial”-
Crear el
VirtualServicepara la UI de Vault Creamos un archivonetwork.yamlpara indicarle a Istio cómo enrutar el tráfico hacia la UI de Vault.network.yaml apiVersion: networking.istio.io/v1kind: VirtualServicemetadata:name: vault-virtualservicenamespace: vaultspec:hosts:- vault.codedesignplus.appgateways:- istio-ingress/istio-gatewayhttp:- route:- destination:host: vault-ui.vault.svc.cluster.localport:number: 8200Aplicamos el manifiesto:
Terminal window kubectl apply -f .\network.yaml

-
Configurar el Acceso Local (Archivo
hosts) Añadimos la entrada temporal a nuestro archivohostspara que nuestro navegador pueda encontrarvault.codedesignplus.app.192.168.0.30 vault.codedesignplus.app
-
Iniciar Sesión por Primera Vez Abrimos el navegador en
https://vault.codedesignplus.app. Para iniciar sesión, usamos el token que definimos en nuestrovalues.yaml.
¡Estamos dentro! Ya podemos ver el panel principal de Vault.

-
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>
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.
-
Habilitar el Método de Autenticación
AppRoleAppRolees 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 comoKubernetesoOIDC. Para este tutorial, habilitamosAppRolepara simplificar.Terminal window vault auth enable approle
-
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-v2vault secrets enable -path=inventory-database databasevault secrets enable -path=inventory-rabbitmq rabbitmqvault secrets enable -path=inventory-transit transit
En la UI, bajo “Secrets Engines”, ahora podemos ver todos los motores que hemos habilitado.

-
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
Podemos verificar la política en la UI, bajo “Policies”.



-
Crear un Rol de
AppRoley Obtener Credenciales Ahora, creamos un rol que une la política defull-accesscon el método de autenticaciónAppRole. Luego generamos las credenciales (RoleIDySecretID) 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-idvault write -f auth/approle/role/inventory-approle/secret-id
Podemos verificar la creación del método
approleen la UI, bajo “Access > Authentication Methods”.


-
Probar el Login con
AppRolePara 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
-
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"
Podemos ver el secreto creado en la UI, navegando al motor
inventory-keyvalue.

Conclusión y Próximos Pasos
Section titled “Conclusión y Próximos Pasos”¡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.