Gateway
Zarządzanie sekretami
OpenClaw obsługuje addytywne SecretRefs, dzięki czemu obsługiwane poświadczenia nie muszą być przechowywane w konfiguracji jako zwykły tekst.
Cele i model runtime
Sekrety są rozwiązywane do przechowywanej w pamięci migawki runtime.
- Rozwiązywanie odbywa się zachłannie podczas aktywacji, a nie leniwie na ścieżkach żądań.
- Uruchamianie kończy się szybko błędem, gdy faktycznie aktywnego SecretRef nie można rozwiązać.
- Ponowne ładowanie używa atomowej podmiany: pełny sukces albo zachowanie ostatniej znanej dobrej migawki.
- Naruszenia zasad SecretRef (na przykład profile uwierzytelniania w trybie OAuth połączone z wejściem SecretRef) przerywają aktywację przed podmianą runtime.
- Żądania runtime czytają wyłącznie z aktywnej migawki w pamięci.
- Po pierwszej udanej aktywacji/wczytaniu konfiguracji ścieżki kodu runtime nadal czytają tę aktywną migawkę w pamięci, dopóki udane ponowne ładowanie jej nie podmieni.
- Ścieżki dostarczania wychodzącego również czytają z tej aktywnej migawki (na przykład dostarczanie odpowiedzi/wątków Discord i wysyłanie akcji Telegram); nie rozwiązują ponownie SecretRefs przy każdym wysłaniu.
Dzięki temu awarie dostawców sekretów pozostają poza gorącymi ścieżkami żądań.
Granica dostępu agenta
SecretRefs chronią poświadczenia przed utrwalaniem w obsługiwanej konfiguracji i wygenerowanych powierzchniach modeli, ale nie są granicą izolacji procesu. Jeśli poświadczenie w zwykłym tekście pozostaje na dysku w ścieżce, którą agent może odczytać, agent może ominąć redakcję na poziomie API, używając narzędzi plikowych lub powłoki do sprawdzenia tego pliku.
W przypadku wdrożeń produkcyjnych, w których pliki dostępne dla agenta są objęte zakresem, traktuj migrację SecretRef jako ukończoną tylko wtedy, gdy spełnione są wszystkie poniższe warunki:
- obsługiwane poświadczenia używają SecretRefs zamiast wartości w zwykłym tekście
- pozostałości starszego zwykłego tekstu zostały usunięte z
openclaw.json,auth-profiles.json,.envoraz wygenerowanych plikówmodels.json openclaw secrets audit --checkjest czysty po migracji- wszelkie pozostałe nieobsługiwane lub rotowane poświadczenia są chronione przez izolację systemu operacyjnego, izolację kontenera albo zewnętrzny proxy poświadczeń
Dlatego przepływ audit/configure/apply jest bramą migracji bezpieczeństwa, a nie tylko pomocnikiem wygody.
Filtrowanie aktywnych powierzchni
SecretRefs są walidowane tylko na faktycznie aktywnych powierzchniach.
- Włączone powierzchnie: nierozwiązane refs blokują uruchomienie/ponowne ładowanie.
- Nieaktywne powierzchnie: nierozwiązane refs nie blokują uruchomienia/ponownego ładowania.
- Nieaktywne refs emitują niekrytyczne diagnostyki z kodem
SECRETS_REF_IGNORED_INACTIVE_SURFACE.
Przykłady nieaktywnych powierzchni
- Wyłączone wpisy kanału/konta.
- Poświadczenia kanału najwyższego poziomu, których nie dziedziczy żadne włączone konto.
- Wyłączone powierzchnie narzędzi/funkcji.
- Klucze specyficzne dla dostawcy wyszukiwania w sieci, które nie zostały wybrane przez
tools.web.search.provider. W trybie automatycznym (bez ustawionego dostawcy) klucze są sprawdzane według priorytetu na potrzeby automatycznego wykrywania dostawcy, aż jeden zostanie rozwiązany. Po wyborze klucze niewybranego dostawcy są traktowane jako nieaktywne, dopóki nie zostaną wybrane. - Materiał uwierzytelniania SSH sandboxa (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsDataoraz nadpisania dla poszczególnych agentów) jest aktywny tylko wtedy, gdy efektywny backend sandboxa tosshdla domyślnego agenta lub włączonego agenta. - SecretRefs
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 uwierzytelnianie tokenem może wygrać i nie skonfigurowano tokena z env/auth.gateway.remote.passwordjest aktywny tylko wtedy, gdy uwierzytelnianie hasłem może wygrać i nie skonfigurowano hasła z env/auth.
- SecretRef
gateway.auth.tokenjest nieaktywny dla rozwiązywania uwierzytelniania podczas uruchamiania, gdy ustawionoOPENCLAW_GATEWAY_TOKEN, ponieważ wejście tokena z env wygrywa dla tego runtime.
Diagnostyka powierzchni uwierzytelniania Gateway
Gdy SecretRef jest skonfigurowany w gateway.auth.token, gateway.auth.password, gateway.remote.token lub gateway.remote.password, uruchomienie/ponowne ładowanie Gateway jawnie loguje 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 albo zdalne uwierzytelnianie jest wyłączone/nieaktywne.
Te wpisy są logowane z SECRETS_GATEWAY_AUTH_SURFACE i zawierają powód użyty przez zasadę aktywnej powierzchni, dzięki czemu można zobaczyć, dlaczego poświadczenie potraktowano jako aktywne lub nieaktywne.
Preflight odniesienia podczas onboardingu
Gdy onboarding działa w trybie interaktywnym i wybierzesz przechowywanie SecretRef, OpenClaw uruchamia walidację preflight przed zapisaniem:
- Env refs: waliduje nazwę zmiennej env i potwierdza, że podczas konfiguracji widoczna jest niepusta wartość.
- Provider refs (
filelubexec): waliduje wybór dostawcy, rozwiązujeidi sprawdza typ rozwiązanej wartości. - Ścieżka ponownego użycia Quickstart: gdy
gateway.auth.tokenjest już SecretRef, onboarding rozwiązuje go przed bootstrapem probe/dashboard (dla refsenv,fileiexec) przy użyciu tej samej bramy szybkiego błędu.
Jeśli walidacja się nie powiedzie, onboarding pokazuje błąd i pozwala spróbować ponownie.
Kontrakt SecretRef
Używaj jednego kształtu obiektu wszędzie:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }env
{ source: "env", provider: "default", id: "OPENAI_API_KEY" }Obsługiwane pola SecretInput akceptują także dokładne skróty tekstowe:
"${OPENAI_API_KEY}""$OPENAI_API_KEY"Walidacja:
providermusi pasować do^[a-z][a-z0-9_-]{0,63}$idmusi pasować do^[A-Z][A-Z0-9_]{0,127}$
file
{ source: "file", provider: "filemain", id: "/providers/openai/apiKey" }Walidacja:
providermusi pasować do^[a-z][a-z0-9_-]{0,63}$idmusi być bezwzględnym wskaźnikiem JSON (/...)- Escapowanie RFC6901 w segmentach:
~=>~0,/=>~1
exec
{ source: "exec", provider: "vault", id: "providers/openai/apiKey#value" }Walidacja:
providermusi pasować do^[a-z][a-z0-9_-]{0,63}$idmusi pasować do^[A-Za-z0-9][A-Za-z0-9._:/#-]{0,255}$(obsługuje selektory takie jaksecret#json_key)idnie może zawierać.ani..jako segmentów ścieżki rozdzielanych ukośnikami (na przykłada/../bjest odrzucane)
Konfiguracja dostawcy
Zdefiniuj dostawców w secrets.providers:
{ secrets: { providers: { default: { source: "env" }, filemain: { source: "file", path: "~/.openclaw/secrets.json", mode: "json", // or "singleValue" }, vault: { source: "exec", command: "/usr/local/bin/openclaw-vault-resolver", args: ["--profile", "prod"], passEnv: ["PATH", "VAULT_ADDR"], jsonOnly: true, }, "team-secrets": { source: "exec", pluginIntegration: { pluginId: "acme-secrets", integrationId: "secret-store", }, }, }, defaults: { env: "default", file: "filemain", exec: "vault", }, resolution: { maxProviderConcurrency: 4, maxRefsPerProvider: 512, maxBatchBytes: 262144, }, },}Dostawca env
- Opcjonalna lista dozwolonych przez
allowlist. - Brakujące/puste wartości env powodują błąd rozwiązywania.
Dostawca plikowy
- Odczytuje lokalny plik z
path. mode: "json"oczekuje ładunku obiektu JSON i rozwiązujeidjako wskaźnik.mode: "singleValue"oczekuje id ref"value"i zwraca zawartość pliku.- Ścieżka musi przejść sprawdzenia własności/uprawnień.
- Uwaga o fail-closed w Windows: jeśli weryfikacja ACL jest niedostępna dla ścieżki, rozwiązywanie kończy się błędem. Tylko dla zaufanych ścieżek ustaw
allowInsecurePath: trueu tego dostawcy, aby pominąć sprawdzenia bezpieczeństwa ścieżki.
Dostawca exec
- Uruchamia skonfigurowaną bezwzględną ścieżkę binarną, bez powłoki.
- Domyślnie
commandmusi wskazywać zwykły plik (nie symlink). - Ustaw
allowSymlinkCommand: true, aby zezwolić na ścieżki poleceń będące symlinkami (na przykład shimy Homebrew). OpenClaw waliduje rozwiązaną ścieżkę docelową. - Połącz
allowSymlinkCommandztrustedDirsdla ścieżek menedżerów pakietów (na przykład["/opt/homebrew"]). - Obsługuje timeout, timeout braku wyjścia, limity bajtów wyjścia, listę dozwolonych env i zaufane katalogi.
- Uwaga o fail-closed w Windows: jeśli weryfikacja ACL jest niedostępna dla ścieżki polecenia, rozwiązywanie kończy się błędem. Tylko dla zaufanych ścieżek ustaw
allowInsecurePath: trueu tego dostawcy, aby pominąć sprawdzenia bezpieczeństwa ścieżki. - Dostawcy exec zarządzani przez Plugin mogą używać
pluginIntegrationzamiast skopiowanychcommand/args. OpenClaw rozwiązuje bieżące szczegóły polecenia z manifestu zainstalowanego Plugin podczas uruchamiania/ponownego ładowania. Jeśli Plugin jest wyłączony, usunięty, niezaufany albo nie deklaruje już integracji, aktywne SecretRefs używające tego dostawcy fail closed.
Ładunek żądania (stdin):
{ "protocolVersion": 1, "provider": "vault", "ids": ["providers/openai/apiKey"] }Ładunek odpowiedzi (stdout):
{ "protocolVersion": 1, "values": { "providers/openai/apiKey": "<openai-api-key>" } } // pragma: allowlist secretOpcjonalne błędy dla poszczególnych id:
{ "protocolVersion": 1, "values": {}, "errors": { "providers/openai/apiKey": { "message": "not found" } }}Klucze API oparte na pliku
Nie umieszczaj ciągów file:... w bloku konfiguracji env. Blok env jest
literalny i nienadpisujący, więc file:... nie jest rozwiązywane.
Zamiast tego użyj plikowego SecretRef w obsługiwanym polu poświadczenia:
{ secrets: { providers: { xai_key_file: { source: "file", path: "~/.openclaw/secrets/xai-api-key.txt", mode: "singleValue", }, }, }, models: { providers: { xai: { apiKey: { source: "file", provider: "xai_key_file", id: "value" }, }, }, },}Dla mode: "singleValue" id SecretRef to "value". Dla
mode: "json" użyj bezwzględnego wskaźnika JSON, takiego jak
"/providers/xai/apiKey".
Zobacz Powierzchnia poświadczeń SecretRef, aby poznać pola konfiguracji akceptujące SecretRefs.
Przykłady integracji exec
1Password CLI
{ secrets: { providers: { onepassword_openai: { source: "exec", command: "/opt/homebrew/bin/op", allowSymlinkCommand: true, // required for Homebrew symlinked binaries trustedDirs: ["/opt/homebrew"], args: ["read", "op://Personal/OpenClaw QA API Key/password"], passEnv: ["HOME"], jsonOnly: false, }, }, }, models: { providers: { openai: { baseUrl: "https://api.openai.com/v1", models: [{ id: "gpt-5", name: "gpt-5" }], apiKey: { source: "exec", provider: "onepassword_openai", id: "value" }, }, }, },}Bitwarden Secrets Manager (`bws`)
Użyj opakowania resolvera, gdy chcesz mapować identyfikatory SecretRef na klucze elementów Bitwarden
Secrets Manager. Repozytorium zawiera
scripts/secrets/openclaw-bws-resolver.mjs; zainstaluj lub skopiuj go do bezwzględnej,
zaufanej ścieżki na hoście, który uruchamia Gateway.
Wymagania:
- CLI Bitwarden Secrets Manager (
bws) zainstalowany na hoście Gateway. BWS_ACCESS_TOKENdostępny dla usługi Gateway.PATHprzekazane do resolvera alboBWS_BINustawione na bezwzględną ścieżkę binarnąbws.BWS_SERVER_URLmusi być ustawione w środowisku podczas używania samodzielnie hostowanej instancji Bitwarden.
{ secrets: { providers: { bws: { source: "exec", command: "/usr/local/bin/openclaw-bws-resolver.mjs", passEnv: ["BWS_ACCESS_TOKEN", "BWS_SERVER_URL", "PATH", "BWS_BIN"], jsonOnly: true, }, }, }, models: { providers: { openai: { baseUrl: "https://api.openai.com/v1", models: [{ id: "gpt-5", name: "gpt-5" }], apiKey: { source: "exec", provider: "bws", id: "openclaw/providers/openai/apiKey", }, }, }, },}Resolver grupuje żądane identyfikatory, uruchamia bws secret list i zwraca
wartości dla pasujących pól key sekretów. Używaj kluczy spełniających kontrakt
identyfikatora SecretRef exec, takich jak openclaw/providers/openai/apiKey; klucze
w stylu zmiennych środowiskowych z podkreśleniami są odrzucane przed uruchomieniem resolvera. Jeśli więcej
niż jeden widoczny sekret Bitwarden ma ten sam żądany klucz, resolver
oznacza ten identyfikator jako niejednoznaczny zamiast wybierać jeden. Po zaktualizowaniu konfiguracji
zweryfikuj ścieżkę resolvera:
openclaw secrets audit --allow-execHashiCorp Vault CLI
{ secrets: { providers: { vault_openai: { source: "exec", command: "/opt/homebrew/bin/vault", allowSymlinkCommand: true, // required for Homebrew symlinked binaries trustedDirs: ["/opt/homebrew"], args: ["kv", "get", "-field=OPENAI_API_KEY", "secret/openclaw"], passEnv: ["VAULT_ADDR", "VAULT_TOKEN"], jsonOnly: false, }, }, }, models: { providers: { openai: { baseUrl: "https://api.openai.com/v1", models: [{ id: "gpt-5", name: "gpt-5" }], apiKey: { source: "exec", provider: "vault_openai", id: "value" }, }, }, },}password-store (`pass`)
Użyj małego opakowania resolvera, gdy chcesz mapować identyfikatory SecretRef bezpośrednio na
wpisy pass. Zapisz je jako plik wykonywalny pod bezwzględną ścieżką, która przechodzi
kontrole ścieżek dostawcy exec, na przykład
/usr/local/bin/openclaw-pass-resolver. Shebang #!/usr/bin/env node
rozwiązuje node z PATH procesu resolvera, więc uwzględnij PATH w
passEnv. Jeśli pass nie znajduje się w tym PATH, ustaw PASS_BIN w środowisku
nadrzędnym i również uwzględnij go w passEnv:
#!/usr/bin/env nodeconst { spawnSync } = require("node:child_process"); let stdin = "";process.stdin.setEncoding("utf8");process.stdin.on("data", (chunk) => { stdin += chunk;});process.stdin.on("error", (err) => { process.stderr.write(`${err.message}\n`); process.exit(1);});process.stdin.on("end", () => { let request; try { request = JSON.parse(stdin || "{}"); } catch (err) { process.stderr.write(`Failed to parse request: ${err.message}\n`); process.exit(1); } const passBin = process.env.PASS_BIN || "pass"; const values = {}; const errors = {}; for (const id of request.ids ?? []) { const result = spawnSync(passBin, ["show", id], { encoding: "utf8" }); if (result.status === 0) { values[id] = result.stdout.split(/\r?\n/, 1)[0] ?? ""; } else { errors[id] = { message: (result.stderr || `pass exited ${result.status}`).trim() }; } } process.stdout.write(JSON.stringify({ protocolVersion: 1, values, errors }));});Następnie skonfiguruj dostawcę exec i wskaż apiKey na ścieżkę wpisu pass:
{ secrets: { providers: { pass_store: { source: "exec", command: "/usr/local/bin/openclaw-pass-resolver", passEnv: ["PATH", "HOME", "GNUPGHOME", "GPG_TTY", "PASSWORD_STORE_DIR", "PASS_BIN"], jsonOnly: true, }, }, }, models: { providers: { openai: { baseUrl: "https://api.openai.com/v1", models: [{ id: "gpt-5", name: "gpt-5" }], apiKey: { source: "exec", provider: "pass_store", id: "openclaw/providers/openai/apiKey", }, }, }, },}Przechowuj sekret w pierwszym wierszu wpisu pass albo dostosuj
opakowanie, jeśli chcesz zamiast tego zwracać pełne wyjście pass show. Po
zaktualizowaniu konfiguracji zweryfikuj zarówno statyczny audyt, jak i ścieżkę resolvera exec:
openclaw secrets audit --checkopenclaw secrets audit --allow-execsops
{ secrets: { providers: { sops_openai: { source: "exec", command: "/opt/homebrew/bin/sops", allowSymlinkCommand: true, // required for Homebrew symlinked binaries trustedDirs: ["/opt/homebrew"], args: ["-d", "--extract", '["providers"]["openai"]["apiKey"]', "/path/to/secrets.enc.json"], passEnv: ["SOPS_AGE_KEY_FILE"], jsonOnly: false, }, }, }, models: { providers: { openai: { baseUrl: "https://api.openai.com/v1", models: [{ id: "gpt-5", name: "gpt-5" }], apiKey: { source: "exec", provider: "sops_openai", id: "value" }, }, }, },}Zmienne środowiskowe serwera MCP
Zmienne środowiskowe serwera MCP skonfigurowane przez plugins.entries.acpx.config.mcpServers obsługują SecretInput. Dzięki temu klucze API i tokeny nie trafiają do konfiguracji w postaci zwykłego tekstu:
{ plugins: { entries: { acpx: { enabled: true, config: { mcpServers: { github: { command: "npx", args: ["-y", "@modelcontextprotocol/server-github"], env: { GITHUB_PERSONAL_ACCESS_TOKEN: { source: "env", provider: "default", id: "MCP_GITHUB_PAT", }, }, }, }, }, }, }, },}Wartości tekstowe nadal działają. Odwołania szablonów środowiskowych, takie jak ${MCP_SERVER_API_KEY}, oraz obiekty SecretRef są rozwiązywane podczas aktywacji gateway przed uruchomieniem procesu serwera MCP. Podobnie jak w przypadku innych powierzchni SecretRef, nierozwiązane odwołania blokują aktywację tylko wtedy, gdy plugin acpx jest faktycznie aktywny.
Materiał uwierzytelniający SSH sandboxa
Główny backend sandboxa ssh obsługuje również SecretRefs dla materiału uwierzytelniającego SSH:
{ agents: { defaults: { sandbox: { mode: "all", backend: "ssh", ssh: { target: "user@gateway-host:22", identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" }, certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" }, knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" }, }, }, }, },}Zachowanie w czasie działania:
- OpenClaw rozwiązuje te odwołania podczas aktywacji sandboxa, a nie leniwie przy każdym wywołaniu SSH.
- Rozwiązane wartości są zapisywane do plików tymczasowych z restrykcyjnymi uprawnieniami i używane w wygenerowanej konfiguracji SSH.
- Jeśli efektywny backend sandboxa nie jest
ssh, te odwołania pozostają nieaktywne i nie blokują uruchamiania.
Obsługiwana powierzchnia poświadczeń
Kanoniczne obsługiwane i nieobsługiwane poświadczenia są wymienione w:
Wymagane zachowanie i pierwszeństwo
- Pole bez odwołania: bez zmian.
- Pole z odwołaniem: wymagane na aktywnych powierzchniach podczas aktywacji.
- Jeśli obecne są zarówno zwykły tekst, jak i odwołanie, odwołanie ma pierwszeństwo na obsługiwanych ścieżkach pierwszeństwa.
- Sentinel redakcji
__OPENCLAW_REDACTED__jest zarezerwowany dla wewnętrznej redakcji/przywracania konfiguracji i jest odrzucany jako dosłowne przesłane dane konfiguracji.
Sygnały ostrzeżeń i audytu:
SECRETS_REF_OVERRIDES_PLAINTEXT(ostrzeżenie w czasie działania)REF_SHADOWED(wynik audytu, gdy poświadczeniaauth-profiles.jsonmają pierwszeństwo przed odwołaniamiopenclaw.json)
Zachowanie zgodności Google Chat:
serviceAccountRefma pierwszeństwo przed zwykłym tekstemserviceAccount.- Wartość w postaci zwykłego tekstu jest ignorowana, gdy ustawione jest siostrzane odwołanie.
Wyzwalacze aktywacji
Aktywacja sekretów uruchamia się przy:
- Uruchomieniu (kontrola wstępna oraz końcowa aktywacja)
- Ścieżce gorącego zastosowania przeładowania konfiguracji
- Ścieżce sprawdzenia restartu przy przeładowaniu konfiguracji
- Ręcznym przeładowaniu przez
secrets.reload - Kontroli wstępnej RPC zapisu konfiguracji Gateway (
config.set/config.apply/config.patch) pod kątem rozwiązywalności SecretRef na aktywnej powierzchni w przesłanym ładunku konfiguracji przed utrwaleniem edycji
Kontrakt aktywacji:
- Sukces atomowo podmienia migawkę.
- Niepowodzenie uruchamiania przerywa uruchamianie gateway.
- Niepowodzenie przeładowania w czasie działania zachowuje ostatnią znaną dobrą migawkę.
- Niepowodzenie kontroli wstępnej write-RPC odrzuca przesłaną konfigurację i pozostawia zarówno konfigurację na dysku, jak i aktywną migawkę czasu działania bez zmian.
- Podanie jawnego tokenu kanału dla pojedynczego wywołania do wychodzącego pomocnika/narzędzia nie wyzwala aktywacji SecretRef; punktami aktywacji pozostają uruchamianie, przeładowanie i jawne
secrets.reload.
Sygnały degradacji i przywrócenia
Gdy aktywacja podczas przeładowania nie powiedzie się po zdrowym stanie, OpenClaw przechodzi w zdegradowany stan sekretów.
Jednorazowe zdarzenie systemowe i kody dziennika:
SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
Zachowanie:
- Zdegradowany: runtime zachowuje ostatnią znaną dobrą migawkę.
- Przywrócony: emitowane raz po następnej udanej aktywacji.
- Powtarzające się niepowodzenia, gdy system jest już zdegradowany, zapisują ostrzeżenia, ale nie zalewają zdarzeniami.
- Szybkie przerwanie uruchamiania nie emituje zdarzeń degradacji, ponieważ runtime nigdy nie stał się aktywny.
Rozwiązywanie ścieżek poleceń
Ścieżki poleceń mogą włączyć obsługiwane rozwiązywanie SecretRef przez RPC migawki Gateway.
Istnieją dwa ogólne zachowania:
Ścisłe ścieżki poleceń
Na przykład ścieżki zdalnej pamięci openclaw memory oraz openclaw qr --remote, gdy potrzebuje zdalnych odwołań do współdzielonego sekretu. Odczytują dane z aktywnej migawki i szybko kończą się błędem, 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 audit oraz przepływy naprawy doctor/config tylko do odczytu. Również preferują aktywną migawkę, ale obniżają jakość działania zamiast przerywać, gdy docelowy SecretRef jest niedostępny w tej ścieżce polecenia.
Zachowanie tylko do odczytu:
- Gdy gateway działa, te polecenia najpierw odczytują z aktywnej migawki.
- Jeśli rozwiązywanie przez gateway jest niekompletne albo gateway jest niedostępny, próbują docelowego lokalnego fallbacku dla konkretnej powierzchni polecenia.
- Jeśli docelowy SecretRef nadal jest niedostępny, polecenie kontynuuje z obniżoną jakością wyniku tylko do odczytu i jawną diagnostyką, taką jak „skonfigurowano, ale niedostępne w tej ścieżce polecenia”.
- To obniżone zachowanie jest wyłącznie lokalne dla polecenia. Nie osłabia uruchamiania runtime, przeładowania ani ścieżek wysyłania/auth.
Inne uwagi:
- Odświeżanie migawki po rotacji sekretu 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:
Przeprowadź audyt bieżącego stanu
openclaw secrets audit --checkSkonfiguruj i zastosuj SecretRefs
openclaw secrets configure --applyPrzeprowadź ponowny audyt
openclaw secrets audit --checkNie traktuj migracji jako ukończonej, dopóki ponowny audyt nie jest czysty. Jeśli audyt nadal zgłasza wartości plaintext w spoczynku, ryzyko dostępu agenta nadal istnieje, nawet gdy API runtime zwracają wartości zredagowane.
Jeśli zapiszesz plan zamiast zastosować go podczas configure, zastosuj ten zapisany plan
za pomocą openclaw secrets apply --from <plan-path> przed ponownym audytem.
secrets audit
Ustalenia obejmują:
- wartości plaintext w spoczynku (
openclaw.json,auth-profiles.json,.envoraz wygenerowaneagents/*/agent/models.json) - pozostałości wrażliwych nagłówków dostawcy plaintext w wygenerowanych wpisach
models.json - nierozwiązane odwołania
- przesłanianie priorytetem (
auth-profiles.jsonma priorytet nad odwołaniami zopenclaw.json) - pozostałości legacy (
auth.json, przypomnienia OAuth)
Uwaga dotycząca exec:
- Domyślnie audyt pomija sprawdzenia rozwiązywalności SecretRef exec, aby uniknąć skutków ubocznych poleceń.
- Użyj
openclaw secrets audit --allow-exec, aby wykonywać dostawców exec podczas audytu.
Uwaga dotycząca pozostałości nagłówków:
- Wykrywanie wrażliwych nagłówków dostawcy opiera się na heurystyce nazw (typowe nazwy i fragmenty nagłówków auth/credential, 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 - przechwytuje szczegóły SecretRef (
source,provider,id) - uruchamia rozwiązywanie preflight
- może zastosować zmiany natychmiast
Uwaga dotycząca exec:
- Preflight pomija sprawdzenia SecretRef exec, chyba że ustawiono
--allow-exec. - Jeśli stosujesz bezpośrednio z
configure --apply, a plan obejmuje odwołania/dostawców exec, pozostaw--allow-execustawione także dla kroku apply.
Przydatne tryby:
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
Domyślne ustawienia apply dla configure:
- usuwa pasujące statyczne poświadczenia z
auth-profiles.jsondla docelowych dostawców - usuwa statyczne wpisy legacy
api_keyzauth.json - usuwa pasujące znane linie sekretów z
<config-dir>/.env
secrets apply
Zastosuj zapisany plan:
openclaw secrets apply --from /tmp/openclaw-secrets-plan.jsonopenclaw secrets apply --from /tmp/openclaw-secrets-plan.json --allow-execopenclaw secrets apply --from /tmp/openclaw-secrets-plan.json --dry-runopenclaw secrets apply --from /tmp/openclaw-secrets-plan.json --dry-run --allow-execUwaga dotycząca exec:
- dry-run pomija sprawdzenia exec, chyba że ustawiono
--allow-exec. - tryb zapisu odrzuca plany zawierające SecretRefs/dostawców exec, chyba że ustawiono
--allow-exec.
Szczegóły ścisłego kontraktu celu/ścieżki i dokładne reguły odrzucania znajdziesz w Kontrakt planu Secrets Apply.
Jednokierunkowa polityka bezpieczeństwa
Model bezpieczeństwa:
- preflight musi zakończyć się powodzeniem przed trybem zapisu
- aktywacja runtime jest walidowana przed zatwierdzeniem
- apply aktualizuje pliki przy użyciu atomowej zamiany pliku i best-effort przywracania w razie niepowodzenia
Uwagi dotyczące zgodności legacy auth
W przypadku statycznych poświadczeń runtime nie zależy już od magazynu legacy auth w postaci plaintext.
- Źródłem poświadczeń runtime jest rozwiązana migawka w pamięci.
- Statyczne wpisy legacy
api_keysą usuwane po wykryciu. - Zachowanie zgodności związane z OAuth pozostaje oddzielne.
Uwaga dotycząca Web UI
Niektóre unie SecretInput łatwiej skonfigurować w trybie surowego edytora niż w trybie formularza.
Powiązane
- Uwierzytelnianie — konfiguracja auth
- CLI: secrets — polecenia CLI
- Zmienne środowiskowe — priorytet środowiska
- Powierzchnia poświadczeń SecretRef — powierzchnia poświadczeń
- Kontrakt planu Secrets Apply — szczegóły kontraktu planu
- Bezpieczeństwo — postawa bezpieczeństwa