Skip to main content

openclaw policy

openclaw policy est fourni par le Plugin Policy intégré. Il constitue une couche de conformité d’entreprise appliquée aux paramètres OpenClaw existants, et non un second système de configuration. Vous définissez les exigences dans policy.jsonc ; OpenClaw observe l’espace de travail actif comme élément de preuve ; la stratégie signale les écarts au moyen de doctor --lint. La stratégie n’impose pas les appels d’outils et ne réécrit pas le comportement d’exécution lors du traitement des requêtes ; elle n’atteste pas non plus les magasins d’identifiants propres aux agents, tels que auth-profiles.json. La stratégie vérifie les canaux configurés, les serveurs MCP, les fournisseurs de modèles, la posture réseau relative aux SSRF, les accès entrants et aux canaux, l’exposition du Gateway et la posture des commandes des nœuds, l’accès des agents à l’espace de travail, la posture du bac à sable, la posture de traitement des données, la posture des fournisseurs de secrets et des profils d’authentification, ainsi que les métadonnées des outils régis (TOOLS.md). Utilisez-la lorsqu’un espace de travail nécessite une déclaration durable et vérifiable, telle que « Telegram ne doit pas être activé » ou « les outils régis doivent déclarer des métadonnées de risque et de propriétaire ». Si vous avez uniquement besoin d’un comportement local sans attestation ni détection des écarts, la configuration ordinaire suffit.

Démarrage rapide

Le Plugin reste activé même lorsque policy.jsonc est absent, afin que doctor puisse signaler l’artefact manquant au lieu d’ignorer silencieusement les vérifications. Rédigez policy.jsonc manuellement ; il n’est pas généré à partir des paramètres actuels. Chaque section de premier niveau constitue un espace de noms de règles : une vérification ne s’exécute que lorsqu’une règle concrète y est présente (les sections ou clés non prises en charge échouent avec policy/policy-jsonc-invalid au lieu d’être ignorées silencieusement). Exemple minimal couvrant toutes les sections prises en charge :
Remarques transversales qui ne ressortent pas clairement des tableaux de règles ci-dessous :
  • Omettre gateway.bind tout en interdisant les liaisons hors local loopback signifie que vous acceptez la valeur par défaut à l’exécution ; définissez gateway.bind: "loopback" pour une conformité stricte.
  • Pour un agent en lecture seule, définissez le mode du bac à sable sur all ou non-main dans les valeurs par défaut ou l’agent concerné, et workspaceAccess sur none ou ro. Un mode de bac à sable absent ou défini sur off ne satisfait pas une stratégie de lecture seule.
  • agents.workspace.denyTools accepte exec, process, write, edit, apply_patch. Les groupes de refus d’outils de la configuration group:fs (modification de fichiers) et group:runtime (shell/processus) satisfont la posture équivalente.
  • Les vérifications d’approbation d’exécution lisent l’artefact actif exec-approvals.json uniquement lorsqu’une règle execApprovals est présente ; un artefact absent ou non valide constitue une preuve non observable, et non une réussite synthétique.
  • Les éléments de preuve relatifs aux secrets et aux profils d’authentification enregistrent uniquement la posture du fournisseur ou de la source ainsi que les métadonnées SecretRef, jamais les valeurs brutes. La stratégie ne lit ni n’atteste les magasins d’identifiants propres aux agents, tels que auth-profiles.json.
  • Les éléments de preuve relatifs au traitement des données portent uniquement sur la posture au niveau de la configuration (mode de masquage, option de capture de télémétrie, mode de maintenance des sessions, paramètre d’indexation des transcriptions). Ils n’inspectent ni les journaux, ni les exportations de télémétrie, ni les transcriptions, ni les fichiers de mémoire, et un résultat conforme ne prouve pas qu’ils ne contiennent aucune donnée personnelle ni aucun secret.

Référence des règles de stratégie

Toutes les règles ci-dessous sont facultatives ; une vérification ne s’exécute que lorsque la règle est présente. L’état observé correspond à la configuration OpenClaw existante ou aux métadonnées de l’espace de travail.

