Gateway
Manajemen rahasia
OpenClaw mendukung SecretRefs aditif sehingga kredensial yang didukung tidak perlu disimpan sebagai teks biasa dalam konfigurasi.
Tujuan dan model runtime
Rahasia diselesaikan menjadi snapshot runtime dalam memori.
- Resolusi dilakukan secara eager selama aktivasi, bukan lazy pada jalur permintaan.
- Startup gagal cepat ketika SecretRef yang efektif aktif tidak dapat diselesaikan.
- Reload menggunakan pertukaran atomik: sukses penuh, atau pertahankan snapshot terakhir yang diketahui baik.
- Pelanggaran kebijakan SecretRef (misalnya profil auth mode OAuth yang digabungkan dengan input SecretRef) menggagalkan aktivasi sebelum pertukaran runtime.
- Permintaan runtime hanya membaca dari snapshot dalam memori yang aktif.
- Setelah aktivasi/pemuatan konfigurasi pertama berhasil, jalur kode runtime terus membaca snapshot dalam memori aktif tersebut hingga reload yang berhasil menukarnya.
- Jalur pengiriman keluar juga membaca dari snapshot aktif tersebut (misalnya pengiriman balasan/thread Discord dan pengiriman aksi Telegram); jalur tersebut tidak menyelesaikan ulang SecretRefs pada setiap pengiriman.
Ini menjauhkan gangguan penyedia rahasia dari jalur permintaan kritis.
Batas akses agen
SecretRefs melindungi kredensial agar tidak dipersistenkan dalam konfigurasi yang didukung dan permukaan model yang dihasilkan, tetapi SecretRefs bukan batas isolasi proses. Jika kredensial teks biasa tetap ada di disk pada jalur yang dapat dibaca agen, agen dapat melewati redaksi tingkat API dengan menggunakan alat file atau shell untuk memeriksa file tersebut.
Untuk deployment produksi ketika file yang dapat diakses agen termasuk dalam cakupan, anggap migrasi SecretRef selesai hanya ketika semua hal berikut benar:
- kredensial yang didukung menggunakan SecretRefs alih-alih nilai teks biasa
- sisa teks biasa legacy telah dibersihkan dari
openclaw.json,auth-profiles.json,.env, dan filemodels.jsonyang dihasilkan openclaw secrets audit --checkbersih setelah migrasi- kredensial lain yang tidak didukung atau berotasi dilindungi oleh isolasi sistem operasi, isolasi kontainer, atau proxy kredensial eksternal
Inilah alasan workflow audit/configure/apply menjadi gerbang migrasi keamanan, bukan sekadar helper praktis.
Pemfilteran permukaan aktif
SecretRefs divalidasi hanya pada permukaan yang efektif aktif.
- Permukaan yang diaktifkan: ref yang belum terselesaikan memblokir startup/reload.
- Permukaan tidak aktif: ref yang belum terselesaikan tidak memblokir startup/reload.
- Ref tidak aktif menghasilkan diagnostik non-fatal dengan kode
SECRETS_REF_IGNORED_INACTIVE_SURFACE.
Examples of inactive surfaces
- Entri channel/akun yang dinonaktifkan.
- Kredensial channel tingkat atas yang tidak diwarisi akun aktif mana pun.
- Permukaan alat/fitur yang dinonaktifkan.
- Kunci khusus penyedia pencarian web yang tidak dipilih oleh
tools.web.search.provider. Dalam mode auto (penyedia tidak ditetapkan), kunci dikonsultasikan berdasarkan prioritas untuk deteksi otomatis penyedia hingga salah satunya terselesaikan. Setelah pemilihan, kunci penyedia yang tidak dipilih diperlakukan sebagai tidak aktif hingga dipilih. - Materi auth SSH sandbox (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsData, plus override per agen) aktif hanya ketika backend sandbox efektif adalahsshuntuk agen default atau agen yang diaktifkan. - SecretRefs
gateway.remote.token/gateway.remote.passwordaktif jika salah satu dari ini benar:gateway.mode=remotegateway.remote.urldikonfigurasigateway.tailscale.modeadalahserveataufunnel- Dalam mode lokal tanpa permukaan remote tersebut:
gateway.remote.tokenaktif ketika auth token dapat menang dan tidak ada token env/auth yang dikonfigurasi.gateway.remote.passwordaktif hanya ketika auth kata sandi dapat menang dan tidak ada kata sandi env/auth yang dikonfigurasi.
- SecretRef
gateway.auth.tokentidak aktif untuk resolusi auth startup ketikaOPENCLAW_GATEWAY_TOKENdisetel, karena input token env menang untuk runtime tersebut.
Diagnostik permukaan auth Gateway
Ketika SecretRef dikonfigurasi pada gateway.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 terselesaikan.inactive: SecretRef diabaikan untuk runtime ini karena permukaan auth lain menang, atau karena auth remote dinonaktifkan/tidak aktif.
Entri ini dicatat dengan SECRETS_GATEWAY_AUTH_SURFACE dan menyertakan alasan yang digunakan oleh kebijakan permukaan aktif, sehingga Anda dapat melihat mengapa kredensial diperlakukan sebagai aktif atau tidak aktif.
Preflight referensi onboarding
Ketika onboarding berjalan dalam mode interaktif dan Anda memilih penyimpanan SecretRef, OpenClaw menjalankan validasi preflight sebelum menyimpan:
- Ref env: memvalidasi nama env var dan mengonfirmasi nilai yang tidak kosong terlihat selama setup.
- Ref penyedia (
fileatauexec): memvalidasi pemilihan penyedia, menyelesaikanid, dan memeriksa tipe nilai yang terselesaikan. - Jalur penggunaan ulang quickstart: ketika
gateway.auth.tokensudah berupa SecretRef, onboarding menyelesaikannya sebelum bootstrap probe/dashboard (untuk refenv,file, danexec) menggunakan gerbang gagal-cepat yang sama.
Jika validasi gagal, onboarding menampilkan kesalahan dan memungkinkan Anda mencoba lagi.
Kontrak SecretRef
Gunakan satu bentuk objek di semua tempat:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }env
{ source: "env", provider: "default", id: "OPENAI_API_KEY" }Field SecretInput yang didukung juga menerima shorthand string persis:
"${OPENAI_API_KEY}""$OPENAI_API_KEY"Validasi:
providerharus cocok dengan^[a-z][a-z0-9_-]{0,63}$idharus cocok dengan^[A-Z][A-Z0-9_]{0,127}$
file
{ source: "file", provider: "filemain", id: "/providers/openai/apiKey" }Validasi:
providerharus cocok dengan^[a-z][a-z0-9_-]{0,63}$idharus berupa pointer JSON absolut (/...)- Escaping RFC6901 dalam segmen:
~=>~0,/=>~1
exec
{ source: "exec", provider: "vault", id: "providers/openai/apiKey#value" }Validasi:
providerharus cocok dengan^[a-z][a-z0-9_-]{0,63}$idharus cocok dengan^[A-Za-z0-9][A-Za-z0-9._:/#-]{0,255}$(mendukung selector sepertisecret#json_key)idtidak boleh memuat.atau..sebagai segmen jalur yang dibatasi slash (misalnyaa/../bditolak)
Konfigurasi penyedia
Definisikan penyedia di bawah 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, }, },}Env provider
- Allowlist opsional melalui
allowlist. - Nilai env yang hilang/kosong menggagalkan resolusi.
File provider
- Membaca file lokal dari
path. mode: "json"mengharapkan payload objek JSON dan menyelesaikanidsebagai pointer.mode: "singleValue"mengharapkan ref id"value"dan mengembalikan isi file.- Jalur harus lulus pemeriksaan kepemilikan/izin.
- Catatan fail-closed Windows: jika verifikasi ACL tidak tersedia untuk suatu jalur, resolusi gagal. Hanya untuk jalur tepercaya, setel
allowInsecurePath: truepada penyedia tersebut untuk melewati pemeriksaan keamanan jalur.
Exec provider
- Menjalankan jalur biner absolut yang dikonfigurasi, tanpa shell.
- Secara default,
commandharus menunjuk ke file reguler (bukan symlink). - Setel
allowSymlinkCommand: trueuntuk mengizinkan jalur perintah symlink (misalnya shim Homebrew). OpenClaw memvalidasi jalur target yang terselesaikan. - Pasangkan
allowSymlinkCommanddengantrustedDirsuntuk jalur 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 jalur perintah, resolusi gagal. Hanya untuk jalur tepercaya, setel
allowInsecurePath: truepada penyedia tersebut untuk melewati pemeriksaan keamanan jalur. - Penyedia exec yang dikelola Plugin dapat menggunakan
pluginIntegrationalih-alihcommand/argsyang disalin. OpenClaw menyelesaikan detail perintah saat ini dari manifes plugin terpasang selama startup/reload. Jika plugin dinonaktifkan, dihapus, tidak tepercaya, atau tidak lagi mendeklarasikan integrasi, SecretRefs aktif yang menggunakan penyedia tersebut gagal tertutup.
Payload permintaan (stdin):
{ "protocolVersion": 1, "provider": "vault", "ids": ["providers/openai/apiKey"] }Payload respons (stdout):
{ "protocolVersion": 1, "values": { "providers/openai/apiKey": "<openai-api-key>" } } // pragma: allowlist secretKesalahan opsional per id:
{ "protocolVersion": 1, "values": {}, "errors": { "providers/openai/apiKey": { "message": "not found" } }}Kunci API berbasis file
Jangan letakkan string file:... dalam blok env konfigurasi. Blok env bersifat
literal dan tidak menimpa, jadi file:... tidak diselesaikan.
Gunakan SecretRef file pada field kredensial yang didukung sebagai gantinya:
{ 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" }, }, }, },}Untuk mode: "singleValue", id SecretRef adalah "value". Untuk
mode: "json", gunakan pointer JSON absolut seperti
"/providers/xai/apiKey".
Lihat Permukaan kredensial SecretRef untuk field konfigurasi yang menerima SecretRefs.
Contoh integrasi 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`)
Gunakan pembungkus resolver saat Anda ingin id SecretRef dipetakan ke kunci item Bitwarden
Secrets Manager. Repositori menyertakan
scripts/secrets/openclaw-bws-resolver.mjs; instal atau salin ke jalur absolut
tepercaya pada host yang menjalankan Gateway.
Persyaratan:
- Bitwarden Secrets Manager CLI (
bws) terinstal pada host Gateway. BWS_ACCESS_TOKENtersedia untuk layanan Gateway.PATHditeruskan ke resolver, atauBWS_BINdiatur ke jalur absolut binerbws.BWS_SERVER_URLharus diatur di lingkungan saat menggunakan instans Bitwarden yang di-host sendiri.
{ 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 mengelompokkan id yang diminta, menjalankan bws secret list, dan mengembalikan
nilai untuk bidang key rahasia yang cocok. Gunakan kunci yang memenuhi kontrak id
SecretRef exec, seperti openclaw/providers/openai/apiKey; kunci bergaya env-var
dengan garis bawah ditolak sebelum resolver berjalan. Jika lebih dari satu rahasia
Bitwarden yang terlihat memiliki kunci yang sama dengan yang diminta, resolver
menggagalkan id tersebut sebagai ambigu alih-alih memilih salah satunya. Setelah memperbarui config,
verifikasi jalur resolver:
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`)
Gunakan pembungkus resolver kecil saat Anda ingin id SecretRef dipetakan langsung ke
entri pass. Simpan ini sebagai executable dalam jalur absolut yang lolos
pemeriksaan jalur exec-provider Anda, misalnya
/usr/local/bin/openclaw-pass-resolver. Shebang #!/usr/bin/env node
menyelesaikan node dari PATH proses resolver, jadi sertakan PATH dalam
passEnv. Jika pass tidak ada di PATH tersebut, atur PASS_BIN di lingkungan
induk dan sertakan juga dalam 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 }));});Lalu konfigurasikan provider exec dan arahkan apiKey ke jalur entri 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", }, }, }, },}Simpan rahasia pada baris pertama entri pass, atau sesuaikan
pembungkus jika Anda ingin mengembalikan seluruh output pass show. Setelah
memperbarui config, verifikasi audit statis dan jalur resolver 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" }, }, }, },}Variabel lingkungan server MCP
Env var server MCP yang dikonfigurasi melalui plugins.entries.acpx.config.mcpServers mendukung SecretInput. Ini menjaga kunci API dan token tetap berada di luar config plaintext:
{ 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", }, }, }, }, }, }, }, },}Nilai string plaintext tetap berfungsi. Ref template env seperti ${MCP_SERVER_API_KEY} dan objek SecretRef diselesaikan selama aktivasi gateway sebelum proses server MCP dibuat. Seperti permukaan SecretRef lainnya, ref yang belum terselesaikan hanya memblokir aktivasi saat plugin acpx secara efektif aktif.
Materi auth SSH sandbox
Backend sandbox inti ssh juga mendukung SecretRefs untuk materi auth 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" }, }, }, }, },}Perilaku runtime:
- OpenClaw menyelesaikan ref ini selama aktivasi sandbox, bukan secara malas selama setiap panggilan SSH.
- Nilai yang diselesaikan ditulis ke file temp dengan izin terbatas dan digunakan dalam config 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:
Perilaku dan presedensi yang diperlukan
- Bidang tanpa ref: tidak berubah.
- Bidang dengan ref: wajib pada permukaan aktif selama aktivasi.
- Jika plaintext dan ref sama-sama ada, ref diprioritaskan pada jalur presedensi yang didukung.
- Sentinel redaksi
__OPENCLAW_REDACTED__dicadangkan untuk redaksi/pemulihan config internal dan ditolak sebagai data config literal yang dikirimkan.
Sinyal peringatan dan audit:
SECRETS_REF_OVERRIDES_PLAINTEXT(peringatan runtime)REF_SHADOWED(temuan audit saat kredensialauth-profiles.jsondiprioritaskan atas refopenclaw.json)
Perilaku kompatibilitas Google Chat:
serviceAccountRefdiprioritaskan atasserviceAccountplaintext.- Nilai plaintext diabaikan saat ref saudara diatur.
Pemicu aktivasi
Aktivasi rahasia berjalan saat:
- Startup (preflight ditambah aktivasi final)
- Jalur hot-apply reload config
- Jalur restart-check reload config
- Reload manual melalui
secrets.reload - Preflight RPC tulis config Gateway (
config.set/config.apply/config.patch) untuk resolvabilitas SecretRef permukaan aktif di dalam payload config yang dikirimkan sebelum menyimpan edit
Kontrak aktivasi:
- Berhasil menukar snapshot secara atomik.
- Kegagalan startup membatalkan startup gateway.
- Kegagalan reload runtime mempertahankan snapshot terakhir yang diketahui baik.
- Kegagalan preflight write-RPC menolak config yang dikirimkan dan mempertahankan config disk serta snapshot runtime aktif tanpa perubahan.
- Menyediakan token kanal per panggilan eksplisit ke panggilan helper/tool outbound tidak memicu aktivasi SecretRef; titik aktivasi tetap startup, reload, dan
secrets.reloadeksplisit.
Sinyal terdegradasi dan pulih
Saat aktivasi pada waktu reload gagal setelah status sehat, OpenClaw memasuki status rahasia terdegradasi.
Event sistem satu kali dan kode log:
SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
Perilaku:
- Terdegradasi: runtime mempertahankan snapshot terakhir yang diketahui baik.
- Pulih: dipancarkan sekali setelah aktivasi berhasil berikutnya.
- Kegagalan berulang saat sudah terdegradasi mencatat peringatan tetapi tidak membanjiri event.
- Fail-fast startup tidak memancarkan event terdegradasi karena runtime tidak pernah menjadi aktif.
Resolusi jalur perintah
Jalur perintah dapat memilih ikut serta dalam resolusi SecretRef yang didukung melalui RPC snapshot gateway.
Ada dua perilaku umum:
Jalur perintah ketat
Misalnya jalur remote-memory openclaw memory dan openclaw qr --remote ketika memerlukan referensi remote shared-secret. Keduanya membaca dari snapshot aktif dan gagal cepat ketika SecretRef yang diperlukan tidak tersedia.
Jalur perintah baca-saja
Misalnya openclaw status, openclaw status --all, openclaw channels status, openclaw channels resolve, openclaw security audit, serta alur perbaikan doctor/config baca-saja. Semuanya juga lebih memilih snapshot aktif, tetapi menurun fungsinya alih-alih batal ketika SecretRef yang ditargetkan tidak tersedia di jalur perintah tersebut.
Perilaku baca-saja:
- Ketika gateway berjalan, perintah ini membaca dari snapshot aktif terlebih dahulu.
- Jika resolusi gateway belum lengkap atau gateway tidak tersedia, perintah mencoba fallback lokal tertarget untuk permukaan perintah tertentu.
- Jika SecretRef yang ditargetkan masih tidak tersedia, perintah berlanjut dengan keluaran baca-saja yang menurun fungsinya dan diagnostik eksplisit seperti "dikonfigurasi tetapi tidak tersedia di jalur perintah ini".
- Perilaku yang menurun fungsi ini hanya bersifat lokal untuk perintah. Ini tidak melemahkan startup runtime, reload, atau jalur kirim/auth.
Catatan lain:
- Penyegaran snapshot setelah rotasi secret backend ditangani oleh
openclaw secrets reload. - Metode RPC Gateway yang digunakan oleh jalur perintah ini:
secrets.resolve.
Alur kerja audit dan konfigurasi
Alur operator default:
Audit status saat ini
openclaw secrets audit --checkKonfigurasi dan terapkan SecretRefs
openclaw secrets configure --applyAudit ulang
openclaw secrets audit --checkJangan anggap migrasi selesai sampai audit ulang bersih. Jika audit masih melaporkan nilai plaintext saat tersimpan, risiko akses agen masih ada meskipun API runtime mengembalikan nilai yang telah disamarkan.
Jika Anda menyimpan rencana alih-alih menerapkannya selama configure, terapkan rencana tersimpan itu
dengan openclaw secrets apply --from <plan-path> sebelum audit ulang.
audit secrets
Temuan mencakup:
- nilai plaintext saat tersimpan (
openclaw.json,auth-profiles.json,.env, danagents/*/agent/models.jsonyang dihasilkan) - sisa header provider sensitif berbentuk plaintext dalam entri
models.jsonyang dihasilkan - ref yang belum terselesaikan
- precedence shadowing (
auth-profiles.jsonmengambil prioritas atas refopenclaw.json) - sisa legacy (
auth.json, pengingat OAuth)
Catatan exec:
- Secara default, audit melewati pemeriksaan resolvabilitas exec SecretRef untuk menghindari efek samping perintah.
- Gunakan
openclaw secrets audit --allow-execuntuk menjalankan provider exec selama audit.
Catatan sisa header:
- Deteksi header provider sensitif berbasis heuristik nama (nama dan fragmen header auth/kredensial umum seperti
authorization,x-api-key,token,secret,password, dancredential).
konfigurasi secrets
Helper interaktif yang:
- mengonfigurasi
secrets.providersterlebih dahulu (env/file/exec, tambah/edit/hapus) - memungkinkan Anda memilih field pembawa secret yang didukung di
openclaw.jsonplusauth-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
Catatan exec:
- Preflight melewati pemeriksaan exec SecretRef kecuali
--allow-execdisetel. - Jika Anda menerapkan langsung dari
configure --applydan rencana menyertakan ref/provider exec, tetap setel--allow-execuntuk langkah apply juga.
Mode yang berguna:
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
Default apply configure:
- hapus kredensial statis yang cocok dari
auth-profiles.jsonuntuk provider yang ditargetkan - hapus entri
api_keystatis legacy dariauth.json - hapus baris secret yang diketahui dan cocok dari
<config-dir>/.env
terapkan secrets
Terapkan rencana tersimpan:
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-execCatatan exec:
- dry-run melewati pemeriksaan exec kecuali
--allow-execdisetel. - mode tulis menolak rencana yang berisi exec SecretRefs/provider kecuali
--allow-execdisetel.
Untuk detail kontrak target/jalur ketat dan aturan penolakan persis, lihat Kontrak Rencana Apply Secrets.
Kebijakan keamanan satu arah
Model keamanan:
- preflight harus berhasil sebelum mode tulis
- aktivasi runtime divalidasi sebelum commit
- apply memperbarui file menggunakan penggantian file atomik dan pemulihan upaya terbaik saat gagal
Catatan kompatibilitas auth legacy
Untuk kredensial statis, runtime tidak lagi bergantung pada penyimpanan auth legacy berbentuk plaintext.
- Sumber kredensial runtime adalah snapshot dalam memori yang sudah terselesaikan.
- Entri
api_keystatis legacy dihapus ketika ditemukan. - Perilaku kompatibilitas terkait OAuth tetap terpisah.
Catatan Web UI
Beberapa union SecretInput lebih mudah dikonfigurasi dalam mode editor mentah daripada mode formulir.
Terkait
- Autentikasi — penyiapan auth
- CLI: secrets — perintah CLI
- Variabel Lingkungan — prioritas lingkungan
- Permukaan Kredensial SecretRef — permukaan kredensial
- Kontrak Rencana Apply Secrets — detail kontrak rencana
- Keamanan — postur keamanan