Klartext funktioniert weiterhin. SecretRefs sind pro Zugangsdaten opt-in.
Ziele und Laufzeitmodell
Secrets werden in einen In-Memory-Laufzeit-Snapshot aufgelöst.- Die Auflösung erfolgt während der Aktivierung eifrig, nicht lazy auf Anfragepfaden.
- Der Start schlägt schnell fehl, wenn ein effektiv aktiver SecretRef nicht aufgelöst werden kann.
- Reload verwendet atomaren Austausch: vollständiger Erfolg oder Beibehaltung des zuletzt als gut bekannten Snapshots.
- SecretRef-Policy-Verstöße (zum Beispiel Auth-Profile im OAuth-Modus in Kombination mit SecretRef-Eingabe) lassen die Aktivierung vor dem Laufzeitaustausch fehlschlagen.
- Laufzeitanfragen lesen ausschließlich aus dem aktiven In-Memory-Snapshot.
- Nach der ersten erfolgreichen Konfigurationsaktivierung bzw. dem ersten erfolgreichen Laden lesen Laufzeit-Codepfade weiter aus diesem aktiven In-Memory-Snapshot, bis ein erfolgreicher Reload ihn austauscht.
- Ausgehende Zustellpfade lesen ebenfalls aus diesem aktiven Snapshot (zum Beispiel Discord-Antwort-/Thread-Zustellung und Telegram-Aktionssendungen); sie lösen SecretRefs nicht bei jedem Senden erneut auf.
Agent-Zugriffsgrenze
SecretRefs schützen Zugangsdaten davor, in unterstützter Konfiguration und generierten Modelloberflächen persistiert zu werden, sie sind jedoch keine Prozessisolationsgrenze. Wenn ein Klartext-Zugangsdatenwert auf der Festplatte in einem Pfad verbleibt, den der Agent lesen kann, kann der Agent Redaktion auf API-Ebene umgehen, indem er Datei- oder Shell-Tools verwendet, um diese Datei einzusehen. Behandeln Sie bei Produktionsbereitstellungen, bei denen für Agents zugängliche Dateien im Geltungsbereich liegen, die SecretRef-Migration nur dann als abgeschlossen, wenn all dies zutrifft:- unterstützte Zugangsdaten verwenden SecretRefs statt Klartextwerten
- veraltete Klartextreste wurden aus
openclaw.json,auth-profiles.json,.envund generiertenmodels.json-Dateien entfernt openclaw secrets audit --checkist nach der Migration sauber- alle verbleibenden nicht unterstützten oder rotierenden Zugangsdaten sind durch Betriebssystemisolation, Container-Isolation oder einen externen Zugangsdaten-Proxy geschützt
Filterung aktiver Oberflächen
SecretRefs werden nur auf effektiv aktiven Oberflächen validiert.- Aktivierte Oberflächen: nicht aufgelöste Referenzen blockieren Start/Reload.
- Inaktive Oberflächen: nicht aufgelöste Referenzen blockieren Start/Reload nicht.
- Inaktive Referenzen geben nicht-fatale Diagnosen mit dem Code
SECRETS_REF_IGNORED_INACTIVE_SURFACEaus.
Beispiele für inaktive Oberflächen
Beispiele für inaktive Oberflächen
- Deaktivierte Channel-/Konto-Einträge.
- Top-Level-Channel-Zugangsdaten, die kein aktiviertes Konto erbt.
- Deaktivierte Tool-/Feature-Oberflächen.
- Websuche-Provider-spezifische Schlüssel, die nicht durch
tools.web.search.providerausgewählt sind. Im Automodus (Provider nicht gesetzt) werden Schlüssel entsprechend ihrer Priorität für die automatische Provider-Erkennung herangezogen, bis einer aufgelöst wird. Nach der Auswahl werden nicht ausgewählte Provider-Schlüssel als inaktiv behandelt, bis sie ausgewählt werden. - Sandbox-SSH-Auth-Material (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsDataplus agentenspezifische Überschreibungen) ist nur aktiv, wenn das effektive Sandbox-Backend für den Standard-Agent oder einen aktivierten Agentsshist. gateway.remote.token- /gateway.remote.password-SecretRefs sind aktiv, wenn eine dieser Bedingungen zutrifft:gateway.mode=remotegateway.remote.urlist konfiguriertgateway.tailscale.modeistserveoderfunnel- Im lokalen Modus ohne diese Remote-Oberflächen:
gateway.remote.tokenist aktiv, wenn Token-Auth gewinnen kann und kein Env-/Auth-Token konfiguriert ist.gateway.remote.passwordist nur aktiv, wenn Passwort-Auth gewinnen kann und kein Env-/Auth-Passwort konfiguriert ist.
gateway.auth.token-SecretRef ist für die Auth-Auflösung beim Start inaktiv, wennOPENCLAW_GATEWAY_TOKENgesetzt ist, weil Env-Token-Eingabe für diese Laufzeit Vorrang hat.
Diagnosen der Gateway-Auth-Oberfläche
Wenn ein SecretRef aufgateway.auth.token, gateway.auth.password, gateway.remote.token oder gateway.remote.password konfiguriert ist, protokolliert Gateway-Start/Reload den Oberflächenzustand explizit:
active: Der SecretRef ist Teil der effektiven Auth-Oberfläche und muss aufgelöst werden.inactive: Der SecretRef wird für diese Laufzeit ignoriert, weil eine andere Auth-Oberfläche Vorrang hat oder weil Remote-Auth deaktiviert/nicht aktiv ist.
SECRETS_GATEWAY_AUTH_SURFACE protokolliert und enthalten den Grund, den die Policy für aktive Oberflächen verwendet. So können Sie sehen, warum ein Zugangsdatenwert als aktiv oder inaktiv behandelt wurde.
Onboarding-Referenz-Preflight
Wenn Onboarding im interaktiven Modus läuft und Sie SecretRef-Speicherung auswählen, führt OpenClaw vor dem Speichern eine Preflight-Validierung aus:- Env-Referenzen: validiert den Namen der Env-Variable und bestätigt, dass während der Einrichtung ein nicht leerer Wert sichtbar ist.
- Provider-Referenzen (
fileoderexec): validiert die Provider-Auswahl, löstidauf und prüft den Typ des aufgelösten Werts. - Quickstart-Wiederverwendungspfad: Wenn
gateway.auth.tokenbereits ein SecretRef ist, löst Onboarding ihn vor Probe-/Dashboard-Bootstrap (fürenv-,file- undexec-Referenzen) mit demselben Fail-Fast-Gate auf.
SecretRef-Vertrag
Verwenden Sie überall dieselbe Objektform:- env
- file
- exec
providermuss^[a-z][a-z0-9_-]{0,63}$entsprechenidmuss^[A-Z][A-Z0-9_]{0,127}$entsprechen
Provider-Konfiguration
Definieren Sie Provider untersecrets.providers:
Env-Provider
Env-Provider
- Optionale Allowlist über
allowlist. - Fehlende/leere Env-Werte lassen die Auflösung fehlschlagen.
Datei-Provider
Datei-Provider
- Liest lokale Datei aus
path. mode: "json"erwartet eine JSON-Objekt-Payload und löstidals Pointer auf.mode: "singleValue"erwartet die Referenz-ID"value"und gibt Dateiinhalte zurück.- Der Pfad muss Eigentümer-/Berechtigungsprüfungen bestehen.
- Windows-Fail-Closed-Hinweis: Wenn ACL-Verifizierung für einen Pfad nicht verfügbar ist, schlägt die Auflösung fehl. Setzen Sie nur für vertrauenswürdige Pfade
allowInsecurePath: trueauf diesem Provider, um Pfadsicherheitsprüfungen zu umgehen.
Exec-Provider
Exec-Provider
- Führt den konfigurierten absoluten Binärpfad ohne Shell aus.
- Standardmäßig muss
commandauf eine reguläre Datei zeigen (kein Symlink). - Setzen Sie
allowSymlinkCommand: true, um Symlink-Befehlspfade zuzulassen (zum Beispiel Homebrew-Shims). OpenClaw validiert den aufgelösten Zielpfad. - Kombinieren Sie
allowSymlinkCommandmittrustedDirsfür Paketmanager-Pfade (zum Beispiel["/opt/homebrew"]). - Unterstützt Timeout, Timeout bei fehlender Ausgabe, Ausgabebyte-Limits, Env-Allowlist und vertrauenswürdige Verzeichnisse.
- Windows-Fail-Closed-Hinweis: Wenn ACL-Verifizierung für den Befehlspfad nicht verfügbar ist, schlägt die Auflösung fehl. Setzen Sie nur für vertrauenswürdige Pfade
allowInsecurePath: trueauf diesem Provider, um Pfadsicherheitsprüfungen zu umgehen. - Plugin-verwaltete Exec-Provider können
pluginIntegrationstatt kopiertemcommand/argsverwenden. OpenClaw löst die aktuellen Befehlsdetails während Start/Reload aus dem installierten Plugin-Manifest auf. Wenn das Plugin deaktiviert, entfernt, nicht vertrauenswürdig ist oder die Integration nicht mehr deklariert, schlagen aktive SecretRefs, die diesen Provider verwenden, geschlossen fehl.
Dateibasierte API-Schlüssel
Legen Sie keinefile:...-Strings in den env-Block der Konfiguration. Der env-Block ist
literal und nicht überschreibend, daher wird file:... nicht aufgelöst.
Verwenden Sie stattdessen einen Datei-SecretRef auf einem unterstützten Zugangsdatenfeld:
mode: "singleValue" ist die SecretRef-id "value". Für
mode: "json" verwenden Sie einen absoluten JSON-Pointer wie
"/providers/xai/apiKey".
Siehe SecretRef-Zugangsdatenoberfläche für
die Konfigurationsfelder, die SecretRefs akzeptieren.
Exec-Integrationsbeispiele
1Password CLI
1Password CLI
Bitwarden Secrets Manager (`bws`)
Bitwarden Secrets Manager (`bws`)
Verwenden Sie einen Resolver-Wrapper, wenn SecretRef-IDs Bitwarden
Secrets Manager-Elementschlüsseln zugeordnet werden sollen. Das Repository enthält
Der Resolver bündelt angeforderte IDs, führt
scripts/secrets/openclaw-bws-resolver.mjs; installieren oder kopieren Sie es in einen absoluten,
vertrauenswürdigen Pfad auf dem Host, auf dem der Gateway ausgeführt wird.Anforderungen:- Bitwarden Secrets Manager CLI (
bws) ist auf dem Gateway-Host installiert. BWS_ACCESS_TOKENist für den Gateway-Dienst verfügbar.PATHwird an den Resolver übergeben, oderBWS_BINist auf den absoluten Binärpfad vonbwsgesetzt.BWS_SERVER_URLmuss in der Umgebung gesetzt sein, wenn eine selbst gehostete Bitwarden-Instanz verwendet wird.
bws secret list aus und gibt
Werte für passende geheime key-Felder zurück. Verwenden Sie Schlüssel, die den exec
SecretRef-ID-Vertrag erfüllen, etwa openclaw/providers/openai/apiKey; Env-Var-
Schlüssel im Stil mit Unterstrichen werden abgelehnt, bevor der Resolver ausgeführt wird. Wenn mehr
als ein sichtbares Bitwarden-Geheimnis denselben angeforderten Schlüssel hat, lässt der Resolver
diese ID wegen Mehrdeutigkeit fehlschlagen, statt eines auszuwählen. Prüfen Sie nach der Aktualisierung der Konfiguration
den Resolver-Pfad:HashiCorp Vault CLI
HashiCorp Vault CLI
password-store (`pass`)
password-store (`pass`)
Verwenden Sie einen kleinen Resolver-Wrapper, wenn SecretRef-IDs direkt
Konfigurieren Sie anschließend den exec-Provider und richten Sie Bewahren Sie das Geheimnis in der ersten Zeile des
pass-Einträgen zugeordnet werden sollen. Speichern Sie dies als ausführbare Datei in einem absoluten Pfad, der
Ihre exec-Provider-Pfadprüfungen besteht, zum Beispiel
/usr/local/bin/openclaw-pass-resolver. Der #!/usr/bin/env node-Shebang
löst node aus dem PATH des Resolver-Prozesses auf, nehmen Sie daher PATH in
passEnv auf. Wenn pass nicht in diesem PATH liegt, setzen Sie PASS_BIN in der übergeordneten
Umgebung und nehmen Sie es ebenfalls in passEnv auf:apiKey auf den pass-Eintragspfad:pass-Eintrags auf, oder passen Sie den
Wrapper an, wenn Sie stattdessen die vollständige Ausgabe von pass show zurückgeben möchten. Prüfen Sie nach
der Aktualisierung der Konfiguration sowohl das statische Audit als auch den exec-Resolver-Pfad:sops
sops
MCP-Server-Umgebungsvariablen
MCP-Server-Env-Vars, die überplugins.entries.acpx.config.mcpServers konfiguriert sind, unterstützen SecretInput. Dadurch bleiben API-Schlüssel und Tokens außerhalb der Klartextkonfiguration:
${MCP_SERVER_API_KEY} und SecretRef-Objekte werden während der Gateway-Aktivierung aufgelöst, bevor der MCP-Server-Prozess gestartet wird. Wie bei anderen SecretRef-Oberflächen blockieren nicht aufgelöste Refs die Aktivierung nur, wenn das acpx-Plugin effektiv aktiv ist.
SSH-Auth-Material für Sandbox
Das zentralessh-Sandbox-Backend unterstützt ebenfalls SecretRefs für SSH-Auth-Material:
- OpenClaw löst diese Refs während der Sandbox-Aktivierung auf, nicht verzögert bei jedem SSH-Aufruf.
- Aufgelöste Werte werden in temporäre Dateien mit restriktiven Berechtigungen geschrieben und in der generierten SSH-Konfiguration verwendet.
- Wenn das effektive Sandbox-Backend nicht
sshist, bleiben diese Refs inaktiv und blockieren den Start nicht.
Unterstützte Anmeldeinformationsoberfläche
Kanonisch unterstützte und nicht unterstützte Anmeldeinformationen sind hier aufgeführt:Zur Laufzeit erstellte oder rotierende Anmeldeinformationen und OAuth-Refresh-Material sind absichtlich von der schreibgeschützten SecretRef-Auflösung ausgeschlossen.
Erforderliches Verhalten und Vorrang
- Feld ohne Ref: unverändert.
- Feld mit Ref: auf aktiven Oberflächen während der Aktivierung erforderlich.
- Wenn sowohl Klartext als auch Ref vorhanden sind, hat Ref auf unterstützten Vorrangpfaden Vorrang.
- Der Redaktions-Sentinel
__OPENCLAW_REDACTED__ist für interne Konfigurationsredaktion/-wiederherstellung reserviert und wird als wörtlich übermittelte Konfigurationsdaten abgelehnt.
SECRETS_REF_OVERRIDES_PLAINTEXT(Laufzeitwarnung)REF_SHADOWED(Audit-Befund, wennauth-profiles.json-Anmeldeinformationen Vorrang voropenclaw.json-Refs haben)
serviceAccountRefhat Vorrang vor Klartext-serviceAccount.- Der Klartextwert wird ignoriert, wenn eine benachbarte Ref gesetzt ist.
Aktivierungsauslöser
Die Geheimnisaktivierung wird ausgeführt bei:- Start (Preflight plus abschließende Aktivierung)
- Hot-Apply-Pfad beim Neuladen der Konfiguration
- Restart-Check-Pfad beim Neuladen der Konfiguration
- Manuellem Neuladen über
secrets.reload - Gateway-Konfigurationsschreib-RPC-Preflight (
config.set/config.apply/config.patch) für die Auflösbarkeit von SecretRefs auf aktiven Oberflächen innerhalb der übermittelten Konfigurationsnutzlast vor dem Persistieren von Änderungen
- Erfolg tauscht den Snapshot atomar aus.
- Ein Startfehler bricht den Gateway-Start ab.
- Ein Laufzeit-Neuladefehler behält den zuletzt bekannten funktionsfähigen Snapshot bei.
- Ein Write-RPC-Preflight-Fehler lehnt die übermittelte Konfiguration ab und lässt sowohl die Datenträgerkonfiguration als auch den aktiven Laufzeit-Snapshot unverändert.
- Das Bereitstellen eines expliziten Kanal-Tokens pro Aufruf für einen ausgehenden Helper-/Tool-Aufruf löst keine SecretRef-Aktivierung aus; Aktivierungspunkte bleiben Start, Neuladen und explizites
secrets.reload.
Signale für beeinträchtigten und wiederhergestellten Zustand
Wenn die Aktivierung beim Neuladen nach einem fehlerfreien Zustand fehlschlägt, wechselt OpenClaw in einen beeinträchtigten Geheimniszustand. Einmalige Systemereignis- und Protokollcodes:SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- Beeinträchtigt: Die Laufzeit behält den zuletzt bekannten funktionsfähigen Snapshot bei.
- Wiederhergestellt: Wird einmal nach der nächsten erfolgreichen Aktivierung ausgegeben.
- Wiederholte Fehler, während der Zustand bereits beeinträchtigt ist, protokollieren Warnungen, erzeugen aber keine Ereignisflut.
- Start-Fail-Fast gibt keine Ereignisse für beeinträchtigten Zustand aus, weil die Laufzeit nie aktiv wurde.
Befehlspfadauflösung
Befehlspfade können sich über Gateway-Snapshot-RPC für unterstützte SecretRef-Auflösung entscheiden. Es gibt zwei allgemeine Verhaltensweisen:- Strikte Befehlspfade
- Schreibgeschützte Befehlspfade
Zum Beispiel
openclaw memory-Remote-Memory-Pfade und openclaw qr --remote, wenn Remote-Shared-Secret-Refs benötigt werden. Sie lesen aus dem aktiven Snapshot und schlagen schnell fehl, wenn eine erforderliche SecretRef nicht verfügbar ist.- Die Snapshot-Aktualisierung nach einer Secret-Rotation im Backend wird von
openclaw secrets reloadbehandelt. - Von diesen Befehlspfaden verwendete Gateway-RPC-Methode:
secrets.resolve.
Audit- und Konfigurationsworkflow
Standardmäßiger Operator-Flow: Betrachten Sie die Migration erst als abgeschlossen, wenn der erneute Audit sauber ist. Wenn der Audit weiterhin Klartextwerte im Ruhezustand meldet, besteht das Risiko des Agent-Zugriffs weiterhin, auch wenn Laufzeit-APIs redigierte Werte zurückgeben. Wenn Sie währendconfigure einen Plan speichern, statt ihn anzuwenden, wenden Sie diesen gespeicherten Plan
vor dem erneuten Audit mit openclaw secrets apply --from <plan-path> an.
secrets audit
secrets audit
Befunde umfassen:
- Klartextwerte im Ruhezustand (
openclaw.json,auth-profiles.json,.envund generierteagents/*/agent/models.json) - Klartextreste sensibler Provider-Header in generierten
models.json-Einträgen - nicht aufgelöste Refs
- Prioritätsverschattung (
auth-profiles.jsonhat Vorrang voropenclaw.json-Refs) - Legacy-Reste (
auth.json, OAuth-Erinnerungen)
- Standardmäßig überspringt der Audit Auflösbarkeitsprüfungen für exec-SecretRefs, um Nebenwirkungen von Befehlen zu vermeiden.
- Verwenden Sie
openclaw secrets audit --allow-exec, um exec-Provider während des Audits auszuführen.
- Die Erkennung sensibler Provider-Header basiert auf Namensheuristiken (gängige Authentifizierungs-/Zugangsdaten-Headernamen und Fragmente wie
authorization,x-api-key,token,secret,passwordundcredential).
secrets configure
secrets configure
Interaktiver Helfer, der:
- zuerst
secrets.providerskonfiguriert (env/file/exec, hinzufügen/bearbeiten/entfernen) - Sie unterstützte Felder mit Secrets in
openclaw.jsonplusauth-profiles.jsonfür einen Agent-Scope auswählen lässt - direkt in der Zielauswahl eine neue
auth-profiles.json-Zuordnung erstellen kann - SecretRef-Details erfasst (
source,provider,id) - Preflight-Auflösung ausführt
- sofort anwenden kann
- Preflight überspringt exec-SecretRef-Prüfungen, sofern
--allow-execnicht gesetzt ist. - Wenn Sie direkt aus
configure --applyanwenden und der Plan exec-Refs/-Provider enthält, lassen Sie--allow-execauch für den Anwendungsschritt gesetzt.
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
configure-Anwendungsstandards:- passende statische Zugangsdaten aus
auth-profiles.jsonfür gezielte Provider bereinigen - statische Legacy-
api_key-Einträge ausauth.jsonbereinigen - passende bekannte Secret-Zeilen aus
<config-dir>/.envbereinigen
secrets apply
secrets apply
Einen gespeicherten Plan anwenden:Exec-Hinweis:
- dry-run überspringt exec-Prüfungen, sofern
--allow-execnicht gesetzt ist. - Der Schreibmodus weist Pläne zurück, die exec-SecretRefs/-Provider enthalten, sofern
--allow-execnicht gesetzt ist.
Einweg-Sicherheitsrichtlinie
Sicherheitsmodell:- Preflight muss erfolgreich sein, bevor der Schreibmodus verwendet wird
- Laufzeitaktivierung wird vor dem Commit validiert
- Apply aktualisiert Dateien mit atomarer Dateiersetzung und Best-Effort-Wiederherstellung bei Fehlern
Hinweise zur Legacy-Auth-Kompatibilität
Für statische Zugangsdaten hängt die Laufzeit nicht mehr von Klartext-Legacy-Auth-Speicher ab.- Die Quelle für Laufzeit-Zugangsdaten ist der aufgelöste In-Memory-Snapshot.
- Statische Legacy-
api_key-Einträge werden bereinigt, wenn sie entdeckt werden. - OAuth-bezogenes Kompatibilitätsverhalten bleibt getrennt.
Hinweis zur Web-UI
Einige SecretInput-Unions lassen sich im Roh-Editor-Modus leichter konfigurieren als im Formularmodus.Verwandte Themen
- Authentifizierung — Auth-Einrichtung
- CLI: secrets — CLI-Befehle
- Umgebungsvariablen — Umgebungspriorität
- SecretRef-Zugangsdatenoberfläche — Zugangsdatenoberfläche
- Secrets Apply Plan-Vertrag — Details zum Planvertrag
- Sicherheit — Sicherheitsstatus