Superpositions ciblées

Utilisez scopes.<scopeName> lorsque certains agents ou canaux nécessitent une stratégie plus stricte que la référence de premier niveau. Le nom de la portée est uniquement une étiquette ; la correspondance utilise le sélecteur situé dans la portée. Les superpositions sont cumulatives : la règle globale s’exécute toujours, et la règle ciblée peut ajouter son propre constat à partir des mêmes éléments de preuve. Si une entrée agentIds n’est pas présente dans agents.list[], OpenClaw évalue la règle ciblée par rapport à la posture globale ou par défaut héritée pour cet identifiant d’agent d’exécution, au lieu de l’ignorer.
Un même agent peut apparaître dans plusieurs portées si chacune régit un champ différent, comme ci-dessus. Un champ ciblé répété pour le même agent doit être aussi restrictif ou plus restrictif ; une déclaration dupliquée moins stricte est rejetée (les listes d’autorisation sont des sous-ensembles, les listes de refus sont des surensembles et les valeurs booléennes requises sont fixes). Les règles de posture des conteneurs (sandbox.containers.*) sont vérifiées uniquement par rapport aux éléments de preuve que le moteur de bac à sable de l’agent correspondant peut exposer. Si un moteur ne peut pas observer une règle que vous avez activée pour lui, la stratégie signale policy/sandbox-container-posture-unobservable au lieu de la considérer comme satisfaite ; limitez les règles de conteneur aux groupes d’agents qui utilisent un moteur capable de les exposer. La règle de premier niveau ingress.session.requireDmScope reste globale ; session.dmScope ne constitue pas un élément de preuve attribuable à un canal et ne peut donc pas être ciblé par channelIds. Chaque portée présente dans policy.jsonc doit être valide et applicable.

Canaux

Serveurs MCP

Fournisseurs de modèles

Réseau

Accès entrant et accès aux canaux

Gateway

gateway.nodes.denyCommands est une règle de sur-ensemble de refus exacte et sensible à la casse. Utilisez-la lorsque la stratégie doit prouver que les commandes privilégiées de nœud sont explicitement refusées par la configuration OpenClaw. Un déploiement qui autorise intentionnellement une commande privilégiée de nœud doit mettre à jour policy.jsonc après examen au lieu de s’appuyer uniquement sur gateway.nodes.allowCommands.

Espace de travail de l’agent

Configuration de sécurité du bac à sable

La stratégie considère un sandbox.mode absent comme sa valeur implicite par défaut off. Ainsi, sandbox.requireMode signale qu’un bac à sable nouveau ou non configuré ne figure pas dans une liste d’autorisation telle que ["all"].

Traitement des données

Secrets

Approbations d’exécution

Les vérifications des approbations d’exécution lisent l’artefact d’exécution exec-approvals.json : ~/.openclaw/exec-approvals.json par défaut, ou $OPENCLAW_STATE_DIR/exec-approvals.json lorsque OPENCLAW_STATE_DIR est défini. Les règles de configuration sous execApprovals.defaults.* ou execApprovals.agents.* exigent des preuves lisibles provenant de l’artefact ; un artefact absent ou non valide est signalé comme une preuve non observable plutôt que comme une validation au mieux. Une fois l’artefact lisible, les champs omis héritent des valeurs d’exécution par défaut : une valeur defaults.security absente vaut full, et la sécurité d’un agent absente hérite de cette valeur par défaut. Les preuves comprennent defaults, agents.*, agents.*.allowlist[].pattern, l’éventuel argPattern, la configuration effective d’autoAllowSkills et la source de l’entrée — jamais le chemin ou le jeton du socket, commandText, lastUsedCommand, les chemins résolus ni les horodatages. Exemple : exiger l’artefact d’approbations, refuser les valeurs par défaut permissives et autoriser uniquement la configuration d’approbation d’exécution examinée pour les agents sélectionnés.

Profils d’authentification

Métadonnées des outils

