Gestion des secrets
OpenClaw prend en charge les SecretRefs additives afin que les identifiants pris en charge n’aient pas besoin d’être stockés en clair dans la configuration. Le texte brut continue de fonctionner. Les SecretRefs sont facultatives et s’activent credential par credential.Objectifs et modèle runtime
Les secrets sont résolus dans un instantané runtime en mémoire.- La résolution est anticipée pendant l’activation, pas paresseuse dans les chemins de requête.
- Le démarrage échoue immédiatement lorsqu’une SecretRef effectivement active ne peut pas être résolue.
- Le rechargement utilise un échange atomique : réussite complète, ou conservation du dernier instantané valide.
- Les violations de politique SecretRef (par exemple profils d’authentification en mode OAuth combinés à une entrée SecretRef) font échouer l’activation avant l’échange runtime.
- Les requêtes runtime lisent uniquement depuis l’instantané actif en mémoire.
- Après la première activation/charge réussie de la configuration, les chemins de code runtime continuent de lire cet instantané actif en mémoire jusqu’à ce qu’un rechargement réussi le remplace.
- Les chemins de livraison sortante lisent aussi depuis cet instantané actif (par exemple livraison Discord de réponse/fil et envois d’actions Telegram) ; ils ne résolvent pas à nouveau les SecretRefs à chaque envoi.
Filtrage des surfaces actives
Les SecretRefs ne sont validées que sur les surfaces effectivement actives.- Surfaces activées : les refs non résolues bloquent le démarrage/le rechargement.
- Surfaces inactives : les refs non résolues ne bloquent pas le démarrage/le rechargement.
- Les refs inactives émettent des diagnostics non fatals avec le code
SECRETS_REF_IGNORED_INACTIVE_SURFACE.
- Entrées de canal/compte désactivées.
- Identifiants de canal top-level dont aucun compte activé n’hérite.
- Surfaces d’outil/fonctionnalité désactivées.
- Clés spécifiques à un fournisseur de recherche web qui ne sont pas sélectionnées par
tools.web.search.provider. En mode auto (fournisseur non défini), les clés sont consultées par ordre de priorité pour l’auto-détection du fournisseur jusqu’à ce qu’une résolution réussisse. Après sélection, les clés des fournisseurs non sélectionnés sont traitées comme inactives jusqu’à leur sélection. - Matériel d’authentification SSH du sandbox (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsData, plus les remplacements par agent) n’est actif que lorsque le backend sandbox effectif estsshpour l’agent par défaut ou un agent activé. - Les SecretRefs
gateway.remote.token/gateway.remote.passwordsont actives si l’une de ces conditions est vraie :gateway.mode=remotegateway.remote.urlest configurégateway.tailscale.modevautserveoufunnel- En mode local sans ces surfaces distantes :
gateway.remote.tokenest actif lorsque l’authentification par jeton peut l’emporter et qu’aucun jeton env/auth n’est configuré.gateway.remote.passwordn’est actif que lorsque l’authentification par mot de passe peut l’emporter et qu’aucun mot de passe env/auth n’est configuré.
- La SecretRef
gateway.auth.tokenest inactive pour la résolution d’authentification au démarrage lorsqueOPENCLAW_GATEWAY_TOKENest défini, car l’entrée de jeton env est prioritaire pour ce runtime.
Diagnostics de surface d’authentification de la passerelle
Lorsqu’une SecretRef est configurée surgateway.auth.token, gateway.auth.password,
gateway.remote.token ou gateway.remote.password, le démarrage/rechargement de la passerelle journalise explicitement l’état de la
surface :
active: la SecretRef fait partie de la surface d’authentification effective et doit être résolue.inactive: la SecretRef est ignorée pour ce runtime parce qu’une autre surface d’authentification l’emporte, ou parce que l’authentification distante est désactivée/inactive.
SECRETS_GATEWAY_AUTH_SURFACE et incluent la raison utilisée par la
politique de surface active, afin que vous puissiez voir pourquoi un identifiant a été traité comme actif ou inactif.
Vérification préalable des références lors de l’onboarding
Lorsque l’onboarding s’exécute en mode interactif et que vous choisissez le stockage SecretRef, OpenClaw exécute une validation préalable avant l’enregistrement :- Réfs env : valide le nom de la variable d’environnement et confirme qu’une valeur non vide est visible pendant la configuration.
- Réfs provider (
fileouexec) : valide la sélection du fournisseur, résoutidet vérifie le type de la valeur résolue. - Chemin de réutilisation quickstart : lorsque
gateway.auth.tokenest déjà une SecretRef, l’onboarding le résout avant le bootstrap de la sonde/du tableau de bord (pour les refsenv,fileetexec) en utilisant la même barrière fail-fast.
Contrat SecretRef
Utilisez partout une seule forme d’objet :source: "env"
providerdoit correspondre à^[a-z][a-z0-9_-]{0,63}$iddoit correspondre à^[A-Z][A-Z0-9_]{0,127}$
source: "file"
providerdoit correspondre à^[a-z][a-z0-9_-]{0,63}$iddoit être un pointeur JSON absolu (/...)- Échappement RFC6901 dans les segments :
~=>~0,/=>~1
source: "exec"
providerdoit correspondre à^[a-z][a-z0-9_-]{0,63}$iddoit correspondre à^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$idne doit pas contenir.ou..comme segments de chemin séparés par des slashs (par exemplea/../best rejeté)
Configuration des fournisseurs
Définissez les fournisseurs soussecrets.providers :
Fournisseur env
- Liste d’autorisation facultative via
allowlist. - Les valeurs env manquantes/vides font échouer la résolution.
Fournisseur file
- Lit le fichier local depuis
path. mode: "json"attend une charge utile d’objet JSON et résoutidcomme pointeur.mode: "singleValue"attend l’ID de ref"value"et renvoie le contenu du fichier.- Le chemin doit passer les contrôles de propriété/autorisations.
- Remarque fail-closed Windows : si la vérification ACL n’est pas disponible pour un chemin, la résolution échoue. Pour des chemins de confiance uniquement, définissez
allowInsecurePath: truesur ce fournisseur pour contourner les vérifications de sécurité du chemin.
Fournisseur exec
- Exécute le chemin binaire absolu configuré, sans shell.
- Par défaut,
commanddoit pointer vers un fichier normal (pas un lien symbolique). - Définissez
allowSymlinkCommand: truepour autoriser les chemins de commande symlinkés (par exemple les shims Homebrew). OpenClaw valide le chemin cible résolu. - Associez
allowSymlinkCommandàtrustedDirspour les chemins de gestionnaires de packages (par exemple["/opt/homebrew"]). - Prend en charge le délai d’expiration, le délai sans sortie, les limites d’octets de sortie, la liste d’autorisation env et les répertoires de confiance.
- Remarque fail-closed Windows : si la vérification ACL n’est pas disponible pour le chemin de commande, la résolution échoue. Pour des chemins de confiance uniquement, définissez
allowInsecurePath: truesur ce fournisseur pour contourner les vérifications de sécurité du chemin.
Exemples d’intégration exec
1Password CLI
HashiCorp Vault CLI
sops
Variables d’environnement du serveur MCP
Les variables env du serveur MCP configurées viaplugins.entries.acpx.config.mcpServers prennent en charge SecretInput. Cela évite de conserver les clés API et les jetons en clair dans la configuration :
${MCP_SERVER_API_KEY} et les objets SecretRef sont résolus pendant l’activation de la passerelle avant le lancement du processus serveur MCP. Comme pour les autres surfaces SecretRef, les refs non résolues ne bloquent l’activation que lorsque le plugin acpx est effectivement actif.
Matériel d’authentification SSH du sandbox
Le backend coressh du sandbox prend aussi en charge les SecretRefs pour le matériel d’authentification SSH :
- OpenClaw résout ces refs pendant l’activation du sandbox, pas paresseusement pendant chaque appel SSH.
- Les valeurs résolues sont écrites dans des fichiers temporaires avec des autorisations restrictives et utilisées dans la configuration SSH générée.
- Si le backend sandbox effectif n’est pas
ssh, ces refs restent inactives et ne bloquent pas le démarrage.
Surface d’identifiants prise en charge
Les identifiants canoniques pris en charge et non pris en charge sont listés dans : Les identifiants générés au runtime ou rotatifs et le matériel de rafraîchissement OAuth sont volontairement exclus de la résolution SecretRef en lecture seule.Comportement requis et ordre de priorité
- Champ sans ref : inchangé.
- Champ avec ref : requis sur les surfaces actives pendant l’activation.
- Si le texte brut et la ref sont tous deux présents, la ref est prioritaire sur les chemins de priorité pris en charge.
- Le marqueur d’expurgation
__OPENCLAW_REDACTED__est réservé à l’expurgation/restauration interne de configuration et est rejeté comme donnée de configuration soumise littéralement.
SECRETS_REF_OVERRIDES_PLAINTEXT(avertissement runtime)REF_SHADOWED(constat d’audit lorsque les identifiantsauth-profiles.jsonsont prioritaires par rapport aux refsopenclaw.json)
serviceAccountRefest prioritaire surserviceAccounten clair.- La valeur en clair est ignorée lorsqu’une ref sœur est définie.
Déclencheurs d’activation
L’activation des secrets s’exécute sur :- Démarrage (pré-vérification plus activation finale)
- Chemin de hot-apply du rechargement de configuration
- Chemin restart-check du rechargement de configuration
- Rechargement manuel via
secrets.reload - Pré-vérification RPC d’écriture de configuration de la passerelle (
config.set/config.apply/config.patch) pour la résolvabilité des SecretRefs de surface active dans la charge utile de configuration soumise avant persistance des modifications
- Une réussite remplace l’instantané de façon atomique.
- Un échec au démarrage interrompt le démarrage de la passerelle.
- Un échec de rechargement runtime conserve le dernier instantané valide.
- Un échec de pré-vérification Write-RPC rejette la configuration soumise et laisse inchangés à la fois la configuration sur disque et l’instantané runtime actif.
- Fournir un jeton de canal explicite par appel à un helper/outils sortant ne déclenche pas l’activation SecretRef ; les points d’activation restent le démarrage, le rechargement et
secrets.reloadexplicite.
Signaux d’état dégradé et restauré
Lorsque l’activation au moment du rechargement échoue après un état sain, OpenClaw passe à un état de secrets dégradé. Codes d’événement système et de journal one-shot :SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- Dégradé : le runtime conserve le dernier instantané valide.
- Restauré : émis une fois après l’activation réussie suivante.
- Les échecs répétés alors que l’état est déjà dégradé journalisent des avertissements mais n’inondent pas les événements.
- L’échec rapide au démarrage n’émet pas d’événements dégradés car le runtime n’est jamais devenu actif.
Résolution dans les chemins de commande
Les chemins de commande peuvent activer la résolution SecretRef prise en charge via le RPC d’instantané de la passerelle. Il existe deux grands comportements :- Les chemins de commande stricts (par exemple les chemins de mémoire distante de
openclaw memoryetopenclaw qr --remotelorsqu’il a besoin de refs de secret partagé distant) lisent depuis l’instantané actif et échouent immédiatement lorsqu’une SecretRef requise n’est pas disponible. - Les chemins de commande en lecture seule (par exemple
openclaw status,openclaw status --all,openclaw channels status,openclaw channels resolve,openclaw security auditet les flux doctor/réparation de configuration en lecture seule) préfèrent aussi l’instantané actif, mais se dégradent au lieu d’interrompre lorsqu’une SecretRef ciblée n’est pas disponible dans ce chemin de commande.
- Lorsque la passerelle est en cours d’exécution, ces commandes lisent d’abord depuis l’instantané actif.
- Si la résolution de la passerelle est incomplète ou si la passerelle n’est pas disponible, elles tentent un repli local ciblé pour la surface de commande spécifique.
- Si une SecretRef ciblée reste indisponible, la commande continue avec une sortie en lecture seule dégradée et des diagnostics explicites tels que « configuré mais indisponible dans ce chemin de commande ».
- Ce comportement dégradé est local à la commande uniquement. Il n’affaiblit pas les chemins runtime de démarrage, de rechargement ou d’envoi/authentification.
- L’actualisation de l’instantané après rotation d’un secret backend se fait via
openclaw secrets reload. - Méthode RPC de passerelle utilisée par ces chemins de commande :
secrets.resolve.
Flux d’audit et de configuration
Flux opérateur par défaut :secrets audit
Les constats incluent :
- valeurs en clair au repos (
openclaw.json,auth-profiles.json,.envetagents/*/agent/models.jsongénérés) - résidus d’en-têtes sensibles de fournisseur en clair dans les entrées
models.jsongénérées - refs non résolues
- masquage par priorité (
auth-profiles.jsonprioritaire sur les refsopenclaw.json) - résidus hérités (
auth.json, rappels OAuth)
- Par défaut, l’audit ignore les vérifications de résolvabilité des SecretRefs exec afin d’éviter les effets de bord de commande.
- Utilisez
openclaw secrets audit --allow-execpour exécuter les fournisseurs exec pendant l’audit.
- La détection des en-têtes sensibles de fournisseur repose sur des heuristiques de nommage (noms et fragments courants d’en-têtes d’authentification/identifiants tels que
authorization,x-api-key,token,secret,passwordetcredential).
secrets configure
Assistant interactif qui :
- configure d’abord
secrets.providers(env/file/exec, ajout/édition/suppression) - vous permet de sélectionner des champs pris en charge porteurs de secrets dans
openclaw.jsonainsi queauth-profiles.jsonpour une portée d’agent - peut créer directement un nouveau mappage
auth-profiles.jsondans le sélecteur de cible - capture les détails de SecretRef (
source,provider,id) - exécute une résolution préalable
- peut appliquer immédiatement
- La pré-vérification ignore les contrôles SecretRef exec sauf si
--allow-execest défini. - Si vous appliquez directement depuis
configure --applyet que le plan inclut des refs/fournisseurs exec, gardez aussi--allow-execdéfini pour l’étape d’application.
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
configure :
- nettoie les identifiants statiques correspondants de
auth-profiles.jsonpour les fournisseurs ciblés - nettoie les anciennes entrées statiques
api_keydeauth.json - nettoie les lignes de secrets connues correspondantes de
<config-dir>/.env
secrets apply
Appliquer un plan enregistré :
- le dry-run ignore les contrôles exec sauf si
--allow-execest défini. - le mode écriture rejette les plans contenant des SecretRefs/fournisseurs exec sauf si
--allow-execest défini.
Politique de sécurité unidirectionnelle
OpenClaw n’écrit volontairement pas de sauvegardes de retour arrière contenant des valeurs historiques de secrets en clair. Modèle de sécurité :- la pré-vérification doit réussir avant le mode écriture
- l’activation runtime est validée avant validation finale
- apply met à jour les fichiers via remplacement atomique de fichier et restauration en meilleur effort en cas d’échec
Remarques de compatibilité avec l’authentification héritée
Pour les identifiants statiques, le runtime ne dépend plus du stockage d’authentification hérité en clair.- La source des identifiants runtime est l’instantané résolu en mémoire.
- Les anciennes entrées statiques
api_keysont nettoyées lorsqu’elles sont découvertes. - Le comportement de compatibilité lié à OAuth reste séparé.
Remarque sur l’interface Web
Certaines unionsSecretInput sont plus faciles à configurer en mode éditeur brut qu’en mode formulaire.
Documentation associée
- Commandes CLI : secrets
- Détails du contrat de plan : Contrat de plan d’application des secrets
- Surface d’identifiants : Surface d’identifiants SecretRef
- Configuration de l’authentification : Authentication
- Posture de sécurité : Security
- Priorité des variables d’environnement : Variables d’environnement