OpenClaw SecretRef richtig einsetzen: Secrets, Rotationen und typische Fehlerbilder
Wie du OpenClaw-SecretRefs sauber einrichtest, typische Secret-Fehler erkennst und Plaintext-Keys aus Konfiguration, Logs und Backups heraushältst.
Wenn OpenClaw plötzlich mit ungültigen Tokens startet, ein Channel nach einer Rotation keine Replies mehr verschickt oder openclaw.json längst keine Klartext-Secrets mehr enthalten soll, landet man schnell bei SecretRef. Genau dort passieren in der Praxis aber die typischen Fehler: ein falscher Provider, eine inaktive Referenz, ein Secret im Git-Verlauf oder ein sauberer Ref auf einen unsicheren Speicherort.
OpenClaw bietet mit SecretRef einen klaren Weg aus dieser Falle. Statt den sensiblen Wert selbst in openclaw.json zu schreiben, speichert die Konfiguration nur eine strukturierte Referenz. Der eigentliche Wert kommt zur Laufzeit aus einem Secret-Backend, etwa aus einer Environment-Variable, einer separaten Datei oder einem externen Resolver.
Das passt zur breiteren Sicherheitslogik von OpenClaw: Approval-Hooks und Security-Audits machen riskante Oberflächen sichtbar, Exec-Approvals und Sandboxing begrenzen Folgeschäden, und eine saubere Backup- und Update-Routine trennt Konfiguration von Geheimnissen. SecretRef ist der Baustein, der verhindert, dass produktive Zugangsdaten überhaupt in den falschen Dateien landen.
Kurz gesagt: In der normalen Konfiguration steht nur noch, wo OpenClaw einen Key findet. Der eigentliche Wert bleibt außerhalb der üblichen Konfigurationsblöcke. Das ist weniger bequem als Copy-and-paste, aber deutlich robuster.
Voraussetzungen
Für die Beispiele brauchst du:
- eine bestehende OpenClaw-Installation,
- Zugriff auf die aktive Konfigurationsdatei (
openclaw config filezeigt sie an), - die OpenClaw-CLI mit
openclaw config setundopenclaw config validate, - ein konkretes Credential, das du aus der Hauptkonfiguration entfernen willst.
Wichtig: SecretRef ist kein Ersatz für einen sicheren Secret-Store. Die Referenz verhindert Plaintext in der Hauptkonfiguration. Das Backend selbst – Environment, Datei, Vault, 1Password, SOPS oder ein anderer Manager – muss weiterhin korrekt abgesichert werden.
Wenn du noch ganz am Anfang stehst, ist der Env-Provider der einfachste Startpunkt. Sobald ein Setup länger lebt, geteilt wird oder Backups bekommt, solltest du auf eine separate Secret-Datei oder einen richtigen Secret-Manager wechseln.
Was ist SecretRef?
SecretRef ist eine strukturierte Referenz auf ein Secret. Die kanonische Form besteht laut OpenClaw-Dokumentation aus den Feldern source, provider und id.
Die drei Felder lesen sich so:
source: Art der Quelle, zum Beispiel Environment, Datei oder Exec-Provider.provider: welcher konfigurierte Secret-Provider verwendet wird.id: welcher konkrete Wert innerhalb dieser Quelle gemeint ist.
Statt einen API-Key direkt einzutragen:
{
models: {
providers: {
openrouter: {
apiKey: "<YOUR_API_KEY>",
},
},
},
}
verweist die Konfiguration nur noch auf eine Quelle:
{
models: {
providers: {
openrouter: {
apiKey: { source: "env", provider: "default", id: "OPENROUTER_API_KEY" },
},
},
},
}
Plaintext-Werte sind in OpenClaw weiterhin möglich, SecretRefs sind also pro Credential optional. Für produktive Setups ist die Referenzform aber die robustere Wahl, weil sie Konfiguration und Geheimnis trennt.
Welche Fehler SecretRef wirklich verhindert
SecretRef verschiebt Secrets aus lesbaren Konfigurationsblöcken in einen anderen Speicherort. Das verhindert nicht jeden Vorfall, aber es reduziert die häufigsten Leaks deutlich:
- API-Keys stehen nicht mehr offen in
openclaw.jsonoderauth-profiles.json. - Generierte Modellkataloge und normale Config-Diffs enthalten weniger produktive Zugangsdaten.
- Ein Reload kann fehlschlagen, bevor ein halbfertiger Zustand live geht.
- Rotationen lassen sich durchführen, ohne an mehreren Stellen neue Klartextwerte einzutragen.
Nicht verhindert werden dagegen alle Probleme rund um den Zielspeicher. Wenn ein Secret weiter in .env, Backups oder alten generierten Dateien liegt, bleibt es angreifbar. Genau deshalb gehört zu einer SecretRef-Migration immer auch die Prüfung alter Klartextreste.
Typische Symptome, wenn SecretRefs schiefgehen
SecretRef-Fehler sehen im Betrieb selten dramatisch aus, sind aber gut eingrenzbar. Besonders häufig sind drei Muster:
-
Startup oder Reload bricht sofort ab. Das passiert, wenn eine effektiv aktive Referenz nicht aufgelöst werden kann. OpenClaw löst aktive SecretRefs beim Aktivieren der Konfiguration auf und scheitert bewusst früh, statt erst auf dem Request-Pfad.
-
Ein Secret ist konfiguriert, wird aber ignoriert. Das betrifft inaktive Oberflächen, etwa deaktivierte Channels, nicht ausgewählte Provider oder Auth-Wege, die gerade nicht gewinnen. Solche Fälle blockieren den Start nicht, tauchen aber als Diagnose auf.
-
Die Rotation war erfolgreich, der betroffene Channel bleibt trotzdem kaputt. Dann wurde der neue Wert zwar im Backend abgelegt, aber der aktive Runtime-Snapshot wurde nicht erfolgreich neu geladen. OpenClaw liest im Betrieb aus einem aktiven In-Memory-Snapshot, nicht bei jeder Anfrage erneut aus dem Provider.
Diese Unterscheidung ist wichtig: Manche Secret-Probleme sind Konfigurationsfehler, andere sind Aktivierungsfehler, wieder andere sind schlicht nicht neu geladene Laufzeitdaten.
Sicherer Standardablauf mit der CLI
Am sichersten änderst du Secrets nicht per Hand im Editor, sondern über die OpenClaw-Config-CLI. So kannst du Änderungen vorher prüfen und anschließend validieren.
Beispiel für einen Discord-Bot-Token aus einer Environment-Variable:
export DISCORD_BOT_TOKEN="..."
openclaw config set channels.discord.token \
--ref-provider default \
--ref-source env \
--ref-id DISCORD_BOT_TOKEN \
--dry-run
openclaw config set channels.discord.token \
--ref-provider default \
--ref-source env \
--ref-id DISCORD_BOT_TOKEN
openclaw config validate
Das gleiche Muster funktioniert auch für andere Credential-Pfade, sofern der jeweilige Konfigurationspfad in deinem Setup existiert. Beispiel für einen Modellprovider-Key:
export OPENROUTER_API_KEY="..."
openclaw config set models.providers.openrouter.apiKey \
--ref-provider default \
--ref-source env \
--ref-id OPENROUTER_API_KEY \
--dry-run
openclaw config set models.providers.openrouter.apiKey \
--ref-provider default \
--ref-source env \
--ref-id OPENROUTER_API_KEY
openclaw config validate
Nutze --dry-run konsequent vor Änderungen an produktiven Konfigurationen. openclaw config validate ist danach Pflicht, bevor du einen Reload oder Neustart einplanst.
Wie OpenClaw SecretRefs verarbeitet
OpenClaw trennt zwischen der sichtbaren Konfigurationsstruktur und dem tatsächlichen Credential-Wert. Bei der Aktivierung der Konfiguration werden benötigte SecretRefs aufgelöst und validiert. Fehlt ein notwendiges Secret oder ist es nicht auflösbar, soll die Konfiguration nicht stillschweigend mit einem kaputten Credential weiterlaufen.
Die OpenClaw-Dokumentation beschreibt außerdem eine Credential-Surface-Logik: Nicht jede Referenz ist in jedem Zustand aktiv. Entscheidend ist, ob der zugehörige Channel, Account, Provider oder das Feature tatsächlich verwendet wird. Dadurch können größere Konfigurationen optionale Bereiche enthalten, ohne dass jedes optionale Secret sofort vorhanden sein muss.
Praktisch bedeutet das:
- Secrets für aktive Komponenten müssen auflösbar sein.
- Secrets für deaktivierte oder nicht genutzte Flächen können als inaktiv behandelt werden.
- Diagnosemeldungen zu inaktiven oder ignorierten Referenzen solltest du trotzdem ernst nehmen, weil sie beim späteren Aktivieren eines Features zu echten Start- oder Reload-Fehlern werden können.
Verlasse dich nicht darauf, dass eine inaktive Referenz dauerhaft ungefährlich bleibt. Prüfe sie spätestens, bevor du das zugehörige Feature aktivierst.
Diagnose: Was du zuerst prüfen solltest
Wenn ein SecretRef-Setup nicht sauber läuft, hilft eine feste Reihenfolge mehr als hektisches Editieren:
- Prüfe, welche Konfigurationsdatei OpenClaw gerade wirklich nutzt.
- Validiere die Konfiguration vor jedem Reload.
- Prüfe, ob der Ref auf einer aktiven oder inaktiven Oberfläche liegt.
- Suche nach alten Klartextresten, bevor du dem Ref selbst misstraust.
Der knappe Minimalpfad dafür ist:
openclaw config file
openclaw config validate
openclaw secrets audit --check
Was du dabei suchst:
openclaw config filebestätigt, ob du überhaupt die aktive Konfiguration bearbeitest.openclaw config validatefängt Syntax- und Auflösungsprobleme vor dem Reload ab.openclaw secrets audit --checkzeigt, ob zwar schon Ref-Objekte existieren, aber irgendwo weiter Klartextreste in üblichen Secret-Oberflächen liegen.
Gerade der letzte Punkt wird leicht übersehen. Ein Setup kann formal SecretRefs verwenden und trotzdem unsauber bleiben, wenn openclaw.json, auth-profiles.json, .env oder generierte Modell-Dateien alte Werte weitertragen.
Drei Wege zur Speicherung von Secrets
SecretRef ist nur die Referenz. Wo der Wert tatsächlich liegt, hängt vom Backend ab.
1. Env-Provider
Der einfachste Einstieg ist der Env-Provider. Die Konfiguration verweist auf eine Environment-Variable, zum Beispiel OPENROUTER_API_KEY.
Das ist gut für lokale Tests, weil du keine zusätzliche Secret-Datei einrichten musst. Es ist weniger ideal für Teams oder Server, wenn unklar ist, welche Prozesse die Variable sehen oder welche Logs sie ausgeben.
{
models: {
providers: {
openrouter: {
apiKey: { source: "env", provider: "default", id: "OPENROUTER_API_KEY" },
},
},
},
}
CLI-Variante:
export OPENROUTER_API_KEY="..."
openclaw config set models.providers.openrouter.apiKey \
--ref-provider default \
--ref-source env \
--ref-id OPENROUTER_API_KEY
openclaw config validate
Achte darauf, dass du Secrets nicht versehentlich in Shell-History, Prozesslisten, CI-Logs oder .env-Dateien eincheckst. Für lokale Tests ist Environment oft ausreichend. Für Teams oder Produktion ist ein zentraler Secret-Manager meist sauberer.
2. File-Provider
Für lokale oder serverseitige Setups kannst du Secrets in einer separaten JSON-Datei halten und diese Datei restriktiv berechtigen.
Beispiel für eine Secret-Datei:
{
"providers": {
"openrouter": {
"apiKey": "..."
}
}
}
Lege sie zum Beispiel außerhalb des Projekt-Repositorys ab:
sudo install -m 600 -o "$USER" -g "$USER" /dev/null /etc/openclaw/secrets.json
Dann registrierst du den File-Provider in OpenClaw:
openclaw config set secrets.providers.vaultfile \
--provider-source file \
--provider-path /etc/openclaw/secrets.json \
--provider-mode json
Anschließend verweist das Credential per JSON-Pointer auf den Wert in der Datei:
openclaw config set models.providers.openrouter.apiKey \
--ref-provider vaultfile \
--ref-source file \
--ref-id providers/openrouter/apiKey
openclaw config validate
Die entsprechende JSON5-Struktur sieht sinngemäß so aus:
{
secrets: {
providers: {
vaultfile: {
source: "file",
path: "/etc/openclaw/secrets.json",
mode: "json",
},
},
},
models: {
providers: {
openrouter: {
apiKey: { source: "file", provider: "vaultfile", id: "providers/openrouter/apiKey" },
},
},
},
}
Verwende hier nach Möglichkeit absolute Pfade. Ob Shell-Kürzel wie ~ an jeder Stelle expandiert werden, solltest du nicht voraussetzen.
3. Exec-Provider für externe Secret-Manager
Für professionelle Setups bietet sich ein Exec-Provider an, der einen externen Secret-Manager anbindet, zum Beispiel Vault, 1Password, SOPS oder ein internes Tool. Die OpenClaw-Konfiguration enthält dann nicht den Wert, sondern eine Referenz auf den konfigurierten Exec-Provider und eine ID innerhalb dieses Providers.
Ein SecretRef kann dann beispielsweise so aussehen:
{ source: "exec", provider: "vault", id: "providers/openai/apiKey" }
Wichtig: Beim Exec-Provider ist der genaue Provider-Block entscheidend. Definiere Command, Argumente und Ausgabeformat strikt nach der aktuellen OpenClaw-Dokumentation und teste den Resolver separat, bevor du ihn in einer produktiven Gateway-Konfiguration verwendest. Ein Exec-Provider ist nur so sicher wie das aufgerufene Programm, dessen Berechtigungen und dessen Logging.
Recovery nach Rotation oder Fehlkonfiguration
SecretRef macht Rotationen sauberer, aber nicht automatisch. Wenn ein Key getauscht wurde und die Integration weiter fehlschlägt, geh in dieser Reihenfolge vor:
- Secret im Backend prüfen oder neu setzen.
openclaw config validateerneut ausführen.- Den betroffenen Dienst oder die Gateway-Konfiguration kontrolliert neu laden.
- Erst danach den betroffenen Channel oder Provider testen.
Wichtig ist der Runtime-Mechanismus dahinter: OpenClaw verwendet nach erfolgreicher Aktivierung einen aktiven In-Memory-Snapshot. Bei einem Reload wird dieser Snapshot atomar ersetzt. Entweder der neue Satz Secrets ist vollständig gültig, oder OpenClaw bleibt beim letzten funktionierenden Zustand. Das schützt vor halben Rotationen, erklärt aber auch, warum ein korrekt aktualisiertes Backend allein noch keinen laufenden Dienst sicherstellt.
Wenn du einen produktiven Vorfall aufräumst, hilft deshalb die Reihenfolge:
- kompromittierten Key widerrufen oder rotieren
- Klartextreste beseitigen
- Ref validieren
- Reload durchführen
- Zielintegration testen
Ohne diesen Ablauf bleibt oft unklar, ob der Fehler noch vom alten Leak, von einem defekten Ref oder vom nicht übernommenen Snapshot kommt.
Typische Fallstricke
Plaintext bleibt im Git-Verlauf
Wenn ein Secret bereits committed wurde, reicht es nicht, es in der aktuellen Datei durch SecretRef zu ersetzen. Der alte Wert kann weiter im Git-Verlauf, in CI-Artefakten, Backups oder Logs liegen.
Sicherer Ablauf:
- Secret im Anbieterportal rotieren oder widerrufen.
- Plaintext aus der aktuellen Konfiguration entfernen.
- SecretRef eintragen.
- Repository-Verlauf und Artefakte prüfen, wenn der Leak relevant war.
- OpenClaw-Konfiguration validieren und neu laden.
Diagnosemeldungen ignorieren
Inaktive Referenzen blockieren nicht zwingend sofort den Betrieb. Das ist bequem, aber gefährlich, wenn später ein Feature aktiviert wird und das Secret dann fehlt. OpenClaw markiert solche Fälle explizit als inaktive Secret-Oberfläche statt als harten Startfehler. Behandle diese Hinweise als Wartungsliste: Was heute optional ist, kann morgen produktionskritisch sein.
Rotation ohne Reload
Die Referenz bleibt bei einer Rotation gleich, aber der Wert im Backend ändert sich. Plane deshalb nach einer Rotation einen kontrollierten Reload oder Neustart ein und prüfe danach die betroffenen Integrationen. SecretRef nimmt dir die Rotation nicht ab; es macht sie nur sauberer, weil die Hauptkonfiguration unverändert bleiben kann.
Unsichere Secret-Dateien
Ein File-Provider ist nur dann sinnvoll, wenn die Datei nicht im Repository liegt und restriktive Rechte hat. Für Server-Setups sind typische Mindestanforderungen:
- Datei außerhalb des Projektverzeichnisses,
- keine Aufnahme in Backups ohne passende Verschlüsselung,
0600oder vergleichbar restriktive Rechte,- Eigentümer passend zum OpenClaw-Prozess,
- keine Ausgabe der Datei in Debug-Logs.
Wenn du mit einem File-Provider arbeitest und trotzdem weiter Leaks befürchtest, ist das oft ein Zeichen dafür, dass der Speicherort selbst zu nah an den agent-lesbaren Dateien liegt. In solchen Fällen ist ein externer Resolver oder ein klar getrennter Secret-Manager meist die bessere Wahl.
Zu viel Vertrauen in SecretRef
SecretRef reduziert Leak-Flächen in der Konfiguration. Es bedeutet nicht automatisch:
- Verschlüsselung der Secret-Datei,
- automatische Rotation,
- Schutz vor einem kompromittierten OpenClaw-Prozess,
- Schutz vor falsch konfigurierten Logs,
- Berechtigungsprüfung im externen Secret-Manager.
Diese Punkte musst du separat lösen.
Praktische Checkliste
Vor dem Produktivbetrieb solltest du mindestens prüfen:
openclaw config file
openclaw config validate
openclaw secrets audit --check
Zusätzlich sinnvoll:
- Enthält
openclaw.jsonnoch Klartext-Keys? - Sind Secret-Dateien außerhalb des Repositories abgelegt?
- Sind Dateirechte restriktiv gesetzt?
- Funktioniert der Reload nach einer Test-Rotation?
- Werden Debug-Logs ohne Secret-Werte geschrieben?
- Sind alte Keys nach Migration auf SecretRef rotiert?
Reality Check
SecretRef ist kein Zaubertrick gegen jeden Secret-Leak. Der Mechanismus hilft nur dann wirklich, wenn du die Migration zu Ende bringst:
- produktive Secrets aus normalen Konfigurationsdateien entfernen,
- alte Klartextreste prüfen und bereinigen,
- den Zielspeicher außerhalb des üblichen Agent-Zugriffs absichern,
- Rotationen als operativen Ablauf testen und nicht nur theoretisch dokumentieren.
Für kleine lokale Setups reicht oft schon ein sauberer Env- oder File-Provider. Für geteilte Server, Teams und länger laufende Gateways wird SecretRef erst zusammen mit Audit, Reload-Disziplin und sauberer Trennung der Speicherorte belastbar.
Fazit
SecretRef trennt OpenClaw-Konfiguration und sensible Werte. Für kleine Setups reichen oft Env-Referenzen oder ein File-Provider. Für Teams und Produktion sind externe Secret-Manager über einen sauber getesteten Provider meist die bessere Wahl.
Die wichtigsten Vorteile:
- Weniger Plaintext in der Hauptkonfiguration: API-Keys und Tokens müssen nicht in
openclaw.jsonstehen. - Klarere Diagnose: Aktive und inaktive Secret-Oberflächen lassen sich besser unterscheiden.
- Sauberere Rotation: Die Referenz bleibt stabil, während der Wert im Backend ausgetauscht wird.
- Bessere Trennung von Backup-Domänen: Konfiguration und Geheimnisse können unterschiedlich gesichert und berechtigt werden.
- Prüfbare Aktivierung:
openclaw config validateundopenclaw secrets audit --checkmachen fehlende oder falsch referenzierte Secrets früh sichtbar.
Auch wenn Plaintext-Keys technisch weiterhin möglich sind, ist SecretRef für ernsthafte OpenClaw-Setups die deutlich robustere Grundlage.
Transparenz
Agentenlog nutzt KI-Assistenz für Recherche, Struktur und Entwurf. Inhaltliche Auswahl, Einordnung und Veröffentlichung liegen redaktionell bei Agentenlog; Quellen und Fakten werden vor Veröffentlichung geprüft.
Quellen
Serie: OpenClaw Praxis-Serie
Das könnte dich auch interessieren
iMessage mit OpenClaw verbinden: Apple Messages auf dem Mac sauber einrichten
So richtest du OpenClaw mit iMessage über imsg ein, prüfst macOS-Rechte, Pairing, Gruppen und typische Fehler beim lokalen oder entfernten Mac-Setup.
Slack mit OpenClaw verbinden: Bot, Mentions und Routing sauber einrichten
OpenClaw kann in Slack per Socket Mode, HTTP Request URLs oder Relay Mode laufen. Entscheidend sind Bot-Setup, Gruppenzugriff, Mention-Gating, DM/Pairing-Verhalten und deterministisches Routing.
Signal mit OpenClaw verbinden: signal-cli, Pairing, Gruppen und Troubleshooting
So bindest du Signal per signal-cli an OpenClaw an, prüfst Pairing und Gruppenrouting und findest typische Fehler bei Container-, Daemon- und Bot-Setups.