Posture des outils

Exécuter les vérifications

Exécutez uniquement les vérifications de politique pendant la rédaction :
policy check exécute uniquement l’ensemble des vérifications de politique et produit les éléments de preuve, les constats et les empreintes d’attestation. Les mêmes constats apparaissent également dans openclaw doctor --lint lorsque le Plugin Policy est activé. Comparez un fichier de politique d’opérateur à une référence rédigée :
policy compare vérifie la syntaxe d’un fichier de politique par rapport à celle d’un autre fichier de politique ; il n’inspecte pas l’état d’exécution, les éléments de preuve, les identifiants d’accès ni les secrets. Il utilise les mêmes métadonnées de règles que celles qui régissent les superpositions délimitées : les listes d’autorisation doivent rester identiques ou plus restrictives, les listes de refus doivent rester identiques ou plus larges, les booléens obligatoires doivent conserver leur valeur, les chaînes ordonnées ne peuvent évoluer que vers l’extrémité la plus stricte de l’ordre configuré, et les listes exactes doivent correspondre. La référence peut être une politique rédigée par l’organisation ; la politique vérifiée peut ajouter des valeurs plus strictes ou des règles supplémentaires. Une règle vérifiée de premier niveau peut satisfaire une règle de référence délimitée lorsqu’elle est aussi restrictive ou plus restrictive. Les noms de portées n’ont pas besoin de correspondre entre les fichiers ; la comparaison utilise le sélecteur (agentIds/channelIds) et le champ comme clés. Comparaison sans constat (--json) :
Une sortie sans constat de policy check --json inclut des empreintes stables qu’un opérateur ou un superviseur peut enregistrer :

Configurer la politique

La configuration de la politique se trouve sous plugins.entries.policy.config.
Définissez plugins.entries.policy.config.enabled sur false pour désactiver les vérifications de politique d’un espace de travail tout en laissant le Plugin installé.

Accepter l’état de la politique

Exemple de sortie JSON :
attestation.policy.hash identifie l’artefact de règles rédigé. evidence enregistre l’état OpenClaw observé utilisé par les vérifications, et workspace.hash identifie cette charge utile de preuve. findingsHash identifie l’ensemble exact des constats. checkedAt enregistre la date d’exécution de la vérification. attestationHash identifie l’affirmation stable (empreinte de la politique, empreinte des preuves, empreinte des constats et état sans constat/avec constats) et exclut délibérément checkedAt, de sorte qu’un même état de politique produit toujours la même empreinte d’attestation. Ensemble, ces quatre valeurs forment le tuple d’audit d’une vérification de politique. Si un Gateway ou un superviseur utilise la politique pour bloquer, approuver ou annoter une action d’exécution, il doit enregistrer l’empreinte d’attestation de la dernière vérification sans constat. checkedAt reste dans la sortie JSON pour les journaux d’audit, mais ne fait pas partie de l’empreinte stable. Cycle de vie de l’acceptation de l’état de la politique :
  1. Rédigez ou examinez policy.jsonc.
  2. Exécutez openclaw policy check --json.
  3. En l’absence de constat, enregistrez attestation.policy.hash comme expectedHash.
  4. Enregistrez attestation.attestationHash comme expectedAttestationHash.
  5. Réexécutez openclaw doctor --lint dans les contrôles de CI ou de publication.
Si les règles de politique changent intentionnellement, mettez à jour les deux hachages acceptés à partir d’une vérification propre. Si seuls les paramètres de l’espace de travail changent (la politique reste identique), seul expectedAttestationHash change généralement. L’activation ou la mise à niveau des règles agents.workspace ajoute des éléments de preuve agentWorkspace au hachage de l’espace de travail et au hachage d’attestation ; examinez les nouveaux éléments de preuve et actualisez les hachages d’attestation acceptés après l’activation. L’activation ou la mise à niveau des règles de posture des outils ajoute de la même manière des éléments de preuve toolPosture. openclaw policy watch réexécute la vérification et signale lorsque les éléments de preuve actuels ne correspondent plus à expectedAttestationHash :
Utilisez --once dans la CI ou dans les scripts nécessitant une seule évaluation de dérive. Sans --once, la commande interroge par défaut toutes les deux secondes ; utilisez --interval-ms pour modifier l’intervalle.

