El texto plano sigue funcionando. Los SecretRefs son optativos por credencial.
Modelo de runtime
- Los secretos se resuelven en una instantánea de runtime en memoria, de forma anticipada durante la activación, no de forma diferida en las rutas de solicitud.
- El inicio falla rápido cuando un SecretRef efectivamente activo no se puede resolver.
- La recarga es un intercambio atómico: éxito completo, o se conserva la última instantánea válida conocida.
- Las infracciones de política (por ejemplo, un perfil de autenticación en modo OAuth combinado con entrada SecretRef) hacen fallar la activación antes del intercambio de runtime.
- Las solicitudes de runtime solo leen la instantánea activa en memoria. Las rutas de entrega saliente (entrega de respuesta/hilo de Discord, envíos de acciones de Telegram) también leen esa instantánea y no vuelven a resolver referencias por cada envío.
Límite de acceso del agente
Los SecretRefs evitan que las credenciales se persistan en archivos de configuración y de modelos generados, pero no son un límite de aislamiento de procesos. Una credencial en texto plano que quede en disco en una ruta que el agente pueda leer sigue siendo legible mediante herramientas de archivo o shell, eludiendo la redacción a nivel de API. Para despliegues de producción donde los archivos accesibles para el agente estén dentro del alcance, considera la migración completa solo cuando se cumpla todo lo siguiente:- Las credenciales compatibles usan SecretRefs en lugar de valores en texto plano.
- Los residuos heredados en texto plano se eliminan de
openclaw.json,auth-profiles.json,.envy los archivosmodels.jsongenerados. openclaw secrets audit --checkno informa problemas después de la migración.- Cualquier credencial restante no compatible o rotativa está protegida por aislamiento del sistema operativo, aislamiento de contenedor o un proxy de credenciales externo.
Filtrado de superficies activas
Los SecretRefs se validan solo en superficies efectivamente activas:- Superficies habilitadas: las referencias sin resolver bloquean el inicio o la recarga.
- Superficies inactivas: las referencias sin resolver no bloquean el inicio ni la recarga; emiten un diagnóstico no fatal
SECRETS_REF_IGNORED_INACTIVE_SURFACE.
Ejemplos de superficies inactivas
Ejemplos de superficies inactivas
- Entradas de canal/cuenta deshabilitadas.
- Credenciales de canal de nivel superior que ninguna cuenta habilitada hereda.
- Superficies de herramienta/funcionalidad deshabilitadas.
- Claves específicas del proveedor de búsqueda web no seleccionadas por
tools.web.search.provider. En modo automático (proveedor sin definir), las claves se consultan por precedencia para la detección automática hasta que una se resuelva; después de la selección, las claves de proveedores no seleccionados quedan inactivas. - El material de autenticación SSH de sandbox (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsData, más las sobrescrituras por agente) está activo solo cuando el backend de sandbox efectivo essshy el modo de sandbox no esoff, para el agente predeterminado o un agente habilitado. - Los SecretRefs
gateway.remote.token/gateway.remote.passwordestán activos si se cumple cualquiera de estas condiciones:gateway.mode=remotegateway.remote.urlestá configuradogateway.tailscale.modeesserveofunnel- En modo local sin esas superficies remotas:
gateway.remote.tokenestá activo cuando la autenticación con token puede ganar y no hay ningún token de entorno/autenticación configurado;gateway.remote.passwordestá activo solo cuando la autenticación con contraseña puede ganar y no hay ninguna contraseña de entorno/autenticación configurada.
- El SecretRef
gateway.auth.tokenestá inactivo para la resolución de autenticación de inicio cuandoOPENCLAW_GATEWAY_TOKENestá establecido, porque la entrada de token de entorno gana para ese runtime.
Diagnósticos de superficie de autenticación de Gateway
Cuando se establece un SecretRef engateway.auth.token, gateway.auth.password, gateway.remote.token o gateway.remote.password, el inicio o la recarga de Gateway registra el estado de la superficie con el código SECRETS_GATEWAY_AUTH_SURFACE:
active: el SecretRef forma parte de la superficie de autenticación efectiva y debe resolverse.inactive: otra superficie de autenticación gana, o la autenticación remota está deshabilitada/no activa.
Prevalidación de referencias en onboarding
En el onboarding interactivo, elegir almacenamiento SecretRef ejecuta una validación previa antes de guardar:- Referencias de entorno: valida el nombre de la variable de entorno y confirma que un valor no vacío sea visible durante la configuración.
- Referencias de proveedor (
fileoexec): valida la selección del proveedor, resuelveidy comprueba el tipo de valor resuelto. - Flujo de inicio rápido: cuando
gateway.auth.tokenya es un SecretRef, el onboarding lo resuelve antes del arranque de sonda/dashboard (para referenciasenv,fileyexec) usando la misma puerta de fallo rápido.
Contrato de SecretRef
Una forma de objeto en todas partes:- env
- file
- exec
providerdebe coincidir con^[a-z][a-z0-9_-]{0,63}$iddebe coincidir con^[A-Z][A-Z0-9_]{0,127}$
Configuración del proveedor
Define proveedores bajosecrets.providers:
Proveedor Env
Proveedor Env
- Lista de permitidos opcional por nombre exacto mediante
allowlist. - Los valores de entorno ausentes o vacíos hacen fallar la resolución.
Proveedor File
Proveedor File
- Lee el archivo local en
path. mode: "json"(predeterminado) espera una carga útil de objeto JSON y resuelveidcomo un puntero JSON.mode: "singleValue"espera el id de referencia"value"y devuelve el contenido sin procesar del archivo (sin el salto de línea final).- La ruta debe superar las comprobaciones de propiedad/permisos;
timeoutMs(predeterminado 5000) ymaxBytes(predeterminado 1 MiB) limitan la lectura. - Fallo cerrado en Windows: si la verificación de ACL no está disponible para la ruta, la resolución falla. Solo para rutas de confianza, establece
allowInsecurePath: trueen ese proveedor para omitir la comprobación.
Proveedor Exec
Proveedor Exec
- Ejecuta directamente la ruta absoluta del binario configurado, sin shell.
- De forma predeterminada,
commanddebe ser un archivo regular, no un enlace simbólico. EstableceallowSymlinkCommand: truepara permitir rutas de comando con enlace simbólico (por ejemplo, shims de Homebrew) y combínalo contrustedDirs(por ejemplo,["/opt/homebrew"]) para que solo califiquen rutas del gestor de paquetes. - Admite
timeoutMs(predeterminado 5000),noOutputTimeoutMs(predeterminado igual atimeoutMs),maxOutputBytes(predeterminado 1 MiB), lista de permitidosenv/passEnvytrustedDirs. jsonOnlytomatruede forma predeterminada. ConjsonOnly: falsey un único id solicitado, stdout sin JSON simple se acepta como el valor de ese id.- Fallo cerrado en Windows: si la verificación de ACL no está disponible para la ruta del comando, la resolución falla. Solo para rutas de confianza, establece
allowInsecurePath: trueen ese proveedor para omitir la comprobación. - Los proveedores exec gestionados por Plugin pueden usar
pluginIntegrationen lugar de uncommand/argscopiado. OpenClaw resuelve los detalles actuales del comando desde el manifiesto del Plugin instalado durante el inicio o la recarga; si el Plugin está deshabilitado, eliminado, no es de confianza o ya no declara la integración, los SecretRefs activos en ese proveedor fallan de forma cerrada.
Claves de API respaldadas por archivos
No pongas cadenasfile:... en el bloque env de configuración. Ese bloque es literal y no sobrescribe, por lo que file:... nunca se resuelve allí.
Usa un SecretRef de archivo en un campo de credencial compatible en su lugar:
mode: "singleValue", el id de SecretRef es "value". Para mode: "json", usa un puntero JSON absoluto como "/providers/xai/apiKey".
Consulta Superficie de credenciales SecretRef para ver los campos que aceptan SecretRefs.
Ejemplos de integración exec
CLI de 1Password
CLI de 1Password
Bitwarden Secrets Manager (`bws`)
Bitwarden Secrets Manager (`bws`)
Usa un envoltorio de resolución para asignar ids de SecretRef a claves de elementos de Bitwarden Secrets Manager. El repositorio incluye El resolver agrupa los identificadores solicitados, ejecuta
scripts/secrets/openclaw-bws-resolver.mjs; instálalo o cópialo en una ruta absoluta de confianza en el host que ejecuta el Gateway.Requisitos:- CLI de Bitwarden Secrets Manager (
bws) instalada en el host del Gateway. BWS_ACCESS_TOKENdisponible para el servicio del Gateway.PATHpasado al resolver, oBWS_BINestablecido en la ruta absoluta del binariobws.BWS_SERVER_URLestablecido en el entorno cuando se usa una instancia de Bitwarden autoalojada.
bws secret list y devuelve valores para los campos key de secretos coincidentes. Usa claves que cumplan el contrato de id de SecretRef exec, como openclaw/providers/openai/apiKey; las claves de estilo variable de entorno con guiones bajos se rechazan antes de que se ejecute el resolver. Si más de un secreto visible de Bitwarden comparte la clave solicitada, el resolver marca ese id como ambiguo en lugar de adivinar. Después de actualizar la configuración, verifica la ruta del resolver:CLI de HashiCorp Vault
CLI de HashiCorp Vault
password-store (`pass`)
password-store (`pass`)
Usa un pequeño contenedor de resolución para asignar ids de SecretRef directamente a entradas de Luego configura el proveedor exec y apunta Mantén el secreto en la primera línea de la entrada de
pass. Guárdalo como ejecutable en una ruta absoluta que supere tus comprobaciones de ruta de proveedor exec, por ejemplo /usr/local/bin/openclaw-pass-resolver. El shebang #!/usr/bin/env node resuelve node desde el PATH del proceso del resolver, así que incluye PATH en passEnv. Si pass no está en ese PATH, establece PASS_BIN en el entorno padre e inclúyelo también en passEnv:apiKey a la ruta de entrada de pass:pass, o personaliza el contenedor para devolver en su lugar la salida completa de pass show. Después de actualizar la configuración, verifica tanto la auditoría estática como la ruta del resolver exec:sops
sops
Variables de entorno del servidor MCP
Las variables de entorno del servidor MCP configuradas medianteplugins.entries.acpx.config.mcpServers aceptan SecretInput, lo que mantiene las claves de API y los tokens fuera de la configuración en texto plano:
${MCP_SERVER_API_KEY} y los objetos SecretRef se resuelven durante la activación del Gateway, antes de que se genere el proceso del servidor MCP. Como con otras superficies de SecretRef, las referencias sin resolver solo bloquean la activación cuando el Plugin acpx está efectivamente activo.
Material de autenticación SSH de sandbox
El backend de sandboxssh del núcleo también admite SecretRefs para material de autenticación SSH:
- OpenClaw resuelve estas referencias durante la activación del sandbox, no de forma diferida en cada llamada SSH.
- Los valores resueltos se escriben en un directorio temporal con permisos de archivo restrictivos (
0o600) y se usan en la configuración SSH generada. - Si el backend de sandbox efectivo no es
ssh(o el modo sandbox esoff), estas referencias permanecen inactivas y no bloquean el inicio.
Superficie de credenciales admitida
Las credenciales canónicas admitidas y no admitidas se enumeran en Superficie de credenciales de SecretRef.Las credenciales emitidas en tiempo de ejecución o rotatorias y el material de actualización OAuth se excluyen intencionalmente de la resolución SecretRef de solo lectura.
Comportamiento requerido y precedencia
- Campo sin una referencia: sin cambios.
- Campo con una referencia: obligatorio en superficies activas durante la activación.
- Si hay tanto texto plano como referencia, la referencia tiene precedencia en las rutas de precedencia admitidas.
- El centinela de redacción
__OPENCLAW_REDACTED__está reservado para la redacción/restauración interna de configuración y se rechaza como datos literales de configuración enviados.
SECRETS_REF_OVERRIDES_PLAINTEXT(advertencia en tiempo de ejecución)REF_SHADOWED(hallazgo de auditoría cuando las credenciales deauth-profiles.jsontienen precedencia sobre las referencias deopenclaw.json)
serviceAccountRef tiene precedencia sobre serviceAccount en texto plano; el valor en texto plano se ignora una vez configurada la referencia hermana.
Activadores de activación
La activación de secretos se ejecuta en:- Inicio (comprobación previa más activación final)
- Ruta de aplicación en caliente de recarga de configuración
- Ruta de comprobación de reinicio de recarga de configuración
- Recarga manual mediante
secrets.reload - Comprobación previa de RPC de escritura de configuración del Gateway (
config.set/config.apply/config.patch), que comprueba la resolubilidad de SecretRef de superficie activa dentro de la carga útil de configuración enviada antes de persistir las ediciones
- El éxito intercambia la instantánea de forma atómica.
- Un fallo de inicio aborta el inicio del gateway.
- Un fallo de recarga en tiempo de ejecución conserva la última instantánea conocida como buena.
- Un fallo de comprobación previa de RPC de escritura rechaza la configuración enviada; tanto la configuración en disco como la instantánea activa en tiempo de ejecución permanecen sin cambios.
- Proporcionar un token de canal explícito por llamada a una llamada saliente de helper/herramienta no activa SecretRef; los puntos de activación siguen siendo el inicio, la recarga y
secrets.reloadexplícito.
Señales degradadas y recuperadas
Cuando la activación en tiempo de recarga falla después de un estado saludable, OpenClaw entra en estado de secretos degradado, emitiendo eventos de sistema de una sola vez y códigos de registro:SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- Degradado: el tiempo de ejecución conserva la última instantánea conocida como buena.
- Recuperado: se emite una vez después de la siguiente activación correcta.
- Los fallos repetidos mientras ya está degradado registran advertencias, pero no vuelven a emitir el evento.
- El fallo rápido de inicio nunca emite un evento degradado, porque el tiempo de ejecución nunca llegó a estar activo.
Resolución de rutas de comandos
Las rutas de comandos pueden optar por la resolución SecretRef admitida mediante una RPC de instantánea del Gateway. Se aplican dos comportamientos generales:- Rutas de comandos estrictas
- Rutas de comandos de solo lectura
Por ejemplo, las rutas de memoria remota de
openclaw memory y openclaw qr --remote cuando necesita referencias de secreto compartido remoto. Leen desde la instantánea activa y fallan rápido cuando un SecretRef obligatorio no está disponible.- La actualización de instantánea después de la rotación de secretos del backend se gestiona mediante
openclaw secrets reload. - Método RPC del Gateway usado por estas rutas de comandos:
secrets.resolve.
Flujo de trabajo de auditoría y configuración
Flujo predeterminado del operador: No trates la migración como completa hasta que la nueva auditoría esté limpia. Si la auditoría todavía informa valores en texto sin formato en reposo, el riesgo de acceso por parte del agente permanece incluso cuando las API de runtime devuelven valores redactados. Si guardas un plan en lugar de aplicarlo duranteconfigure, aplica ese plan guardado con openclaw secrets apply --from <plan-path> antes de la nueva auditoría.
secrets audit
secrets audit
Los hallazgos incluyen:
- Valores en texto sin formato en reposo (
openclaw.json,auth-profiles.json,.envyagents/*/agent/models.jsongenerado). - Residuos de encabezados de proveedor sensibles en texto sin formato en entradas
models.jsongeneradas. - Referencias sin resolver.
- Sombreado de precedencia (
auth-profiles.jsontiene prioridad sobre las referencias deopenclaw.json). - Residuos heredados (
auth.json, recordatorios de OAuth).
openclaw secrets audit --allow-exec para ejecutar proveedores exec durante la auditoría.Nota sobre residuos de encabezados: la detección de encabezados de proveedor sensibles se basa en heurísticas de nombres (nombres comunes de encabezados de autenticación/credenciales y fragmentos como authorization, x-api-key, token, secret, password y credential).secrets configure
secrets configure
Asistente interactivo que:
- Configura primero
secrets.providers(env/file/exec, agregar/editar/eliminar). - Te permite seleccionar campos compatibles que contienen secretos en
openclaw.jsonademás deauth-profiles.jsonpara un ámbito de agente. - Puede crear una nueva asignación
auth-profiles.jsondirectamente en el selector de destino. - Captura detalles de SecretRef (
source,provider,id). - Ejecuta la resolución previa y puede aplicar inmediatamente.
--allow-exec. Si aplicas directamente desde configure --apply y el plan incluye referencias/proveedores exec, mantén --allow-exec establecido también para el paso de aplicación.Modos útiles:openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
configure:- Elimina credenciales estáticas coincidentes de
auth-profiles.jsonpara los proveedores seleccionados. - Elimina entradas estáticas heredadas
api_keydeauth.json. - Elimina líneas de secretos conocidos coincidentes de
<config-dir>/.env.
secrets apply
secrets apply
Aplica un plan guardado:Nota de exec: dry-run omite las comprobaciones de exec salvo que se establezca
--allow-exec; el modo de escritura rechaza planes que contengan SecretRefs/proveedores exec salvo que se establezca --allow-exec.Para detalles estrictos del contrato de destino/ruta y reglas exactas de rechazo, consulta Contrato del plan de aplicación de secretos.Política de seguridad unidireccional
Modelo de seguridad:- La comprobación previa debe completarse correctamente antes del modo de escritura.
- La activación del runtime se valida antes de la confirmación.
- La aplicación actualiza archivos mediante reemplazo atómico de archivos y restauración de máximo esfuerzo en caso de error.
Notas de compatibilidad de autenticación heredada
Para credenciales estáticas, el runtime ya no depende del almacenamiento de autenticación heredado en texto sin formato.- La fuente de credenciales del runtime es la instantánea resuelta en memoria.
- Las entradas estáticas heredadas
api_keyse eliminan al descubrirse. - El comportamiento de compatibilidad relacionado con OAuth permanece separado.
Nota sobre la interfaz web
Algunas uniones SecretInput son más fáciles de configurar en modo editor sin formato que en modo formulario.Relacionado
- Autenticación - configuración de autenticación
- CLI: secretos - comandos de CLI
- Variables de entorno - precedencia del entorno
- Superficie de credenciales SecretRef - superficie de credenciales
- Contrato del plan de aplicación de secretos - detalles del contrato del plan
- Seguridad - postura de seguridad