OpenClaw รองรับ SecretRefs แบบเพิ่มได้ จึงไม่จำเป็นต้องจัดเก็บข้อมูลรับรองที่รองรับไว้เป็นข้อความธรรมดาในการกำหนดค่าDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
ข้อความธรรมดายังใช้งานได้ SecretRefs เป็นแบบเลือกใช้แยกตามข้อมูลรับรองแต่ละรายการ
เป้าหมายและโมเดลรันไทม์
Secret จะถูกแปลงเป็นสแนปช็อตรันไทม์ในหน่วยความจำ- การแปลงทำแบบทันทีระหว่างการเปิดใช้งาน ไม่ใช่แบบรอใช้จริงบนเส้นทางคำขอ
- การเริ่มต้นล้มเหลวทันทีเมื่อ SecretRef ที่มีผลใช้งานไม่สามารถแปลงได้
- การโหลดใหม่ใช้การสลับแบบ atomic: สำเร็จทั้งหมด หรือคงสแนปช็อตล่าสุดที่ทราบว่าใช้งานได้ไว้
- การละเมิดนโยบาย SecretRef (เช่น โปรไฟล์ auth โหมด OAuth ที่ใช้ร่วมกับอินพุต SecretRef) จะทำให้การเปิดใช้งานล้มเหลวก่อนสลับรันไทม์
- คำขอรันไทม์อ่านจากสแนปช็อตในหน่วยความจำที่ใช้งานอยู่เท่านั้น
- หลังจากการเปิดใช้งาน/โหลดการกำหนดค่าสำเร็จครั้งแรก เส้นทางโค้ดรันไทม์จะอ่านสแนปช็อตในหน่วยความจำที่ใช้งานอยู่นั้นต่อไป จนกว่าการโหลดใหม่สำเร็จจะสลับสแนปช็อต
- เส้นทางการส่งออกก็อ่านจากสแนปช็อตที่ใช้งานอยู่นั้นเช่นกัน (เช่น การส่งการตอบกลับ/เธรดของ Discord และการส่งแอ็กชันของ Telegram); เส้นทางเหล่านี้จะไม่แปลง SecretRefs ใหม่ในทุกการส่ง
การกรองพื้นผิวที่ใช้งานอยู่
SecretRefs จะถูกตรวจสอบเฉพาะบนพื้นผิวที่มีผลใช้งานอยู่เท่านั้น- พื้นผิวที่เปิดใช้งาน: refs ที่ยังไม่ได้แปลงจะบล็อกการเริ่มต้น/การโหลดใหม่
- พื้นผิวที่ไม่ใช้งาน: refs ที่ยังไม่ได้แปลงจะไม่บล็อกการเริ่มต้น/การโหลดใหม่
- refs ที่ไม่ใช้งานจะส่ง diagnostics แบบไม่ร้ายแรงพร้อมรหัส
SECRETS_REF_IGNORED_INACTIVE_SURFACE
Examples of inactive surfaces
Examples of inactive surfaces
- รายการช่องทาง/บัญชีที่ปิดใช้งาน
- ข้อมูลรับรองช่องทางระดับบนสุดที่ไม่มีบัญชีที่เปิดใช้งานใดสืบทอดไปใช้
- พื้นผิวเครื่องมือ/ฟีเจอร์ที่ปิดใช้งาน
- คีย์เฉพาะผู้ให้บริการค้นหาเว็บที่ไม่ได้ถูกเลือกโดย
tools.web.search.providerในโหมด auto (ไม่ได้ตั้งค่าผู้ให้บริการ) คีย์จะถูกตรวจตามลำดับความสำคัญเพื่อการตรวจจับผู้ให้บริการอัตโนมัติจนกว่าจะมีรายการหนึ่งแปลงได้ หลังจากเลือกแล้ว คีย์ของผู้ให้บริการที่ไม่ได้เลือกจะถือว่าไม่ใช้งานจนกว่าจะถูกเลือก - วัสดุ auth สำหรับ SSH ของ sandbox (
agents.defaults.sandbox.ssh.identityData,certificateData,knownHostsDataรวมถึงค่าทับซ้อนราย agent) จะใช้งานเฉพาะเมื่อ backend sandbox ที่มีผลคือsshสำหรับ agent เริ่มต้นหรือ agent ที่เปิดใช้งาน - SecretRefs ของ
gateway.remote.token/gateway.remote.passwordจะใช้งานหากข้อใดข้อหนึ่งต่อไปนี้เป็นจริง:gateway.mode=remote- มีการกำหนดค่า
gateway.remote.url gateway.tailscale.modeเป็นserveหรือfunnel- ในโหมด local ที่ไม่มีพื้นผิว remote เหล่านั้น:
gateway.remote.tokenจะใช้งานเมื่อ token auth ชนะได้และไม่มีการกำหนดค่า env/auth tokengateway.remote.passwordจะใช้งานเฉพาะเมื่อ password auth ชนะได้และไม่มีการกำหนดค่า env/auth password
- SecretRef ของ
gateway.auth.tokenจะไม่ใช้งานสำหรับการแปลง auth ตอนเริ่มต้นเมื่อมีการตั้งค่าOPENCLAW_GATEWAY_TOKENเพราะอินพุต token จาก env ชนะสำหรับรันไทม์นั้น
diagnostics ของพื้นผิว auth ของ Gateway
เมื่อมีการกำหนดค่า SecretRef บนgateway.auth.token, gateway.auth.password, gateway.remote.token หรือ gateway.remote.password การเริ่มต้น/โหลดใหม่ของ gateway จะบันทึกสถานะพื้นผิวอย่างชัดเจน:
active: SecretRef เป็นส่วนหนึ่งของพื้นผิว auth ที่มีผลและต้องแปลงได้inactive: SecretRef ถูกละเว้นสำหรับรันไทม์นี้ เพราะพื้นผิว auth อื่นชนะ หรือเพราะ remote auth ถูกปิดใช้งาน/ไม่ได้ใช้งาน
SECRETS_GATEWAY_AUTH_SURFACE และมีเหตุผลที่นโยบายพื้นผิวที่ใช้งานอยู่ใช้ประกอบอยู่ด้วย เพื่อให้คุณเห็นได้ว่าทำไมข้อมูลรับรองจึงถูกถือว่าใช้งานอยู่หรือไม่ใช้งาน
preflight การอ้างอิงระหว่าง onboarding
เมื่อ onboarding ทำงานในโหมด interactive และคุณเลือกการจัดเก็บแบบ SecretRef, OpenClaw จะตรวจสอบ preflight ก่อนบันทึก:- Env refs: ตรวจสอบชื่อ env var และยืนยันว่ามีค่าที่ไม่ว่างมองเห็นได้ระหว่างการตั้งค่า
- Provider refs (
fileหรือexec): ตรวจสอบการเลือกผู้ให้บริการ แปลงidและตรวจชนิดของค่าที่แปลงได้ - เส้นทางใช้ซ้ำ Quickstart: เมื่อ
gateway.auth.tokenเป็น SecretRef อยู่แล้ว onboarding จะแปลงค่าก่อน probe/dashboard bootstrap (สำหรับ refs แบบenv,fileและexec) โดยใช้เกต fail-fast เดียวกัน
สัญญา SecretRef
ใช้รูปทรงอ็อบเจกต์เดียวกันทุกที่:- env
- file
- exec
providerต้องตรงกับ^[a-z][a-z0-9_-]{0,63}$idต้องตรงกับ^[A-Z][A-Z0-9_]{0,127}$
การกำหนดค่าผู้ให้บริการ
กำหนดผู้ให้บริการภายใต้secrets.providers:
Env provider
Env provider
- allowlist แบบไม่บังคับผ่าน
allowlist - ค่า env ที่หายไป/ว่างจะทำให้การแปลงล้มเหลว
File provider
File provider
- อ่านไฟล์ local จาก
path mode: "json"คาดหวัง payload เป็นอ็อบเจกต์ JSON และแปลงidเป็น pointermode: "singleValue"คาดหวัง ref id"value"และส่งคืนเนื้อหาไฟล์- พาธต้องผ่านการตรวจ ownership/permission
- หมายเหตุ fail-closed บน Windows: หากไม่สามารถตรวจสอบ ACL สำหรับพาธได้ การแปลงจะล้มเหลว สำหรับพาธที่เชื่อถือได้เท่านั้น ให้ตั้งค่า
allowInsecurePath: trueบนผู้ให้บริการนั้นเพื่อข้ามการตรวจความปลอดภัยของพาธ
Exec provider
Exec provider
- รันพาธไบนารีแบบสัมบูรณ์ที่กำหนดไว้ โดยไม่ใช้ shell
- โดยค่าเริ่มต้น
commandต้องชี้ไปยังไฟล์ปกติ (ไม่ใช่ symlink) - ตั้งค่า
allowSymlinkCommand: trueเพื่ออนุญาตพาธคำสั่งที่เป็น symlink (เช่น Homebrew shims) OpenClaw จะตรวจสอบพาธเป้าหมายที่แปลงแล้ว - จับคู่
allowSymlinkCommandกับtrustedDirsสำหรับพาธของ package manager (เช่น["/opt/homebrew"]) - รองรับ timeout, no-output timeout, ขีดจำกัดจำนวนไบต์ของเอาต์พุต, env allowlist และไดเรกทอรีที่เชื่อถือได้
- หมายเหตุ fail-closed บน Windows: หากไม่สามารถตรวจสอบ ACL สำหรับพาธคำสั่งได้ การแปลงจะล้มเหลว สำหรับพาธที่เชื่อถือได้เท่านั้น ให้ตั้งค่า
allowInsecurePath: trueบนผู้ให้บริการนั้นเพื่อข้ามการตรวจความปลอดภัยของพาธ
ตัวอย่างการผสาน Exec
1Password CLI
1Password CLI
HashiCorp Vault CLI
HashiCorp Vault CLI
sops
sops
ตัวแปรสภาพแวดล้อมของเซิร์ฟเวอร์ MCP
env vars ของเซิร์ฟเวอร์ MCP ที่กำหนดค่าผ่านplugins.entries.acpx.config.mcpServers รองรับ SecretInput สิ่งนี้ช่วยกัน API keys และ token ออกจาก config ข้อความธรรมดา:
${MCP_SERVER_API_KEY} และอ็อบเจกต์ SecretRef จะถูกแปลงระหว่างการเปิดใช้งาน gateway ก่อนที่ process ของเซิร์ฟเวอร์ MCP จะถูก spawn เช่นเดียวกับพื้นผิว SecretRef อื่น ๆ refs ที่ยังไม่ได้แปลงจะบล็อกการเปิดใช้งานเฉพาะเมื่อ Plugin acpx มีผลใช้งานอยู่
วัสดุ auth สำหรับ SSH ของ sandbox
backend sandboxssh ของ core รองรับ SecretRefs สำหรับวัสดุ auth ของ SSH ด้วย:
- OpenClaw แก้ค่า refs เหล่านี้ระหว่างการเปิดใช้งาน sandbox ไม่ใช่แบบ lazy ระหว่างการเรียก SSH แต่ละครั้ง
- ค่าที่แก้แล้วจะถูกเขียนลงไฟล์ชั่วคราวด้วยสิทธิ์ที่จำกัด และใช้ในคอนฟิก SSH ที่สร้างขึ้น
- หาก backend ของ sandbox ที่มีผลไม่ใช่
sshrefs เหล่านี้จะยังไม่ทำงานและไม่บล็อกการเริ่มต้นระบบ
พื้นผิวข้อมูลประจำตัวที่รองรับ
ข้อมูลประจำตัวที่รองรับและไม่รองรับแบบ canonical แสดงไว้ใน:ข้อมูลประจำตัวที่ mint ระหว่าง runtime หรือหมุนเวียนได้ และข้อมูลสำหรับ refresh ของ OAuth ถูกตั้งใจแยกออกจากการแก้ค่า SecretRef แบบอ่านอย่างเดียว
พฤติกรรมและลำดับความสำคัญที่ต้องมี
- ฟิลด์ที่ไม่มี ref: ไม่เปลี่ยนแปลง
- ฟิลด์ที่มี ref: จำเป็นต้องมีบนพื้นผิวที่ใช้งานอยู่ระหว่างการเปิดใช้งาน
- หากมีทั้ง plaintext และ ref อยู่พร้อมกัน ref จะมีลำดับความสำคัญเหนือกว่าในเส้นทางลำดับความสำคัญที่รองรับ
- ตัวบ่งชี้การปกปิด
__OPENCLAW_REDACTED__ถูกสงวนไว้สำหรับการปกปิด/กู้คืนคอนฟิกภายใน และจะถูกปฏิเสธหากส่งมาเป็นข้อมูลคอนฟิก literal
SECRETS_REF_OVERRIDES_PLAINTEXT(คำเตือน runtime)REF_SHADOWED(ผลการ audit เมื่อข้อมูลประจำตัวในauth-profiles.jsonมีลำดับความสำคัญเหนือ refs ในopenclaw.json)
serviceAccountRefมีลำดับความสำคัญเหนือ plaintextserviceAccount- ค่า plaintext จะถูกละเว้นเมื่อมี sibling ref ตั้งค่าไว้
ตัวกระตุ้นการเปิดใช้งาน
การเปิดใช้งาน secret จะทำงานเมื่อ:- เริ่มต้นระบบ (preflight และการเปิดใช้งานขั้นสุดท้าย)
- เส้นทาง hot-apply ของการ reload คอนฟิก
- เส้นทาง restart-check ของการ reload คอนฟิก
- reload ด้วยตนเองผ่าน
secrets.reload - preflight ของ Gateway config write RPC (
config.set/config.apply/config.patch) เพื่อตรวจสอบว่า SecretRef บนพื้นผิวที่ใช้งานอยู่สามารถแก้ค่าได้ภายใน payload คอนฟิกที่ส่งมา ก่อนบันทึกการแก้ไข
- เมื่อสำเร็จ จะสลับ snapshot แบบ atomic
- การเริ่มต้นระบบล้มเหลวจะยกเลิกการเริ่มต้น Gateway
- การ reload ระหว่าง runtime ล้มเหลวจะคง snapshot ล่าสุดที่ทราบว่าใช้งานได้ดีไว้
- preflight ของ Write-RPC ล้มเหลวจะปฏิเสธคอนฟิกที่ส่งมา และคงทั้งคอนฟิกบนดิสก์กับ snapshot runtime ที่ใช้งานอยู่ไว้โดยไม่เปลี่ยนแปลง
- การระบุ channel token แบบต่อการเรียกอย่างชัดเจนให้กับ outbound helper/tool call จะไม่กระตุ้นการเปิดใช้งาน SecretRef; จุดเปิดใช้งานยังคงเป็นการเริ่มต้นระบบ, reload และ
secrets.reloadอย่างชัดเจน
สัญญาณ degraded และ recovered
เมื่อการเปิดใช้งานระหว่าง reload ล้มเหลวหลังจากสถานะปกติ OpenClaw จะเข้าสู่สถานะ secrets แบบ degraded รหัส system event และ log แบบ one-shot:SECRETS_RELOADER_DEGRADEDSECRETS_RELOADER_RECOVERED
- Degraded: runtime จะคง snapshot ล่าสุดที่ทราบว่าใช้งานได้ดีไว้
- Recovered: ส่งออกหนึ่งครั้งหลังการเปิดใช้งานสำเร็จครั้งถัดไป
- ความล้มเหลวซ้ำขณะอยู่ในสถานะ degraded อยู่แล้วจะ log คำเตือน แต่ไม่ส่ง event ซ้ำมากเกินไป
- การ fail-fast ตอนเริ่มต้นระบบจะไม่ส่ง event degraded เพราะ runtime ยังไม่เคย active
การแก้ค่าในเส้นทางคำสั่ง
เส้นทางคำสั่งสามารถเลือกใช้การแก้ค่า SecretRef ที่รองรับผ่าน Gateway snapshot RPC ได้ มีพฤติกรรมกว้าง ๆ สองแบบ:- เส้นทางคำสั่งแบบเข้มงวด
- เส้นทางคำสั่งแบบอ่านอย่างเดียว
ตัวอย่างเช่น เส้นทาง remote-memory ของ
openclaw memory และ openclaw qr --remote เมื่อจำเป็นต้องใช้ remote shared-secret refs เส้นทางเหล่านี้อ่านจาก snapshot ที่ใช้งานอยู่และ fail fast เมื่อ SecretRef ที่จำเป็นไม่พร้อมใช้งาน- การ refresh snapshot หลังจากการหมุน secret ใน backend จัดการด้วย
openclaw secrets reload - เมธอด Gateway RPC ที่เส้นทางคำสั่งเหล่านี้ใช้:
secrets.resolve
เวิร์กโฟลว์ audit และ configure
flow เริ่มต้นสำหรับ operator:secrets audit
secrets audit
ผลการตรวจพบประกอบด้วย:
- ค่า plaintext ที่เก็บอยู่ (
openclaw.json,auth-profiles.json,.envและagents/*/agent/models.jsonที่สร้างขึ้น) - เศษค้างของ header provider ที่ละเอียดอ่อนแบบ plaintext ในรายการ
models.jsonที่สร้างขึ้น - refs ที่แก้ค่าไม่ได้
- การ shadow ตามลำดับความสำคัญ (
auth-profiles.jsonมีลำดับความสำคัญเหนือ refs ในopenclaw.json) - เศษค้าง legacy (
auth.json, ข้อเตือน OAuth)
- โดยค่าเริ่มต้น audit จะข้ามการตรวจสอบว่า exec SecretRef แก้ค่าได้หรือไม่ เพื่อหลีกเลี่ยงผลข้างเคียงของคำสั่ง
- ใช้
openclaw secrets audit --allow-execเพื่อ execute exec providers ระหว่าง audit
- การตรวจจับ header provider ที่ละเอียดอ่อนอิง heuristic จากชื่อ (ชื่อและส่วนย่อยของ header สำหรับ auth/credential ที่พบบ่อย เช่น
authorization,x-api-key,token,secret,passwordและcredential)
secrets configure
secrets configure
ตัวช่วยแบบ interactive ที่:
- คอนฟิก
secrets.providersก่อน (env/file/exec, เพิ่ม/แก้ไข/ลบ) - ให้คุณเลือกฟิลด์ที่รองรับซึ่งมี secret ใน
openclaw.jsonรวมถึงauth-profiles.jsonสำหรับ scope ของ agent หนึ่งรายการ - สามารถสร้าง mapping
auth-profiles.jsonใหม่ได้โดยตรงใน target picker - เก็บรายละเอียด SecretRef (
source,provider,id) - เรียกใช้การแก้ค่าแบบ preflight
- สามารถ apply ได้ทันที
- Preflight จะข้ามการตรวจสอบ exec SecretRef เว้นแต่ตั้งค่า
--allow-exec - หากคุณ apply โดยตรงจาก
configure --applyและแผนมี exec refs/providers ให้ตั้งค่า--allow-execไว้สำหรับขั้นตอน apply ด้วย
openclaw secrets configure --providers-onlyopenclaw secrets configure --skip-provider-setupopenclaw secrets configure --agent <id>
configure:- ล้างข้อมูลประจำตัวแบบ static ที่ตรงกันออกจาก
auth-profiles.jsonสำหรับ providers เป้าหมาย - ล้างรายการ
api_keyแบบ static legacy ออกจากauth.json - ล้างบรรทัด secret ที่รู้จักและตรงกันออกจาก
<config-dir>/.env
secrets apply
secrets apply
Apply แผนที่บันทึกไว้:หมายเหตุ exec:
- dry-run จะข้ามการตรวจสอบ exec เว้นแต่ตั้งค่า
--allow-exec - โหมดเขียนจะปฏิเสธแผนที่มี exec SecretRefs/providers เว้นแต่ตั้งค่า
--allow-exec
นโยบายความปลอดภัยแบบทางเดียว
โมเดลความปลอดภัย:- preflight ต้องสำเร็จก่อนโหมดเขียน
- การเปิดใช้งาน runtime จะถูกตรวจสอบก่อน commit
- apply อัปเดตไฟล์ด้วยการแทนที่ไฟล์แบบ atomic และพยายาม restore ให้ดีที่สุดเมื่อเกิดความล้มเหลว
หมายเหตุความเข้ากันได้ของ auth legacy
สำหรับข้อมูลประจำตัวแบบ static runtime จะไม่ขึ้นกับที่จัดเก็บ auth legacy แบบ plaintext อีกต่อไป- แหล่งข้อมูลประจำตัวของ runtime คือ snapshot ในหน่วยความจำที่แก้ค่าแล้ว
- รายการ
api_keyแบบ static legacy จะถูกล้างเมื่อพบ - พฤติกรรมความเข้ากันได้ที่เกี่ยวกับ OAuth ยังคงแยกต่างหาก
หมายเหตุ Web UI
SecretInput unions บางรายการคอนฟิกในโหมด raw editor ได้ง่ายกว่าในโหมด formที่เกี่ยวข้อง
- การยืนยันตัวตน — การตั้งค่า auth
- CLI: secrets — คำสั่ง CLI
- ตัวแปรสภาพแวดล้อม — ลำดับความสำคัญของสภาพแวดล้อม
- พื้นผิวข้อมูลประจำตัวของ SecretRef — พื้นผิวข้อมูลประจำตัว
- สัญญาแผน Secrets Apply — รายละเอียดสัญญาของแผน
- ความปลอดภัย — ท่าทีด้านความปลอดภัย