Gateway
1Password
OpenClaw ทำงานร่วมกับ 1Password ได้สองวิธีที่แยกจากกัน:
- ข้อมูลลับในการกำหนดค่า: ฟิลด์ SecretRef ใดๆ ใน
openclaw.jsonสามารถแก้ค่าแบบรันไทม์ผ่าน CLIopได้ จึงไม่ต้องเก็บคีย์ API ไว้ในไฟล์การกำหนดค่า - เวิร์กโฟลว์ของเอเจนต์: Skills
1passwordที่รวมมาให้จะสอนเอเจนต์ให้ลงชื่อเข้าใช้ และอ่านหรือแทรกข้อมูลลับด้วยopสำหรับงานของตนเอง
ข้อกำหนด
- ติดตั้ง 1Password CLI (
op) บนโฮสต์ Gateway (brew install 1password-cliบน macOS) - โหมดการยืนยันตัวตนสำหรับ
op:- บัญชีบริการ (แนะนำสำหรับ Gateway แบบไม่มีส่วนติดต่อผู้ใช้): ส่งออก
OP_SERVICE_ACCOUNT_TOKENในสภาพแวดล้อมของบริการ Gateway โดยไม่ต้องใช้แอปเดสก์ท็อปและไม่ต้องลงชื่อเข้าใช้แบบโต้ตอบ - การผสานการทำงานกับแอปเดสก์ท็อป: แอป 1Password ทำงานบนเครื่องเดียวกันโดยเปิดใช้การผสานการทำงานกับ CLI การเรียกใช้ครั้งแรกอาจเรียกใช้ Touch ID หรือการยืนยันตัวตนของระบบ
- การลงชื่อเข้าใช้แบบสแตนด์อโลน:
op signinจะแสดงพร้อมท์ในแต่ละเซสชัน เอเจนต์สามารถใช้งานผ่าน Skills ได้ แต่ไม่เหมาะสำหรับการแก้ค่าข้อมูลลับในการกำหนดค่าบน Gateway แบบไม่มีส่วนติดต่อผู้ใช้
- บัญชีบริการ (แนะนำสำหรับ Gateway แบบไม่มีส่วนติดต่อผู้ใช้): ส่งออก
แก้ค่าข้อมูลลับในการกำหนดค่าด้วย op
ประกาศผู้ให้บริการข้อมูลลับแบบ exec ซึ่งเรียกใช้ op read ด้วยการอ้างอิง op://vault/item/field แล้วกำหนดให้ฟิลด์ใดๆ ที่รองรับ SecretRef ชี้ไปยังผู้ให้บริการดังกล่าว:
{ secrets: { providers: { onepassword_openai: { source: "exec", command: "/opt/homebrew/bin/op", allowSymlinkCommand: true, // จำเป็นสำหรับไบนารีที่ Homebrew ติดตั้งเป็นลิงก์สัญลักษณ์ 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" }, }, }, },}องค์ประกอบต่างๆ ทำงานร่วมกันดังนี้:
commandต้องเป็นพาธแบบสัมบูรณ์ โดยtrustedDirsจะระบุว่าไดเรกทอรีของพาธนั้นเชื่อถือได้ และจำเป็นต้องใช้allowSymlinkCommandเนื่องจาก Homebrew ติดตั้งopเป็นลิงก์สัญลักษณ์argsส่งต่อการอ้างอิงop://vault/item/fieldตามต้นฉบับทุกประการ OpenClaw ไม่ได้แยกวิเคราะห์สคีมาop://ด้วยตนเอง แต่ไบนารีopจะเป็นผู้แก้ค่าดังกล่าวpassEnvส่งต่อตัวแปรที่ระบุจากสภาพแวดล้อม Gateway การผสานการทำงานกับแอปเดสก์ท็อปต้องใช้HOMEส่วนบัญชีบริการต้องมีOP_SERVICE_ACCOUNT_TOKENอยู่ในสภาพแวดล้อมของบริการ Gateway ด้วย (เพิ่มลงในpassEnvหรือตั้งค่าผ่านenvเฉพาะเมื่อยอมรับได้ว่าโทเค็นจะสามารถอ่านได้จากไฟล์การกำหนดค่า)- สำหรับเอาต์พุตค่าเดียว ให้คง
id: "value"ไว้ หากใช้jsonOnly: trueและเพย์โหลด JSON ให้ระบุฟิลด์ด้วย ID ตัวชี้ JSON แทน - การใช้รายการผู้ให้บริการหนึ่งรายการต่อข้อมูลลับหนึ่งรายการช่วยให้ตรวจสอบการอ้างอิงได้ ควรตั้งชื่อผู้ให้บริการตามองค์ประกอบที่ใช้งาน (
onepassword_openai,onepassword_telegram)
ดู ข้อมูลลับของ Gateway สำหรับลำดับการแก้ค่า การแคช และความหมายของความล้มเหลว และดู พื้นผิวข้อมูลรับรอง SecretRef สำหรับฟิลด์ทั้งหมดที่ยอมรับ SecretRef
การตั้งค่าบัญชีบริการสำหรับ Gateway แบบไม่มีส่วนติดต่อผู้ใช้
- สร้างบัญชีบริการในบัญชี 1Password และให้สิทธิ์อ่านเฉพาะรายการในห้องนิรภัยที่ Gateway ต้องใช้
- มอบ
OP_SERVICE_ACCOUNT_TOKENให้แก่บริการ Gateway (plist ของ launchd, ยูนิต systemd หรือ env ของคอนเทนเนอร์) - เพิ่ม
"OP_SERVICE_ACCOUNT_TOKEN"ลงในรายการpassEnvของผู้ให้บริการ - ตรวจสอบจากสภาพแวดล้อมของโฮสต์ Gateway:
op whoamiควรแสดงบัญชีบริการโดยไม่แสดงพร้อมท์
การอ่านด้วยบัญชีบริการกำหนดให้ระบุชื่อห้องนิรภัยอย่างชัดเจนในการอ้างอิง op:// จำกัดขอบเขตของบัญชีให้แคบที่สุด เนื่องจากบัญชีนี้เป็นข้อมูลรับรองแบบ bearer
Skills 1password สำหรับเอเจนต์
OpenClaw รวม Skills 1password ซึ่งช่วยให้เอเจนต์ใช้งาน op ได้อย่างเชี่ยวชาญ โดยจะตรวจหาโหมดการยืนยันตัวตนที่พร้อมใช้งาน (บัญชีบริการ การผสานการทำงานกับแอปเดสก์ท็อป หรือการลงชื่อเข้าใช้แบบสแตนด์อโลน) ตรวจสอบสิทธิ์เข้าถึงด้วย op whoami ก่อนอ่านข้อมูลใดๆ และเลือกใช้ op run / op inject แทนการเขียนค่าข้อมูลลับลงดิสก์ Skills นี้ต้องใช้ไบนารี op และมีตัวเลือกติดตั้งผ่าน Homebrew เมื่อไม่พบไบนารีดังกล่าว
เอเจนต์ใช้ Skills นี้สำหรับเวิร์กโฟลว์ของตนเอง เช่น อ่านโทเค็นสำหรับการปรับใช้ระหว่างงาน หรือแทรกตัวแปรสภาพแวดล้อมลงในคำสั่ง กระบวนการนี้แยกจากการแก้ค่าข้อมูลลับในการกำหนดค่าโดยอิสระ Gateway จะแก้ค่า SecretRef โดยไม่ต้องใช้ Skills ใดๆ
หมายเหตุด้านความปลอดภัย
- ค่าข้อมูลลับที่แก้ผ่านผู้ให้บริการแบบ exec จะคงอยู่ในหน่วยความจำของ Gateway ส่วนสแนปช็อตการกำหนดค่าและการตอบกลับ
config.getจะปกปิดฟิลด์ SecretRef - ห้ามใส่ค่าข้อมูลลับใน
openclaw.jsonบันทึก หรือแชตโดยเด็ดขาด ให้เก็บชื่อรายการไว้ในการกำหนดค่าและเก็บค่าไว้ใน 1Password - บันทึกการตรวจสอบของ 1Password จะแสดงการอ่านทุกครั้งของบัญชีบริการ ทำให้การหมุนเวียนคีย์และการตรวจสอบเหตุการณ์เป็นไปได้ในทางปฏิบัติ
การแก้ไขปัญหา
command not foundหรือข้อผิดพลาดในการสร้างโปรเซส: ใช้พาธแบบสัมบูรณ์ของopและเพิ่มไดเรกทอรีของพาธนั้นลงในtrustedDirsopแก้ค่าได้ แต่การอ่านล้มเหลวโดยมีข้อผิดพลาดเกี่ยวกับลิงก์สัญลักษณ์: ตั้งค่าallowSymlinkCommand: trueสำหรับการติดตั้งผ่าน Homebrewaccount is not signed in: สำหรับบัญชีบริการ ให้ยืนยันว่าOP_SERVICE_ACCOUNT_TOKENถูกส่งถึงบริการ Gateway และมีอยู่ในรายการpassEnv; สำหรับการผสานการทำงานกับเดสก์ท็อป ให้ยืนยันว่าแอปกำลังทำงานและปลดล็อกอยู่- การอ่านครั้งแรกช้า: เพิ่ม
timeoutMsในผู้ให้บริการ เนื่องจากการเริ่มทำงานแบบ cold start ของopอาจเกินระยะหมดเวลาที่เข้มงวดบนโฮสต์ที่มีภาระงานสูง