Cómo usa Agent-Lab Vault
Agent-Lab utiliza HashiCorp Vault para
gestionar los secretos de forma segura: las claves de API, las credenciales de bases de datos y otros valores
sensibles residen en Vault, no en la base de datos ni en archivos de entorno. Durante el arranque de la
aplicación, el ConfigSource activo se conecta a
Vault y carga la configuración; las integraciones almacenan
referencias en la base de datos, mientras que los valores sensibles se obtienen de Vault bajo
demanda.
Configurar Vault
Para el desarrollo local, los stacks de Compose incluyen un servidor Vault con una
configuración de desarrollo (interfaz en http://localhost:8200, token de inicio de sesión
dev-only-token). Consulta Ejecutar la aplicación.
Para producción, aprovisiona la instancia con el módulo de Terraform
terraform/08_vault-instance/ de la guía de despliegue, incluida la
secuencia init + unseal:
kubectl --namespace vault exec vault-0 -- vault operator init \
-key-shares=1 \
-key-threshold=1 \
-format=json > cluster-keys.json
export VAULT_UNSEAL_KEY=$(jq -r ".unseal_keys_b64[]" cluster-keys.json)
kubectl --namespace vault exec vault-0 -- vault operator unseal $VAULT_UNSEAL_KEYAprovisionar la carga de secretos
VaultConfigSource lee un único secreto KV-v2 (montaje secret, ruta
app_secrets) y lo asigna a las
claves de configuración de la aplicación. Las claves de la carga se
enumeran en la Referencia de configuración;
escríbela una sola vez con la CLI de Vault:
vault kv put secret/app_secrets \
api_base_url="https://<agent_lab_fqdn>" \
cdp_url="http://<cdp_host>:9222" \
auth_enabled="true" \
auth_url="https://<auth_fqdn>" \
auth_realm="<realm_name>" \
auth_client_id="<client_name>" \
auth_client_secret="<client_secret>" \
broker_url="redis://:<password>@<redis_host>:6379/0" \
db_url="postgresql://<user>:<pass>@<db_host>:5432/agent_lab" \
db_vectors="postgresql://<user>:<pass>@<db_host>:5432/agent_lab_vectors" \
db_checkpoints="postgresql://<user>:<pass>@<db_host>:5432/agent_lab_checkpoints"Cuando la aplicación no puede (o no debe) usar un VAULT_TOKEN estático, la fuente por defecto
pasa automáticamente a KubernetesVaultConfigSource si se define VAULT_K8S_ROLE:
se autentica con el token proyectado de la ServiceAccount del pod, de modo que no hace falta
aprovisionar ni rotar ningún token estático.
Producción
Siguiendo nuestros principios nativos de la nube, recomendamos la
configuración de alta disponibilidad de Vault en Kubernetes.
El módulo de Terraform 15_agent-lab-dependencies/ conecta las credenciales de ejecución; la
aplicación lo recoge todo al arrancar mediante
el contrato de configuración.