Constats

Un constat peut inclure à la fois target (l’élément observé dans l’espace de travail qui n’est pas conforme) et requirement (la règle définie qui a produit le constat). Ces deux champs sont actuellement des chaînes d’adresse oc://, mais leurs noms décrivent leur rôle dans la politique plutôt que le format de l’adresse. Exemples de constats :

Réparation

doctor --lint et policy check sont en lecture seule. doctor --fix ne modifie les paramètres de l’espace de travail gérés par la politique que lorsque workspaceRepairs est explicitement activé ; sinon, les vérifications indiquent ce qu’elles répareraient et laissent les paramètres inchangés. Dans cette version, la réparation peut désactiver les canaux interdits par channels.denyRules et appliquer les réparations automatiques de restriction répertoriées ci-dessous. N’activez workspaceRepairs qu’après avoir examiné le fichier de politique, car une règle valide peut modifier la configuration de l’espace de travail :
  • définir tools.elevated.enabled=false lorsqu’une politique globale interdit les outils à privilèges élevés
  • ajouter les identifiants d’outils manquants dont l’interdiction est obligatoire à tools.deny ou agents.list[].tools.deny lorsque la politique exige que ces outils soient interdits
  • définir les options non sécurisées gateway.controlUi.* sur false
  • définir gateway.mode=local lorsque la politique interdit le mode Gateway distant
  • définir sur false les chemins gateway.http.endpoints.*.enabled signalés lorsque la politique interdit les points de terminaison de l’API HTTP du Gateway
  • définir sur allowlist les chemins groupPolicy signalés pour les entrées de canal lorsque la politique interdit les entrées de groupe ouvertes
  • définir sur true les chemins requireMention signalés pour les entrées de canal lorsque la politique exige des mentions dans les groupes
  • définir logging.redactSensitive=tools lorsque la politique exige le masquage des données sensibles dans les journaux
  • définir diagnostics.otel.captureContent=false, ou diagnostics.otel.captureContent.enabled=false pour les paramètres de capture télémétrique sous forme d’objet, lorsque la politique interdit la capture du contenu télémétrique
Les réparations ciblées des outils à privilèges élevés sont uniquement détectées. Les réparations ciblées du traitement des données sont également ignorées lorsque le constat signale une configuration partagée de journalisation ou de télémétrie, car la modification du paramètre partagé affecterait davantage que la cible de politique concernée. Les réparations ciblées des interdictions obligatoires sont ignorées lorsque le constat signale un tools.deny racine hérité, car l’ajout de l’outil requis à la configuration racine affecterait davantage que la cible de politique concernée. Les réparations locales à un agent des interdictions obligatoires peuvent mettre à jour le chemin agents.list[].tools.deny signalé. Les réparations ciblées des entrées de canal sont ignorées lorsque le constat signale un channels.defaults.* hérité, car la modification de la valeur par défaut partagée du canal affecterait davantage que la cible de politique concernée. Les constats relatifs à la liste d’autorisation de récupération d’URL HTTP du Gateway restent manuels, car la réparation automatique ne peut pas choisir les valeurs correctes de la liste d’autorisation des URL de point de terminaison. Les constats relatifs à la liaison et aux commandes de nœud du Gateway nécessitent toujours un examen. Lorsque policy/gateway-non-loopback-bind ou policy/gateway-node-command-denied peut être associé à un chemin de configuration, doctor --fix signale la modification proposée de gateway.bind ou gateway.nodes.denyCommands comme un aperçu ignoré à titre indicatif. Il n’applique pas la modification, et le constat n’est pas considéré comme réparé tant qu’un opérateur n’a pas examiné et mis à jour la configuration ou la politique.

Codes de sortie

Voir aussi