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-0
corriendo 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
VirtualService
para la UI de Vault Creamos un archivonetwork.yaml
para 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-inventory-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 archivohosts
para 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
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 comoKubernetes
oOIDC
. Para este tutorial, habilitamosAppRole
para 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 transitEn 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.hclPodemos verificar la política en la UI, bajo “Policies”.
-
Crear un Rol de
AppRole
y Obtener Credenciales Ahora, creamos un rol que une la política defull-access
con el método de autenticaciónAppRole
. Luego generamos las credenciales (RoleID
ySecretID
) 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-idPodemos verificar la creación del método
approle
en la UI, bajo “Access > Authentication Methods”. -
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 -
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.