Vision General de Seguridad
Como OpenClaws protege tus credenciales, aisla los inquilinos y cifra la comunicacion en cada capa.
Cifrado Vault Transit
Todas las claves de API de Anthropic se cifran en reposo usando el motor de secretos Transit de Vault antes de almacenarlas en KV:
- Clave Transit:
openclaw(AES-256-GCM96) - Formato del texto cifrado:
vault:v1:...(prefijo estandar de Transit) - Punto de cifrado: El API de gestion cifra las claves antes de almacenarlas en Vault KV
- Punto de descifrado: El script de inicio del contenedor descifra via API de Vault Transit al arrancar (solo en memoria)
User provides API key → mgmt-api encrypts via Transit → stored as vault:v1:...
Container starts → _startup.sh reads vault token → Transit decrypt → ANTHROPIC_API_KEY env var
Key exists only in container memory — never written to disk in plaintextCualquiera que navegue Vault KV solo ve texto cifrado, nunca claves en texto plano. El sistema es retrocompatible: los valores sin el prefijo vault: se tratan como texto plano (para migracion).
Aislamiento de Namespace
Cada usuario obtiene un namespace dedicado de Nomad con cuotas de recursos estrictas:
- Namespace:
oc-{user}— todos los jobs, asignaciones y volumenes estan limitados a este namespace - Cuota de recursos:
quota-{user}— limites de CPU y memoria impuestos por Nomad - Sin acceso entre inquilinos: Los jobs en un namespace no pueden acceder a recursos en otro
Alcance de Politicas de Vault
Las politicas de Vault estan limitadas por namespace usando la Identidad de Carga de Trabajo JWT de Nomad:
# Agents can only read secrets under their namespace
path "secret/data/openclaw/{{identity.entity.aliases.jwt-nomad.metadata.nomad_namespace}}/*" {
capabilities = ["read"]
}
# Transit decrypt access for API key decryption
path "transit/decrypt/openclaw" {
capabilities = ["update"]
}Un contenedor ejecutandose en el namespace oc-alice solo puede leer secretos en secret/openclaw/oc-alice/*. No puede acceder a los secretos de ningun otro usuario.
Identidad de Carga de Trabajo JWT
Nomad 1.11+ usa Identidad de Carga de Trabajo basada en JWT en lugar de tokens legacy de Vault:
- Nomad firma JWTs con la audiencia
vault.io - El metodo de autenticacion
jwt-nomadde Vault valida los JWTs contra el endpoint JWKS de Nomad - El rol
nomad-workloadmapea los JWTs a la politicaopenclaw-agentde Vault - Sin tokens de larga duracion — los JWTs son de corta duracion y se rotan automaticamente
vault {
role = "nomad-workload"
}
identity {
env = true
file = true
}Malla de Servicios Consul (mTLS)
Toda la comunicacion entre servicios esta cifrada via Consul Connect:
- Sidecar Envoy: Cada contenedor obtiene un proxy Envoy que maneja la terminacion TLS y la rotacion de certificados
- mTLS: Tanto el cliente como el servidor verifican la identidad del otro usando certificados SPIFFE
- Denegacion por defecto: Ningun servicio puede comunicarse con otro a menos que una intencion explicita lo permita
Modelo de Intenciones
Las intenciones de Consul controlan que servicios pueden comunicarse:
| Tipo | Origen → Destino | Cuando se Crea |
|---|---|---|
| Acceso LLM | oc-{user} → vertex-ai-proxy | Primer agente agregado |
| Proxy API | oc-{user} → anthropic-proxy | Primer agente agregado |
Las intenciones se crean cuando se agrega el primer agente y se eliminan cuando se elimina el ultimo agente (o se elimina el usuario).
Almacenamiento de Secretos
Las credenciales de cada agente se almacenan en Vault KV v2:
secret/openclaw/oc-{user}/{agent}
├── api_key — Agent API key (hex-encoded)
├── gateway_token — OpenClaw gateway token
└── anthropic_api_key — Encrypted ciphertext (vault:v1:...)
secret/openclaw/oc-{user}/_anthropic_key
└── anthropic_api_key — User-level key for proxy accessPlanificacion Honesta de Recursos
OpenClaws usa planificacion honesta — el campo memory en Nomad se establece al valor techo del plan (sin sobreasignacion con memory_max). Esto previene OOM kills bajo carga y asegura que tus agentes siempre tengan los recursos que tu plan garantiza.