Manajemen secret
OpenClaw mendukung SecretRef aditif sehingga kredensial yang didukung tidak perlu disimpan sebagai plaintext di konfigurasi. Plaintext tetap berfungsi. SecretRef bersifat opt-in untuk setiap kredensial.Tujuan dan model runtime
Secret di-resolve ke dalam snapshot runtime di memori.- Resolusi dilakukan secara eager selama aktivasi, bukan secara lazy di jalur permintaan.
- Startup gagal secara fail-fast ketika SecretRef yang efektif aktif tidak dapat di-resolve.
- Reload menggunakan atomic swap: berhasil sepenuhnya, atau mempertahankan snapshot last-known-good.
- Pelanggaran kebijakan SecretRef (misalnya profil auth mode OAuth yang digabungkan dengan input SecretRef) menggagalkan aktivasi sebelum swap runtime.
- Permintaan runtime hanya membaca dari snapshot aktif di memori.
- Setelah aktivasi/load konfigurasi pertama yang berhasil, jalur kode runtime terus membaca snapshot aktif di memori tersebut sampai reload yang berhasil menukarnya.
- Jalur pengiriman outbound juga membaca dari snapshot aktif tersebut (misalnya pengiriman balasan/thread Discord dan pengiriman action Telegram); jalur ini tidak me-resolve ulang SecretRef pada setiap pengiriman.
Pemfilteran permukaan aktif
SecretRef hanya divalidasi pada permukaan yang efektif aktif.- Permukaan yang diaktifkan: ref yang tidak ter-resolve memblokir startup/reload.
- Permukaan tidak aktif: ref yang tidak ter-resolve tidak memblokir startup/reload.
- Ref yang tidak aktif mengeluarkan diagnostik non-fatal dengan kode
SECRETS_REF_IGNORED_INACTIVE_SURFACE.
- Entri channel/akun yang dinonaktifkan.
- Kredensial channel tingkat atas yang tidak diwarisi oleh akun aktif mana pun.
- Permukaan tool/fitur yang dinonaktifkan.
- Kunci khusus penyedia web search yang tidak dipilih oleh
tools.web.search.provider. Dalam mode auto (provider tidak disetel), kunci dikonsultasikan berdasarkan prioritas untuk auto-detection penyedia sampai satu kunci berhasil di-resolve. Setelah pemilihan, kunci penyedia yang tidak dipilih diperlakukan sebagai tidak aktif sampai dipilih. - Materi auth SSH sandbox (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsData, ditambah override per-agent) hanya aktif ketika backend sandbox efektif adalahsshuntuk agen default atau agen yang diaktifkan. - SecretRef
gateway.remote.token/gateway.remote.passwordaktif jika salah satu dari kondisi berikut bernilai true:gateway.mode=remotegateway.remote.urldikonfigurasigateway.tailscale.modeadalahserveataufunnel- Dalam mode local tanpa permukaan remote tersebut:
gateway.remote.tokenaktif ketika auth token dapat menang dan tidak ada env/auth token yang dikonfigurasi.gateway.remote.passwordaktif hanya ketika auth password dapat menang dan tidak ada env/auth password yang dikonfigurasi.
- SecretRef
gateway.auth.tokentidak aktif untuk resolusi auth saat startup ketikaOPENCLAW_GATEWAY_TOKENdisetel, karena input token env menang untuk runtime tersebut.
Diagnostik permukaan auth gateway
Ketika SecretRef dikonfigurasi padagateway.auth.token, gateway.auth.password,
gateway.remote.token, atau gateway.remote.password, startup/reload gateway mencatat
status permukaan secara eksplisit:
active: SecretRef adalah bagian dari permukaan auth efektif dan harus berhasil di-resolve.inactive: SecretRef diabaikan untuk runtime ini karena permukaan auth lain menang, atau karena auth remote dinonaktifkan/tidak aktif.
SECRETS_GATEWAY_AUTH_SURFACE dan menyertakan alasan yang digunakan oleh
kebijakan permukaan aktif, sehingga Anda dapat melihat mengapa sebuah kredensial diperlakukan sebagai aktif atau tidak aktif.
Preflight referensi onboarding
Saat onboarding berjalan dalam mode interaktif dan Anda memilih penyimpanan SecretRef, OpenClaw menjalankan validasi preflight sebelum menyimpan:- Ref env: memvalidasi nama env var dan mengonfirmasi bahwa nilai non-kosong terlihat selama setup.
- Ref penyedia (
fileatauexec): memvalidasi pemilihan penyedia, me-resolveid, dan memeriksa tipe nilai yang telah di-resolve. - Jalur penggunaan ulang quickstart: ketika
gateway.auth.tokensudah berupa SecretRef, onboarding me-resolve-nya sebelum bootstrap probe/dashboard (untuk refenv,file, danexec) menggunakan gate fail-fast yang sama.
Kontrak SecretRef
Gunakan satu bentuk objek di mana pun:source: "env"
providerharus cocok dengan^[a-z][a-z0-9_-]{0,63}$idharus cocok dengan^[A-Z][A-Z0-9_]{0,127}$
source: "file"
providerharus cocok dengan^[a-z][a-z0-9_-]{0,63}$idharus berupa pointer JSON absolut (/...)- Escape RFC6901 dalam segmen:
~=>~0,/=>~1
source: "exec"
providerharus cocok dengan^[a-z][a-z0-9_-]{0,63}$idharus cocok dengan^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$idtidak boleh mengandung.atau..sebagai segmen path yang dipisahkan slash (misalnyaa/../bditolak)
Konfigurasi penyedia
Definisikan penyedia di bawahsecrets.providers:
Penyedia env
- Allowlist opsional melalui
allowlist. - Nilai env yang hilang/kosong menyebabkan resolusi gagal.
Penyedia file
- Membaca file lokal dari
path. mode: "json"mengharapkan payload objek JSON dan me-resolveidsebagai pointer.mode: "singleValue"mengharapkan id ref"value"dan mengembalikan isi file.- Path harus lolos pemeriksaan kepemilikan/izin.
- Catatan fail-closed Windows: jika verifikasi ACL tidak tersedia untuk sebuah path, resolusi gagal. Hanya untuk path tepercaya, setel
allowInsecurePath: truepada penyedia tersebut untuk melewati pemeriksaan keamanan path.
Penyedia exec
- Menjalankan path biner absolut yang dikonfigurasi, tanpa shell.
- Secara default,
commandharus menunjuk ke file reguler (bukan symlink). - Setel
allowSymlinkCommand: trueuntuk mengizinkan path command symlink (misalnya shim Homebrew). OpenClaw memvalidasi path target yang telah di-resolve. - Pasangkan
allowSymlinkCommanddengantrustedDirsuntuk path package manager (misalnya["/opt/homebrew"]). - Mendukung timeout, timeout tanpa output, batas byte output, allowlist env, dan direktori tepercaya.
- Catatan fail-closed Windows: jika verifikasi ACL tidak tersedia untuk path command, resolusi gagal. Hanya untuk path tepercaya, setel
allowInsecurePath: truepada penyedia tersebut untuk melewati pemeriksaan keamanan path.
Contoh integrasi exec
CLI 1Password
CLI HashiCorp Vault
sops
Variabel lingkungan server MCP
Env var server MCP yang dikonfigurasi melaluiplugins.entries.acpx.config.mcpServers mendukung SecretInput. Ini menjaga API key dan token tetap berada di luar konfigurasi plaintext:
${MCP_SERVER_API_KEY} dan objek SecretRef di-resolve selama aktivasi gateway sebelum proses server MCP dijalankan. Seperti permukaan SecretRef lainnya, ref yang tidak ter-resolve hanya memblokir aktivasi ketika plugin acpx efektif aktif.
Materi auth SSH sandbox
Backend sandboxssh inti juga mendukung SecretRef untuk materi auth SSH:
- OpenClaw me-resolve ref ini selama aktivasi sandbox, bukan secara lazy selama setiap panggilan SSH.
- Nilai yang telah di-resolve ditulis ke file sementara dengan izin ketat dan digunakan dalam konfigurasi SSH yang dihasilkan.
- Jika backend sandbox efektif bukan
ssh, ref ini tetap tidak aktif dan tidak memblokir startup.
Permukaan kredensial yang didukung
Kredensial kanonis yang didukung dan tidak didukung tercantum di: Kredensial yang dibuat runtime atau berotasi dan materi refresh OAuth sengaja dikecualikan dari resolusi SecretRef baca-saja.Perilaku yang diwajibkan dan prioritas
- Field tanpa ref: tidak berubah.
- Field dengan ref: wajib pada permukaan aktif selama aktivasi.
- Jika plaintext dan ref sama-sama ada, ref diprioritaskan pada jalur prioritas yang didukung.
- Sentinel redaksi
__OPENCLAW_REDACTED__dicadangkan untuk redaksi/pemulihan konfigurasi internal dan ditolak sebagai data konfigurasi literal yang dikirimkan.
SECRETS_REF_OVERRIDES_PLAINTEXT(peringatan runtime)REF_SHADOWED(temuan audit ketika kredensialauth-profiles.jsondiprioritaskan dibanding refopenclaw.json)
serviceAccountRefdiprioritaskan dibanding plaintextserviceAccount.- Nilai plaintext diabaikan ketika ref sibling disetel.
Pemicu aktivasi
Aktivasi secret berjalan pada:- Startup (preflight ditambah aktivasi final)
- Jalur hot-apply reload konfigurasi
- Jalur restart-check reload konfigurasi
- Reload manual melalui
secrets.reload - Preflight RPC penulisan konfigurasi gateway (
config.set/config.apply/config.patch) untuk resolvabilitas SecretRef permukaan aktif di dalam payload konfigurasi yang dikirimkan sebelum edit dipersistenkan
- Keberhasilan menukar snapshot secara atomik.
- Kegagalan startup membatalkan startup gateway.
- Kegagalan reload runtime mempertahankan snapshot last-known-good.
- Kegagalan preflight write-RPC menolak konfigurasi yang dikirimkan dan menjaga konfigurasi di disk serta snapshot runtime aktif tetap tidak berubah.
- Memberikan token channel per-panggilan yang eksplisit ke panggilan helper/tool outbound tidak memicu aktivasi SecretRef; titik aktivasi tetap startup, reload, dan
secrets.reloadeksplisit.
Sinyal degraded dan recovered
Ketika aktivasi saat reload gagal setelah keadaan sehat, OpenClaw masuk ke status secret degraded. Event sistem sekali-kirim dan kode log:SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- Degraded: runtime mempertahankan snapshot last-known-good.
- Recovered: dipancarkan sekali setelah aktivasi berhasil berikutnya.
- Kegagalan berulang saat sudah degraded mencatat peringatan tetapi tidak membanjiri event.
- Fail-fast saat startup tidak memancarkan event degraded karena runtime tidak pernah menjadi aktif.
Resolusi jalur command
Jalur command dapat memilih resolusi SecretRef yang didukung melalui RPC snapshot gateway. Ada dua perilaku umum:- Jalur command ketat (misalnya jalur remote-memory
openclaw memorydanopenclaw qr --remoteketika membutuhkan ref shared-secret remote) membaca dari snapshot aktif dan gagal secara fail-fast ketika SecretRef yang dibutuhkan tidak tersedia. - Jalur command baca-saja (misalnya
openclaw status,openclaw status --all,openclaw channels status,openclaw channels resolve,openclaw security audit, dan alur doctor/perbaikan konfigurasi baca-saja) juga memprioritaskan snapshot aktif, tetapi mengalami degradasi alih-alih membatalkan ketika SecretRef yang ditargetkan tidak tersedia di jalur command tersebut.
- Ketika gateway berjalan, command ini terlebih dahulu membaca dari snapshot aktif.
- Jika resolusi gateway tidak lengkap atau gateway tidak tersedia, command mencoba fallback lokal yang ditargetkan untuk permukaan command tertentu.
- Jika SecretRef yang ditargetkan tetap tidak tersedia, command melanjutkan dengan output baca-saja yang terdegradasi dan diagnostik eksplisit seperti “dikonfigurasi tetapi tidak tersedia di jalur command ini”.
- Perilaku terdegradasi ini hanya berlaku lokal pada command. Ini tidak melemahkan jalur startup, reload, atau kirim/auth runtime.
- Refresh snapshot setelah rotasi secret backend ditangani oleh
openclaw secrets reload. - Metode RPC gateway yang digunakan oleh jalur command ini:
secrets.resolve.
Alur kerja audit dan konfigurasi
Alur operator default:secrets audit
Temuan meliputi:
- nilai plaintext saat tersimpan (
openclaw.json,auth-profiles.json,.env, danagents/*/agent/models.jsonyang dihasilkan) - residu header penyedia sensitif plaintext pada entri
models.jsonyang dihasilkan - ref yang tidak ter-resolve
- precedence shadowing (
auth-profiles.jsondiprioritaskan atas refopenclaw.json) - residu lama (
auth.json, pengingat OAuth)
- Secara default, audit melewati pemeriksaan resolvabilitas SecretRef exec untuk menghindari efek samping command.
- Gunakan
openclaw secrets audit --allow-execuntuk mengeksekusi penyedia exec selama audit.
- Deteksi header penyedia sensitif didasarkan pada heuristik nama (nama dan fragmen header auth/kredensial umum seperti
authorization,x-api-key,token,secret,password, dancredential).
secrets configure
Helper interaktif yang:
- mengonfigurasi
secrets.providersterlebih dahulu (env/file/exec, tambah/edit/hapus) - memungkinkan Anda memilih field pembawa secret yang didukung di
openclaw.jsonditambahauth-profiles.jsonuntuk satu cakupan agen - dapat membuat pemetaan
auth-profiles.jsonbaru langsung di pemilih target - menangkap detail SecretRef (
source,provider,id) - menjalankan resolusi preflight
- dapat langsung menerapkan
- Preflight melewati pemeriksaan SecretRef exec kecuali
--allow-execdisetel. - Jika Anda menerapkan langsung dari
configure --applydan rencana mencakup ref/penyedia exec, biarkan--allow-exectetap disetel untuk langkah apply juga.
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
configure:
- membersihkan kredensial statis yang cocok dari
auth-profiles.jsonuntuk penyedia yang ditargetkan - membersihkan entri statis
api_keylama dariauth.json - membersihkan baris secret yang diketahui dan cocok dari
<config-dir>/.env
secrets apply
Menerapkan rencana yang disimpan:
- dry-run melewati pemeriksaan exec kecuali
--allow-execdisetel. - mode tulis menolak rencana yang berisi SecretRef/penyedia exec kecuali
--allow-execdisetel.
Kebijakan keamanan satu arah
OpenClaw sengaja tidak menulis backup rollback yang berisi nilai secret plaintext historis. Model keamanan:- preflight harus berhasil sebelum mode tulis
- aktivasi runtime divalidasi sebelum commit
- apply memperbarui file menggunakan penggantian file atomik dan restore upaya-terbaik saat gagal
Catatan kompatibilitas auth lama
Untuk kredensial statis, runtime tidak lagi bergantung pada penyimpanan auth lama berbentuk plaintext.- Sumber kredensial runtime adalah snapshot di memori yang telah di-resolve.
- Entri statis
api_keylama dibersihkan saat ditemukan. - Perilaku kompatibilitas terkait OAuth tetap terpisah.
Catatan Web UI
Beberapa union SecretInput lebih mudah dikonfigurasi dalam mode editor mentah daripada mode formulir.Dokumen terkait
- Command CLI: secrets
- Detail kontrak rencana: Kontrak Rencana Apply Secret
- Permukaan kredensial: Permukaan Kredensial SecretRef
- Setup auth: Autentikasi
- Postur keamanan: Keamanan
- Prioritas lingkungan: Variabel Lingkungan