Zarządzanie sekretami
OpenClaw obsługuje addytywne SecretRef, dzięki czemu obsługiwane dane uwierzytelniające nie muszą być przechowywane w konfiguracji jako plaintext. Plaintext nadal działa. SecretRef to opcja opt-in dla poszczególnych danych uwierzytelniających.Cele i model runtime
Sekrety są rozwiązywane do snapshotu runtime w pamięci.- Rozwiązywanie jest eager podczas aktywacji, a nie lazy na ścieżkach żądań.
- Uruchomienie kończy się fail-fast, gdy efektywnie aktywny SecretRef nie może zostać rozwiązany.
- Przeładowanie używa atomowej podmiany: pełny sukces albo zachowanie snapshotu last-known-good.
- Naruszenia polityki SecretRef (na przykład profile uwierzytelniania w trybie OAuth połączone z wejściem SecretRef) powodują błąd aktywacji przed podmianą snapshotu runtime.
- Żądania runtime odczytują dane wyłącznie z aktywnego snapshotu w pamięci.
- Po pierwszej pomyślnej aktywacji/wczytaniu konfiguracji ścieżki kodu runtime nadal odczytują ten aktywny snapshot w pamięci aż do pomyślnego przeładowania, które go podmieni.
- Ścieżki dostarczania wychodzącego także odczytują z aktywnego snapshotu (na przykład dostarczanie odpowiedzi/wątków Discord i wysyłanie akcji Telegram); nie rozwiązują ponownie SecretRef przy każdym wysłaniu.
Filtrowanie aktywnych powierzchni
SecretRef są walidowane tylko na efektywnie aktywnych powierzchniach.- Powierzchnie włączone: nierozwiązane odwołania blokują uruchomienie/przeładowanie.
- Powierzchnie nieaktywne: nierozwiązane odwołania nie blokują uruchomienia/przeładowania.
- Nieaktywne odwołania emitują niefatalne diagnostyki z kodem
SECRETS_REF_IGNORED_INACTIVE_SURFACE.
- Wyłączone wpisy kanałów/kont.
- Dane uwierzytelniające kanału na poziomie głównym, których nie dziedziczy żadne włączone konto.
- Wyłączone powierzchnie narzędzi/funkcji.
- Klucze specyficzne dla providera wyszukiwania webowego, które nie są wybrane przez
tools.web.search.provider. W trybie auto (provider nieustawiony) klucze są sprawdzane według priorytetu dla automatycznego wykrywania providera, aż jeden zostanie rozwiązany. Po wybraniu klucze niewybranego providera są traktowane jako nieaktywne, dopóki nie zostaną wybrane. - Materiały uwierzytelniające sandbox SSH (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsDataoraz nadpisania dla poszczególnych agentów) są aktywne tylko wtedy, gdy efektywny backend sandbox dla domyślnego lub włączonego agenta tossh. - SecretRef
gateway.remote.token/gateway.remote.passwordsą aktywne, jeśli spełniony jest jeden z tych warunków:gateway.mode=remote- skonfigurowano
gateway.remote.url gateway.tailscale.modema wartośćservelubfunnel- w trybie lokalnym bez tych zdalnych powierzchni:
gateway.remote.tokenjest aktywny, gdy może wygrać uwierzytelnianie tokenem i nie skonfigurowano żadnego tokenu env/auth.gateway.remote.passwordjest aktywny tylko wtedy, gdy może wygrać uwierzytelnianie hasłem i nie skonfigurowano żadnego hasła env/auth.
- SecretRef
gateway.auth.tokenjest nieaktywny dla rozwiązywania uwierzytelniania przy starcie, gdy ustawionoOPENCLAW_GATEWAY_TOKEN, ponieważ token env ma pierwszeństwo dla tego runtime.
Diagnostyka powierzchni uwierzytelniania gateway
Gdy SecretRef jest skonfigurowany wgateway.auth.token, gateway.auth.password,
gateway.remote.token lub gateway.remote.password, logi uruchomienia/przeładowania gateway jawnie pokazują
stan powierzchni:
active: SecretRef jest częścią efektywnej powierzchni uwierzytelniania i musi zostać rozwiązany.inactive: SecretRef jest ignorowany dla tego runtime, ponieważ wygrywa inna powierzchnia uwierzytelniania lub ponieważ zdalne uwierzytelnianie jest wyłączone/nieaktywne.
SECRETS_GATEWAY_AUTH_SURFACE i zawierają przyczynę używaną przez
politykę aktywnej powierzchni, dzięki czemu widać, dlaczego dane uwierzytelniające zostały potraktowane jako aktywne lub nieaktywne.
Walidacja wstępna odwołań podczas onboardingu
Gdy onboarding działa w trybie interaktywnym i wybierzesz przechowywanie SecretRef, OpenClaw uruchamia walidację preflight przed zapisaniem:- Odwołania env: waliduje nazwę zmiennej env i potwierdza, że podczas konfiguracji widoczna jest niepusta wartość.
- Odwołania providera (
filelubexec): waliduje wybór providera, rozwiązujeidi sprawdza typ rozwiązanej wartości. - Ścieżka ponownego użycia quickstart: gdy
gateway.auth.tokenjest już SecretRef, onboarding rozwiązuje je przed bootstrapem probe/dashboard (dla odwołańenv,fileiexec) przy użyciu tej samej bramki fail-fast.
Kontrakt SecretRef
Używaj wszędzie jednej postaci obiektu:source: "env"
providermusi pasować do^[a-z][a-z0-9_-]{0,63}$idmusi pasować do^[A-Z][A-Z0-9_]{0,127}$
source: "file"
providermusi pasować do^[a-z][a-z0-9_-]{0,63}$idmusi być bezwzględnym JSON pointer (/...)- Escaping segmentów zgodnie z RFC6901:
~=>~0,/=>~1
source: "exec"
providermusi pasować do^[a-z][a-z0-9_-]{0,63}$idmusi pasować do^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$idnie może zawierać.ani..jako segmentów ścieżki rozdzielonych ukośnikami (na przykłada/../bjest odrzucane)
Konfiguracja providera
Zdefiniuj providerów wsecrets.providers:
Provider env
- Opcjonalna allowlista przez
allowlist. - Brakujące/puste wartości env powodują błąd rozwiązywania.
Provider file
- Odczytuje lokalny plik ze ścieżki
path. mode: "json"oczekuje payloadu będącego obiektem JSON i rozwiązujeidjako wskaźnik.mode: "singleValue"oczekuje ref id"value"i zwraca zawartość pliku.- Ścieżka musi przejść kontrole właściciela/uprawnień.
- Uwaga dla Windows fail-closed: jeśli weryfikacja ACL dla ścieżki jest niedostępna, rozwiązywanie kończy się błędem. Tylko dla zaufanych ścieżek ustaw
allowInsecurePath: truedla tego providera, aby pominąć kontrole bezpieczeństwa ścieżki.
Provider exec
- Uruchamia skonfigurowaną bezwzględną ścieżkę binarną, bez shella.
- Domyślnie
commandmusi wskazywać zwykły plik (nie symlink). - Ustaw
allowSymlinkCommand: true, aby dopuścić ścieżki poleceń będące symlinkami (na przykład shimy Homebrew). OpenClaw waliduje ścieżkę rozwiązania celu. - Łącz
allowSymlinkCommandztrustedDirsdla ścieżek menedżera pakietów (na przykład["/opt/homebrew"]). - Obsługuje timeout, timeout braku wyjścia, limity bajtów wyjścia, allowlistę env i zaufane katalogi.
- Uwaga dla Windows fail-closed: jeśli weryfikacja ACL dla ścieżki polecenia jest niedostępna, rozwiązywanie kończy się błędem. Tylko dla zaufanych ścieżek ustaw
allowInsecurePath: truedla tego providera, aby pominąć kontrole bezpieczeństwa ścieżki.
Przykłady integracji exec
1Password CLI
HashiCorp Vault CLI
sops
Zmienne środowiskowe serwera MCP
Zmienne env serwera MCP skonfigurowane przezplugins.entries.acpx.config.mcpServers obsługują SecretInput. Dzięki temu klucze API i tokeny nie muszą znajdować się w konfiguracji plaintext:
${MCP_SERVER_API_KEY} i obiekty SecretRef są rozwiązywane podczas aktywacji gateway, zanim zostanie uruchomiony proces serwera MCP. Podobnie jak w przypadku innych powierzchni SecretRef, nierozwiązane odwołania blokują aktywację tylko wtedy, gdy wtyczka acpx jest efektywnie aktywna.
Materiały uwierzytelniające sandbox SSH
Podstawowy backend sandboxssh także obsługuje SecretRef dla materiałów uwierzytelniających SSH:
- OpenClaw rozwiązuje te odwołania podczas aktywacji sandbox, a nie lazy przy każdym wywołaniu SSH.
- Rozwiązane wartości są zapisywane do plików tymczasowych z restrykcyjnymi uprawnieniami i używane w generowanej konfiguracji SSH.
- Jeśli efektywny backend sandbox nie jest
ssh, te odwołania pozostają nieaktywne i nie blokują uruchomienia.
Obsługiwana powierzchnia danych uwierzytelniających
Kanoniczna lista obsługiwanych i nieobsługiwanych danych uwierzytelniających znajduje się tutaj: Dane uwierzytelniające tworzone w runtime lub rotujące oraz materiały odświeżania OAuth są celowo wyłączone z rozwiązywania SecretRef tylko do odczytu.Wymagane zachowanie i priorytet
- Pole bez ref: bez zmian.
- Pole z ref: wymagane na aktywnych powierzchniach podczas aktywacji.
- Jeśli obecne są jednocześnie plaintext i ref, ref ma pierwszeństwo na obsługiwanych ścieżkach priorytetu.
- Sentinel redakcji
__OPENCLAW_REDACTED__jest zarezerwowany do wewnętrznej redakcji/przywracania konfiguracji i jest odrzucany jako literalne przesłane dane konfiguracji.
SECRETS_REF_OVERRIDES_PLAINTEXT(ostrzeżenie runtime)REF_SHADOWED(ustalenie audytu, gdy dane uwierzytelniające zauth-profiles.jsonmają pierwszeństwo przed refami zopenclaw.json)
serviceAccountRefma pierwszeństwo przed plaintextserviceAccount.- Wartość plaintext jest ignorowana, gdy ustawiono sąsiedni ref.
Wyzwalacze aktywacji
Aktywacja sekretów uruchamia się przy:- Uruchomieniu (preflight + końcowa aktywacja)
- Ścieżce hot-apply przeładowania konfiguracji
- Ścieżce restart-check przeładowania konfiguracji
- Ręcznym przeładowaniu przez
secrets.reload - Walidacji preflight RPC zapisu konfiguracji gateway (
config.set/config.apply/config.patch) dla rozwiązywalności SecretRef na aktywnych powierzchniach w przesłanym payloadzie konfiguracji przed zapisaniem zmian
- Sukces atomowo podmienia snapshot.
- Błąd przy uruchomieniu przerywa start gateway.
- Błąd przeładowania w runtime zachowuje snapshot last-known-good.
- Błąd preflight RPC zapisu odrzuca przesłaną konfigurację i pozostawia bez zmian zarówno konfigurację na dysku, jak i aktywny snapshot runtime.
- Podanie jawnego tokenu kanału dla pojedynczego wywołania do pomocnika/narzędzia wychodzącego nie uruchamia aktywacji SecretRef; punktami aktywacji pozostają uruchomienie, przeładowanie i jawne
secrets.reload.
Sygnały stanu degradacji i odzyskania
Gdy aktywacja przy przeładowaniu kończy się błędem po wcześniejszym zdrowym stanie, OpenClaw przechodzi w zdegradowany stan sekretów. Jednorazowe zdarzenia systemowe i kody logów:SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- Zdegradowany: runtime zachowuje snapshot last-known-good.
- Odzyskany: emitowany raz po następnej pomyślnej aktywacji.
- Powtarzające się błędy w już zdegradowanym stanie logują ostrzeżenia, ale nie spamują zdarzeniami.
- Fail-fast przy starcie nie emituje zdarzeń degradacji, ponieważ runtime nigdy nie stał się aktywny.
Rozwiązywanie na ścieżkach poleceń
Ścieżki poleceń mogą włączyć obsługiwane rozwiązywanie SecretRef przez RPC snapshotu gateway. Istnieją dwa szerokie zachowania:- Ścisłe ścieżki poleceń (na przykład zdalne ścieżki pamięci
openclaw memoryiopenclaw qr --remote, gdy potrzebują zdalnych refów współdzielonego sekretu) odczytują z aktywnego snapshotu i kończą się fail-fast, gdy wymagany SecretRef jest niedostępny. - Ścieżki poleceń tylko do odczytu (na przykład
openclaw status,openclaw status --all,openclaw channels status,openclaw channels resolve,openclaw security auditoraz przepływy doctor/config repair tylko do odczytu) również preferują aktywny snapshot, ale degradują się zamiast przerywać, gdy docelowy SecretRef jest niedostępny na tej ścieżce polecenia.
- Gdy gateway działa, te polecenia najpierw odczytują z aktywnego snapshotu.
- Jeśli rozwiązywanie przez gateway jest niepełne lub gateway jest niedostępny, próbują ukierunkowanego lokalnego fallbacku dla konkretnej powierzchni polecenia.
- Jeśli docelowy SecretRef nadal jest niedostępny, polecenie kontynuuje z zdegradowanym wyjściem tylko do odczytu i jawną diagnostyką, taką jak „configured but unavailable in this command path”.
- To zdegradowane zachowanie jest lokalne dla polecenia. Nie osłabia uruchomienia runtime, przeładowania ani ścieżek wysyłania/uwierzytelniania.
- Odświeżenie snapshotu po rotacji sekretów backendu obsługuje
openclaw secrets reload. - Metoda RPC gateway używana przez te ścieżki poleceń:
secrets.resolve.
Przepływ audytu i konfiguracji
Domyślny przepływ operatora:secrets audit
Ustalenia obejmują:
- wartości plaintext zapisane na dysku (
openclaw.json,auth-profiles.json,.envoraz wygenerowaneagents/*/agent/models.json) - pozostałości wrażliwych nagłówków providerów w wygenerowanych wpisach
models.json - nierozwiązane odwołania
- cieniowanie priorytetu (
auth-profiles.jsonma priorytet nad refami zopenclaw.json) - starsze pozostałości (
auth.json, przypomnienia OAuth)
- Domyślnie audyt pomija kontrole rozwiązywalności SecretRef typu exec, aby uniknąć skutków ubocznych poleceń.
- Użyj
openclaw secrets audit --allow-exec, aby wykonywać providery exec podczas audytu.
- Wykrywanie wrażliwych nagłówków providerów opiera się na heurystykach nazw (typowe nazwy i fragmenty nagłówków uwierzytelniania/danych uwierzytelniających, takie jak
authorization,x-api-key,token,secret,passwordicredential).
secrets configure
Interaktywny pomocnik, który:
- najpierw konfiguruje
secrets.providers(env/file/exec, dodawanie/edycja/usuwanie) - pozwala wybrać obsługiwane pola zawierające sekrety w
openclaw.jsonorazauth-profiles.jsondla jednego zakresu agenta - może utworzyć nowe mapowanie
auth-profiles.jsonbezpośrednio w selektorze celu - zbiera szczegóły SecretRef (
source,provider,id) - uruchamia rozwiązywanie preflight
- może zastosować zmiany natychmiast
- Preflight pomija kontrole SecretRef typu exec, chyba że ustawiono
--allow-exec. - Jeśli stosujesz zmiany bezpośrednio przez
configure --applyi plan zawiera odwołania/providery exec, pozostaw--allow-exectakże dla kroku apply.
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
configure:
- usuwa pasujące statyczne dane uwierzytelniające z
auth-profiles.jsondla docelowych providerów - usuwa starsze statyczne wpisy
api_keyzauth.json - usuwa pasujące znane linie sekretów z
<config-dir>/.env
secrets apply
Zastosuj zapisany plan:
- dry-run pomija kontrole exec, chyba że ustawiono
--allow-exec. - tryb zapisu odrzuca plany zawierające SecretRef/providery exec, chyba że ustawiono
--allow-exec.
Jednokierunkowa polityka bezpieczeństwa
OpenClaw celowo nie zapisuje kopii zapasowych rollback zawierających historyczne wartości sekretów w plaintext. Model bezpieczeństwa:- preflight musi się powieść przed trybem zapisu
- aktywacja runtime jest walidowana przed zatwierdzeniem
- apply aktualizuje pliki przy użyciu atomowego podmieniania plików i best-effort restore w razie błędu
Uwagi o zgodności ze starszym uwierzytelnianiem
W przypadku statycznych danych uwierzytelniających runtime nie zależy już od starszego magazynu uwierzytelniania w plaintext.- Źródłem danych uwierzytelniających runtime jest rozwiązany snapshot w pamięci.
- Starsze statyczne wpisy
api_keysą usuwane po wykryciu. - Zachowanie zgodności związane z OAuth pozostaje osobne.
Uwaga dotycząca interfejsu webowego
Niektóre unie SecretInput są łatwiejsze do skonfigurowania w trybie edytora raw niż w trybie formularza.Powiązana dokumentacja
- Polecenia CLI: secrets
- Szczegóły kontraktu planu: Kontrakt planu apply dla sekretów
- Powierzchnia danych uwierzytelniających: Powierzchnia danych uwierzytelniających SecretRef
- Konfiguracja uwierzytelniania: Authentication
- Postawa bezpieczeństwa: Security
- Priorytet środowiska: Environment Variables