Cómo usa Agent-Lab Vault
Agent-Lab usa HashiCorp Vault para
la gestión segura de secretos: las claves de API, las credenciales de bases de datos y otros valores sensibles
se guardan en Vault, no en la base de datos ni en archivos de entorno. Durante el inicio de la aplicación,
el ConfigSource activo se conecta a
Vault y carga el contenido de configuración; las integraciones almacenan
referencias en la base de datos, mientras que los valores sensibles se obtienen de Vault bajo
demanda.
Configuración de Vault
Para el desarrollo local, los stacks de Compose incluyen un servidor de Vault con una configuración
de desarrollo (interfaz en http://localhost:8200, token de inicio de sesión
dev-only-token). Consulta Ejecución de la aplicación.
Para producción, aprovisiona la instancia con el módulo de Terraform
terraform/08_vault-instance/ de la guía de implementación, 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_KEYAprovisionamiento del contenido del secreto
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 del contenido se
enumeran en la Referencia de configuración;
escríbelo 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 predeterminada
cambia automáticamente a KubernetesVaultConfigSource cuando VAULT_K8S_ROLE está definida:
se autentica con el token proyectado de la ServiceAccount del pod, por lo que no es necesario aprovisionar
ni rotar ningún token estático.
Producción
De acuerdo con nuestros principios cloud-native, 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 obtiene todo al iniciar mediante
el contrato de configuración.