Zwykły tekst nadal działa. SecretRefs są włączane osobno dla każdego poświadczenia.
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.
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ń
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
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 wgateway.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.
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.
Kontrakt SecretRef
Używaj jednego kształtu obiektu wszędzie:- env
- file
- exec
providermusi pasować do^[a-z][a-z0-9_-]{0,63}$idmusi pasować do^[A-Z][A-Z0-9_]{0,127}$
Konfiguracja dostawcy
Zdefiniuj dostawców wsecrets.providers:
Dostawca env
Dostawca env
- Opcjonalna lista dozwolonych przez
allowlist. - Brakujące/puste wartości env powodują błąd rozwiązywania.
Dostawca plikowy
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
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.
Klucze API oparte na pliku
Nie umieszczaj ciągówfile:... 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:
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
1Password CLI
Bitwarden Secrets Manager (`bws`)
Bitwarden Secrets Manager (`bws`)
Użyj opakowania resolvera, gdy chcesz mapować identyfikatory SecretRef na klucze elementów Bitwarden
Secrets Manager. Repozytorium zawiera
Resolver grupuje żądane identyfikatory, uruchamia
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.
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:HashiCorp Vault CLI
HashiCorp Vault CLI
password-store (`pass`)
password-store (`pass`)
Użyj małego opakowania resolvera, gdy chcesz mapować identyfikatory SecretRef bezpośrednio na
wpisy Następnie skonfiguruj dostawcę exec i wskaż Przechowuj sekret w pierwszym wierszu wpisu
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:apiKey na ścieżkę wpisu pass: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:sops
sops
Zmienne środowiskowe serwera MCP
Zmienne środowiskowe serwera MCP skonfigurowane przezplugins.entries.acpx.config.mcpServers obsługują SecretInput. Dzięki temu klucze API i tokeny nie trafiają do konfiguracji w postaci zwykłego tekstu:
${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 sandboxassh obsługuje również SecretRefs dla materiału uwierzytelniającego SSH:
- 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:Poświadczenia generowane w czasie działania lub rotowane oraz materiał odświeżania OAuth są celowo wyłączone z rozwiązywania SecretRef tylko do odczytu.
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.
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)
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
- 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
- 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ń
- Ścieżki poleceń tylko do odczytu
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.- 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: Nie 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 podczasconfigure, zastosuj ten zapisany plan
za pomocą openclaw secrets apply --from <plan-path> przed ponownym audytem.
secrets audit
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)
- 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.
- 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
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
- 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.
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
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
secrets apply
Zastosuj zapisany plan:Uwaga 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.
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