Il testo in chiaro continua a funzionare. Le SecretRef sono facoltative per ogni credenziale.
Modello di runtime
- I segreti vengono risolti in uno snapshot del runtime in memoria, preventivamente durante l’attivazione, non in modo differito nei percorsi delle richieste.
- L’avvio termina immediatamente con un errore quando non è possibile risolvere una SecretRef effettivamente attiva.
- Il ricaricamento consiste in uno scambio atomico: riesce completamente oppure mantiene l’ultimo snapshot valido noto.
- Le violazioni dei criteri (ad esempio un profilo di autenticazione in modalità OAuth combinato con un input SecretRef) causano il fallimento dell’attivazione prima dello scambio del runtime.
- Le richieste di runtime leggono esclusivamente lo snapshot attivo in memoria. Le credenziali SecretRef dei provider di modelli attraversano l’archiviazione dell’autenticazione e le opzioni di streaming sotto forma di sentinelle locali al processo fino all’uscita. Anche i percorsi di consegna in uscita (consegna di risposte/thread Discord, invii di azioni Telegram) leggono tale snapshot e non risolvono nuovamente i riferimenti a ogni invio.
Inserimento al momento dell’uscita (sentinelle)
Per le credenziali dei provider di modelli basate su SecretRef, OpenClaw genera una sentinella opaca e locale al processo durante la risoluzione dell’autenticazione del modello. L’archiviazione dell’autenticazione, le opzioni di streaming, la configurazione dell’SDK, i log, gli oggetti di errore e la maggior parte delle introspezioni del runtime visualizzano quindi un valore comeoc-sent-v1-..., anziché la credenziale del provider. La richiesta del modello protetta e i controlli di integrità gestiti dei provider locali sostituiscono le sentinelle note nei valori di URL e intestazioni immediatamente prima che ogni richiesta lasci il processo.
I valori sconosciuti con formato di sentinella causano un errore in modalità sicura prima di qualsiasi attività di rete. OpenClaw rifiuta di inviare la richiesta anziché inoltrare a un provider una sentinella non risolta. I valori segreti risolti vengono inoltre registrati per l’oscuramento nei log in base alla corrispondenza esatta del valore, come misura di difesa in profondità.
Gli adattatori dei provider usano il punto di inserimento più avanzato supportato dal relativo SDK:
- Gli SDK con un’opzione fetch personalizzata ricevono la funzione fetch protetta di OpenClaw, così l’SDK conserva la sentinella.
- Gli SDK senza un’opzione fetch personalizzata estraggono il valore dalla sentinella immediatamente prima della creazione del client. Gli stream dei provider di proprietà dei Plugin e gli harness degli agenti eseguono l’estrazione nell’ultimo passaggio gestito dal core, perché tali trasporti non condividono la funzione fetch protetta di OpenClaw.
OPENCLAW_SECRET_SENTINELS=off (accetta anche 0 o false, senza distinzione tra maiuscole e minuscole) per disabilitare la generazione delle sentinelle durante la risposta agli incidenti o la risoluzione di problemi di compatibilità. L’interruttore di emergenza non disabilita la registrazione dell’oscuramento in base alla corrispondenza esatta del valore.
Limite di accesso dell’agente
Le SecretRef impediscono la persistenza delle credenziali nella configurazione e nei file dei modelli generati, ma non costituiscono un limite di isolamento del processo. Una credenziale in testo in chiaro lasciata sul disco in un percorso leggibile dall’agente resta accessibile tramite strumenti per file o shell, aggirando l’oscuramento a livello di API. Per le distribuzioni di produzione in cui rientrano nell’ambito i file accessibili all’agente, considerare completa la migrazione solo quando sono soddisfatte tutte le condizioni seguenti:- Le credenziali supportate usano SecretRef anziché valori in testo in chiaro.
- I residui legacy in testo in chiaro vengono rimossi da
openclaw.json,auth-profiles.json,.enve dai filemodels.jsongenerati. openclaw secrets audit --checknon segnala problemi dopo la migrazione.- Tutte le credenziali rimanenti non supportate o soggette a rotazione sono protette mediante isolamento del sistema operativo, isolamento del container o un proxy esterno per le credenziali.
Filtro delle superfici attive
Le SecretRef vengono convalidate solo sulle superfici effettivamente attive:- Superfici abilitate: i riferimenti non risolti bloccano l’avvio o il ricaricamento.
- Superfici inattive: i riferimenti non risolti non bloccano l’avvio o il ricaricamento; generano una diagnostica
SECRETS_REF_IGNORED_INACTIVE_SURFACEnon fatale.
Esempi di superfici inattive
Esempi di superfici inattive
- Voci di canali/account disabilitate.
- Credenziali dei canali di primo livello non ereditate da alcun account abilitato.
- Superfici di strumenti/funzionalità disabilitate.
- Chiavi specifiche dei provider di ricerca Web non selezionate da
tools.web.search.provider. In modalità automatica (provider non impostato), le chiavi vengono consultate in ordine di precedenza per il rilevamento automatico finché non ne viene risolta una; dopo la selezione, le chiavi dei provider non selezionati sono inattive. - Il materiale di autenticazione SSH della sandbox (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsData, oltre alle sostituzioni specifiche per agente) è attivo solo quando il backend effettivo della sandbox èsshe la modalità sandbox non èoff, per l’agente predefinito o un agente abilitato. - Le SecretRef
gateway.remote.token/gateway.remote.passwordsono attive se è soddisfatta una delle condizioni seguenti:gateway.mode=remotegateway.remote.urlè configuratogateway.tailscale.modeèserveofunnel- In modalità locale senza tali superfici remote:
gateway.remote.tokenè attivo quando l’autenticazione tramite token può prevalere e non è configurato alcun token di ambiente/autenticazione;gateway.remote.passwordè attivo solo quando l’autenticazione tramite password può prevalere e non è configurata alcuna password di ambiente/autenticazione.
- La SecretRef
gateway.auth.tokenè inattiva per la risoluzione dell’autenticazione all’avvio quando è impostatoOPENCLAW_GATEWAY_TOKEN, perché l’input del token di ambiente prevale per tale runtime.
Diagnostica delle superfici di autenticazione del Gateway
Quando viene impostata una SecretRef sugateway.auth.token, gateway.auth.password, gateway.remote.token o gateway.remote.password, l’avvio o il ricaricamento del Gateway registra lo stato della superficie con il codice SECRETS_GATEWAY_AUTH_SURFACE:
active: la SecretRef fa parte della superficie di autenticazione effettiva e deve essere risolta.inactive: prevale un’altra superficie di autenticazione oppure l’autenticazione remota è disabilitata/non attiva.
Controllo preliminare dei riferimenti durante l’onboarding
Nell’onboarding interattivo, la scelta dell’archiviazione SecretRef esegue una convalida preliminare prima del salvataggio:- Riferimenti all’ambiente: convalida il nome della variabile di ambiente e verifica che durante la configurazione sia visibile un valore non vuoto.
- Riferimenti ai provider (
fileoexec): convalida la selezione del provider, risolveide controlla il tipo del valore risolto. - Flusso di avvio rapido: quando
gateway.auth.tokenè già una SecretRef, l’onboarding la risolve prima del probe e dell’inizializzazione della dashboard (per i riferimentienv,fileeexec) usando lo stesso punto di controllo con terminazione immediata in caso di errore.
Contratto SecretRef
Un’unica struttura dell’oggetto ovunque:- env
- file
- exec
providerdeve corrispondere a^[a-z][a-z0-9_-]{0,63}$iddeve corrispondere a^[A-Z][A-Z0-9_]{0,127}$
Configurazione dei provider
Definire i provider insecrets.providers:
Provider di ambiente
Provider di ambiente
- Elenco consentito facoltativo di nomi esatti tramite
allowlist. - I valori di ambiente mancanti o vuoti causano il fallimento della risoluzione.
Provider di file
Provider di file
- Legge il file locale in
path. mode: "json"(valore predefinito) prevede un payload costituito da un oggetto JSON e risolveidcome puntatore JSON.mode: "singleValue"prevede l’ID riferimento"value"e restituisce il contenuto non elaborato del file (rimuovendo il carattere di nuova riga finale).- Il percorso deve superare i controlli di proprietà/autorizzazioni;
timeoutMs(valore predefinito 5000) emaxBytes(valore predefinito 1 MiB) limitano la lettura. - Comportamento sicuro in caso di errore su Windows: se la verifica ACL non è disponibile per il percorso, la risoluzione non riesce. Solo per i percorsi attendibili, impostare
allowInsecurePath: truesul relativo provider per ignorare il controllo.
Provider exec
Provider exec
- Esegue direttamente il percorso assoluto del file binario configurato, senza shell.
- Per impostazione predefinita,
commanddeve essere un file regolare, non un collegamento simbolico. ImpostareallowSymlinkCommand: trueper consentire percorsi di comando con collegamenti simbolici (ad esempio gli shim di Homebrew) e abbinarlo atrustedDirs(ad esempio["/opt/homebrew"]), affinché siano idonei solo i percorsi del gestore di pacchetti. - Supporta
timeoutMs(valore predefinito 5000),noOutputTimeoutMs(valore predefinito uguale atimeoutMs),maxOutputBytes(valore predefinito 1 MiB), la lista consentitaenv/passEnvetrustedDirs. - Il valore predefinito di
jsonOnlyètrue. ConjsonOnly: falsee un singolo id richiesto, lo stdout semplice non JSON viene accettato come valore di tale id. - Comportamento fail-closed su Windows: se la verifica ACL non è disponibile per il percorso del comando, la risoluzione non riesce. Solo per i percorsi attendibili, impostare
allowInsecurePath: truesu tale provider per ignorare il controllo. - I provider exec gestiti dai Plugin possono usare
pluginIntegrationinvece di una copia dicommand/args. OpenClaw risolve i dettagli correnti del comando dal manifesto del Plugin installato durante l’avvio o il ricaricamento; se il Plugin è disabilitato, rimosso, non attendibile o non dichiara più l’integrazione, i SecretRef attivi su tale provider adottano un comportamento fail-closed.
code è una diagnostica facoltativa leggibile dalla macchina. OpenClaw visualizza i codici riconosciuti
NOT_FOUND e AMBIGUOUS_DUPLICATE_KEY insieme al provider e all’id del riferimento. Altri
codici e campi in formato libero come message sono accettati per la compatibilità con il protocollo v1,
ma non vengono visualizzati perché l’output del resolver può contenere materiale relativo alle credenziali.Chiavi API basate su file
Non inserire stringhefile:... nel blocco env della configurazione. Tale blocco è letterale e non sovrascrivibile, pertanto file:... non viene mai risolto al suo interno.
Usare invece un SecretRef basato su file in un campo delle credenziali supportato:
mode: "singleValue", il valore id del SecretRef è "value". Per mode: "json", usare un puntatore JSON assoluto come "/providers/xai/apiKey".
Consultare Superficie delle credenziali SecretRef per i campi che accettano SecretRef.
Esempi di integrazione exec
Per una guida dedicata a 1Password che tratta gli account di servizio, la skill dell’agente inclusa e la risoluzione dei problemi, consultare 1Password.CLI di 1Password
CLI di 1Password
Bitwarden Secrets Manager (`bws`)
Bitwarden Secrets Manager (`bws`)
Usare un wrapper del resolver per associare gli id SecretRef alle chiavi degli elementi di Bitwarden Secrets Manager. Il repository include Il resolver raggruppa gli id richiesti, esegue
scripts/secrets/openclaw-bws-resolver.mjs; installarlo o copiarlo in un percorso assoluto attendibile sull’host che esegue il Gateway.Requisiti:- CLI di Bitwarden Secrets Manager (
bws) installata sull’host del Gateway. BWS_ACCESS_TOKENdisponibile per il servizio Gateway.PATHpassato al resolver oppureBWS_BINimpostato sul percorso assoluto del file binariobws.BWS_SERVER_URLimpostato nell’ambiente quando si usa un’istanza Bitwarden in hosting autonomo.
bws secret list e restituisce i valori per i campi key dei segreti corrispondenti. Usare chiavi che soddisfino il contratto degli id SecretRef exec, come openclaw/providers/openai/apiKey; le chiavi in stile variabile d’ambiente con trattini bassi vengono rifiutate prima dell’esecuzione del resolver. Se più di un segreto Bitwarden visibile condivide la chiave richiesta, il resolver segnala tale id come ambiguo invece di formulare un’ipotesi. Dopo aver aggiornato la configurazione, verificare il percorso del resolver:CLI di HashiCorp Vault
CLI di HashiCorp Vault
password-store (`pass`)
password-store (`pass`)
Usare un piccolo wrapper del resolver per associare direttamente gli id SecretRef alle voci Configurare quindi il provider exec e indirizzare Mantenere il segreto sulla prima riga della voce
pass. Salvarlo come eseguibile in un percorso assoluto che superi i controlli sui percorsi del provider exec, ad esempio /usr/local/bin/openclaw-pass-resolver. Lo shebang #!/usr/bin/env node risolve node dal valore PATH del processo del resolver, quindi includere PATH in passEnv. Se pass non si trova in tale PATH, impostare PASS_BIN nell’ambiente padre e includerlo anche in passEnv:apiKey al percorso della voce pass:pass oppure personalizzare il wrapper affinché restituisca l’output completo di pass show. Dopo aver aggiornato la configurazione, verificare sia l’audit statico sia il percorso del resolver exec:sops
sops
Variabili d’ambiente dei server MCP
Le variabili d’ambiente dei server MCP configurate tramiteplugins.entries.acpx.config.mcpServers accettano SecretInput, mantenendo le chiavi API e i token fuori dalla configurazione in testo normale:
${MCP_SERVER_API_KEY} e gli oggetti SecretRef vengono risolti durante l’attivazione del Gateway, prima dell’avvio del processo del server MCP. Come per le altre superfici SecretRef, i riferimenti non risolti bloccano l’attivazione solo quando il Plugin acpx è effettivamente attivo.
Materiale di autenticazione SSH della sandbox
Il backend sandbox principalessh supporta inoltre SecretRef per il materiale di autenticazione SSH:
- OpenClaw risolve questi riferimenti durante l’attivazione della sandbox, non in modo differito a ogni chiamata SSH.
- I valori risolti vengono scritti in una directory temporanea con autorizzazioni restrittive per i file (
0o600) e utilizzati nella configurazione SSH generata. - Se il backend effettivo della sandbox non è
ssh(o la modalità sandbox èoff), questi riferimenti restano inattivi e non bloccano l’avvio.
Superficie delle credenziali supportata
Le credenziali canonicamente supportate e non supportate sono elencate in Superficie delle credenziali SecretRef.Le credenziali generate in fase di esecuzione o soggette a rotazione e il materiale di aggiornamento OAuth sono intenzionalmente esclusi dalla risoluzione SecretRef di sola lettura.
Comportamento richiesto e precedenza
- Campo senza riferimento: invariato.
- Campo con un riferimento: obbligatorio sulle superfici attive durante l’attivazione.
- Se sono presenti sia il testo in chiaro sia il riferimento, quest’ultimo ha la precedenza nei percorsi di precedenza supportati.
- Il valore sentinella di oscuramento
__OPENCLAW_REDACTED__è riservato all’oscuramento/ripristino interno della configurazione e viene rifiutato come dato di configurazione letterale inviato.
SECRETS_REF_OVERRIDES_PLAINTEXT(avviso in fase di esecuzione)REF_SHADOWED(rilievo del controllo quando le credenzialiauth-profiles.jsonhanno la precedenza sui riferimentiopenclaw.json)
serviceAccountRef ha la precedenza sul valore in testo in chiaro serviceAccount; il valore in testo in chiaro viene ignorato una volta impostato il riferimento associato.
Trigger di attivazione
L’attivazione dei segreti viene eseguita in occasione di:- Avvio (controllo preliminare e attivazione finale)
- Percorso di applicazione a caldo del ricaricamento della configurazione
- Percorso di verifica del riavvio del ricaricamento della configurazione
- Ricaricamento manuale tramite
secrets.reload - Controllo preliminare dell’RPC di scrittura della configurazione del Gateway (
config.set/config.apply/config.patch), che verifica la risolvibilità dei SecretRef delle superfici attive nel payload di configurazione inviato prima di rendere persistenti le modifiche
- In caso di esito positivo, lo snapshot viene sostituito atomicamente.
- Un errore all’avvio interrompe l’avvio del Gateway.
- In caso di errore durante il ricaricamento in fase di esecuzione, viene mantenuto l’ultimo snapshot valido noto.
- Un errore nel controllo preliminare dell’RPC di scrittura rifiuta la configurazione inviata; sia la configurazione su disco sia lo snapshot attivo in fase di esecuzione restano invariati.
- Fornire un token di canale esplicito per singola chiamata a una chiamata di strumento/helper in uscita non attiva SecretRef; i punti di attivazione restano l’avvio, il ricaricamento e
secrets.reloadesplicito.
Segnali di stato degradato e ripristinato
Quando l’attivazione durante il ricaricamento non riesce dopo uno stato integro, OpenClaw entra nello stato degradato dei segreti, emettendo eventi di sistema una tantum e codici di log:SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- Stato degradato: l’ambiente di esecuzione mantiene l’ultimo snapshot valido noto.
- Stato ripristinato: viene emesso una sola volta dopo la successiva attivazione riuscita.
- Gli errori ripetuti quando lo stato è già degradato registrano avvisi, ma non emettono nuovamente l’evento.
- L’interruzione immediata all’avvio non emette mai un evento di stato degradato, perché l’ambiente di esecuzione non è mai diventato attivo.
Risoluzione dei percorsi dei comandi
I percorsi dei comandi possono abilitare la risoluzione SecretRef supportata tramite un’RPC dello snapshot del Gateway. Si applicano due comportamenti generali:- Percorsi dei comandi rigorosi
- Percorsi dei comandi di sola lettura
Ad esempio, i percorsi di memoria remota
openclaw memory e openclaw qr --remote quando richiede riferimenti remoti a segreti condivisi. Leggono dallo snapshot attivo e interrompono immediatamente l’operazione quando un SecretRef obbligatorio non è disponibile.- L’aggiornamento dello snapshot dopo la rotazione dei segreti del backend viene gestito da
openclaw secrets reload. - Metodo RPC del Gateway utilizzato da questi percorsi dei comandi:
secrets.resolve.
Flusso di controllo e configurazione
Flusso predefinito per l’operatore:1
Controllare lo stato attuale
2
Configurare e applicare i SecretRef
3
Ripetere il controllo
configure, applicare il piano salvato con openclaw secrets apply --from <plan-path> prima di ripetere il controllo.
secrets audit
secrets audit
I rilievi includono:
- Valori in testo in chiaro nei dati archiviati (
openclaw.json,auth-profiles.json,.enveagents/*/agent/models.jsongenerato). - Residui in testo in chiaro di intestazioni sensibili dei provider nelle voci
models.jsongenerate. - Riferimenti non risolti.
- Occultamento dovuto alla precedenza (
auth-profiles.jsonha la priorità sui riferimentiopenclaw.json). - Residui legacy (
auth.json, promemoria OAuth).
openclaw secrets audit --allow-exec per eseguire i provider exec durante il controllo.Nota sui residui delle intestazioni: il rilevamento delle intestazioni sensibili dei provider è basato su euristiche relative ai nomi (nomi e frammenti comuni di intestazioni di autenticazione/credenziali, come authorization, x-api-key, token, secret, password e credential).secrets configure
secrets configure
Helper interattivo che:
- Configura prima
secrets.providers(env/file/exec, aggiunta/modifica/rimozione). - Consente di selezionare i campi supportati contenenti segreti in
openclaw.json, oltre aauth-profiles.json, per l’ambito di un agente. - Può creare una nuova mappatura
auth-profiles.jsondirettamente nel selettore della destinazione. - Acquisisce i dettagli SecretRef (
source,provider,id). - Esegue la risoluzione preliminare e può applicare immediatamente le modifiche.
--allow-exec. Se si applica direttamente da configure --apply e il piano include riferimenti/provider exec, mantenere impostato --allow-exec anche per il passaggio di applicazione.Modalità utili:openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
configure:- Rimuove le credenziali statiche corrispondenti da
auth-profiles.jsonper i provider interessati. - Rimuove le voci statiche legacy
api_keydaauth.json. - Rimuove le righe di segreti noti corrispondenti da
<config-dir>/.env.
secrets apply
secrets apply
Applicare un piano salvato:Nota sull’esecuzione: la simulazione ignora i controlli exec, a meno che non sia impostato
--allow-exec; la modalità di scrittura rifiuta i piani contenenti SecretRef/provider exec, a meno che non sia impostato --allow-exec.Per i dettagli rigorosi del contratto destinazione/percorso e le regole esatte di rifiuto, consultare Contratto del piano di applicazione dei segreti.Criterio di sicurezza unidirezionale
Modello di sicurezza:- Il controllo preliminare deve riuscire prima della modalità di scrittura.
- L’attivazione in fase di esecuzione viene convalidata prima del commit.
- L’applicazione aggiorna i file mediante sostituzione atomica e tenta il ripristino in caso di errore.
Note sulla compatibilità dell’autenticazione legacy
Per le credenziali statiche, l’ambiente di esecuzione non dipende più dall’archiviazione dell’autenticazione legacy in testo in chiaro.- La fonte delle credenziali in fase di esecuzione è lo snapshot risolto in memoria.
- Le voci statiche legacy
api_keyvengono rimosse quando rilevate. - Il comportamento di compatibilità relativo a OAuth resta separato.
Nota sull’interfaccia web
Alcune unioni SecretInput sono più facili da configurare nella modalità editor non elaborato che nella modalità modulo.Risorse correlate
- Autenticazione - configurazione dell’autenticazione
- CLI: segreti - comandi CLI
- SecretRef di Vault - configurazione del provider HashiCorp Vault
- Variabili di ambiente - precedenza delle variabili di ambiente
- Superficie delle credenziali SecretRef - superficie delle credenziali
- Contratto del piano di applicazione dei segreti - dettagli del contratto del piano
- Sicurezza - strategia di sicurezza