---
read_when:
    - คุณต้องการให้เอเจนต์ร้องขอข้อมูลลับที่คัดสรรไว้จาก 1Password
    - คุณต้องมีนโยบายการอนุมัติแยกสำหรับแต่ละข้อมูลลับและประวัติการตรวจสอบย้อนหลัง
    - คุณกำลังกำหนดค่าบัญชีบริการ 1Password สำหรับ OpenClaw
summary: ใช้ Plugin 1Password ที่เป็นตัวเลือกเสริมเป็นโบรกเกอร์ข้อมูลลับสำหรับเอเจนต์ที่ผ่านการตรวจสอบแล้ว
title: ตัวกลางจัดการข้อมูลลับของ 1Password
x-i18n:
    generated_at: "2026-07-19T07:53:57Z"
    model: gpt-5.6
    postprocess_version: locale-links-v1
    prompt_version: 32
    provider: openai
    source_hash: 255ab4fd2c63754fef29d3ea87dcedc9ca2bd2f34bec1f81139e2ce5b6acdba2
    source_path: plugins/onepassword.md
    workflow: 16
---

# โบรกเกอร์ข้อมูลลับ 1Password

Plugin `onepassword` ที่รวมมาให้มอบเครื่องมือเดียวที่ควบคุมด้วยนโยบายแก่เอเจนต์สำหรับ
อ่านชุดฟิลด์ 1Password ที่คัดสรรไว้ โดยค่าเริ่มต้นจะปิดใช้งานและจะ
ไม่ทำงานจนกว่าจะมี `plugins.entries.onepassword.config`

นี่คือเครื่องมือสำหรับเอเจนต์ ไม่ใช่ผู้ให้บริการ SecretRef เครื่องมือนี้จะไม่แทรกตัวแปร
สภาพแวดล้อมหรือแก้ไขข้อมูลลับในการกำหนดค่า OpenClaw

## โมเดลความปลอดภัย

- รองรับเฉพาะการยืนยันตัวตนด้วยบัญชีบริการเท่านั้น โทเค็นจะอยู่ในไฟล์ข้อมูลประจำตัวภายในเครื่อง
  และจะไม่ยอมรับใน `openclaw.json`
- ใช้เฉพาะรีจิสทรีที่คัดสรรไว้ เอเจนต์สามารถแสดงรายการ slug ที่กำหนดค่าไว้ แต่ Plugin จะไม่
  แจกแจง vault ของ 1Password
- นโยบาย `auto`, `approve` หรือ `deny` แยกตาม slug
- สิทธิ์อนุมัติมีวันหมดอายุ ค่าที่แคชไว้จะไม่ข้ามนโยบายปัจจุบัน
- ความพยายามเข้าถึงทุกครั้งจะถูกบันทึกไว้ในสถานะ SQLite ที่ใช้ร่วมกันของ OpenClaw แถวการตรวจสอบ
  จะรวมเหตุผลที่ระบุไว้ จึงควรใช้เหตุผลที่ไม่มีข้อมูลละเอียดอ่อน โบรกเกอร์จะ
  ไม่คัดลอกค่าที่ดึงมาหรือโทเค็นบริการไปยังแถวการตรวจสอบ
- หลังจากการเรียกใช้เครื่องมือปัจจุบัน การคงอยู่ของบทสนทนาที่ OpenClaw เป็นเจ้าของ
  จะแทนที่ค่า `get` ที่สำเร็จด้วยข้อมูลเมตาที่ปกปิดแล้ว
- โมเดลสามารถมองเห็นค่านั้นได้ระหว่างการเรียกใช้นั้น หากโมเดลคัดลอกค่าไปยัง
  การเรียกใช้เครื่องมือหรือการตอบกลับในภายหลัง ระเบียนที่แยกต่างหากนั้นจะอยู่นอกฮุก
  การคงอยู่ของ Plugin นี้ กำหนดนโยบายให้แคบและอย่าขอให้โมเดลแสดงค่า
  ซ้ำ
- Plugin จะเรียกใช้ `op` หนึ่งครั้งต่อการไม่พบข้อมูลในแคช และจะไม่ลองใหม่เมื่อถึงขีดจำกัดอัตราหรือ
  เกิดความล้มเหลวอื่น
- การเรียก `op` แต่ละครั้งจะทำงานด้วยสภาพแวดล้อมขั้นต่ำที่ปิดใช้งานการผสานรวมกับ
  แอปเดสก์ท็อป 1Password (`OP_LOAD_DESKTOP_APP_SETTINGS=false`,
  `OP_BIOMETRIC_UNLOCK_ENABLED=false`) ดังนั้นแอป 1Password ที่ติดตั้งบน
  โฮสต์ Gateway จะไม่เรียกกล่องโต้ตอบไบโอเมตริกหรือสิทธิ์ของ macOS

ให้สิทธิ์อ่านแก่บัญชีบริการเฉพาะ vault และรายการที่ลงทะเบียนไว้ใน
การกำหนดค่า Plugin เท่านั้น

## ก่อนเริ่มต้น

สิ่งที่ต้องมี:

- 1Password CLI (`op`) ที่ติดตั้งบนโฮสต์ Gateway
- บัญชีบริการ 1Password ที่มีสิทธิ์เข้าถึงรายการที่เลือก
- ไฟล์โทเค็นเฉพาะสำหรับบัญชีบริการ

เปิดใช้งาน Plugin ที่รวมมาให้:

```bash
openclaw plugins enable onepassword
```

สร้างไดเรกทอรีและไฟล์โทเค็นภายใต้ไดเรกทอรีสถานะ OpenClaw:

```bash
mkdir -p ~/.openclaw/credentials/onepassword
chmod 700 ~/.openclaw/credentials/onepassword
printf '%s' "$OP_SERVICE_ACCOUNT_TOKEN" > \
  ~/.openclaw/credentials/onepassword/service-account-token
chmod 600 ~/.openclaw/credentials/onepassword/service-account-token
unset OP_SERVICE_ACCOUNT_TOKEN
```

เมื่อกำหนด `OPENCLAW_STATE_DIR` ให้แทนที่ `~/.openclaw` ด้วยไดเรกทอรีนั้น
Plugin จะแจ้งเตือนหนึ่งครั้งเมื่อไฟล์โทเค็นสามารถอ่านหรือเขียนได้โดยกลุ่มหรือ
ผู้ใช้อื่น

## กำหนดค่าข้อมูลลับที่ลงทะเบียน

เพิ่มการกำหนดค่า Plugin ลงใน `openclaw.json`:

```jsonc
{
  "plugins": {
    "entries": {
      "onepassword": {
        "enabled": true,
        "config": {
          "vault": "Automation",
          "defaultPolicy": "approve",
          "cacheTtlSeconds": 300,
          "grantTtlHours": 720,
          "opTimeoutMs": 15000,
          "items": {
            "repository-token": {
              "item": "Repository automation token",
              "field": "credential",
              "policy": "approve",
              "description": "Token for repository automation",
            },
            "model-key": {
              "item": "Model provider key",
              "vault": "Agent credentials",
              "policy": "auto",
            },
          },
        },
      },
    },
  },
}
```

slug ใช้ตัวอักษรพิมพ์เล็ก ตัวเลข และเครื่องหมายยัติภังค์ โดยขึ้นต้นด้วยตัวอักษรหรือ
ตัวเลข และมีความยาวไม่เกิน 64 อักขระ รีจิสทรีหนึ่งรายการมีได้สูงสุด 32
slug ส่วนคำอธิบายมีได้สูงสุด 200 อักขระ `field` ยอมรับป้ายกำกับ
หรือ ID ของฟิลด์หนึ่งรายการ ต้องไม่มีเครื่องหมายจุลภาค และมีค่าเริ่มต้นเป็น `credential`
`vault` ระดับรายการจะแทนที่ vault เริ่มต้น `opBin` สามารถกำหนดพาธสัมบูรณ์
ไปยังไฟล์ปฏิบัติการ `op` ได้ มิฉะนั้น Plugin จะแก้ไข `op` จาก `PATH`
ชื่อรายการต้องไม่ขึ้นต้นด้วยเครื่องหมายยัติภังค์

## ใช้เครื่องมือสำหรับเอเจนต์

ชื่อเครื่องมือคือ `onepassword`

แสดงรายการ slug ที่ลงทะเบียน:

```json
{ "action": "list" }
```

ผลลัพธ์จะมีเฉพาะ slug คำอธิบาย นโยบาย และสถานะว่าสิทธิ์แบบถาวร
ยังทำงานอยู่หรือไม่ ผลลัพธ์จะไม่มีค่าข้อมูลลับและจะไม่ค้นข้อมูลจาก 1Password

ขอข้อมูลลับหนึ่งรายการ:

```json
{
  "action": "get",
  "slug": "repository-token",
  "reason": "Authenticate the requested repository operation"
}
```

ต้องระบุ `reason` โดยต้องไม่ว่างและจำกัดไว้ที่ 300 อักขระ
`get` ที่สำเร็จจะส่งคืนค่าพร้อม slug ที่กำหนดค่าไว้ ชื่อรายการ และ
ป้ายกำกับฟิลด์

สคีมาเครื่องมือยังประกาศพารามิเตอร์ภายใน `authorizationNonce` ด้วย
ชั้นนโยบายจะแทรกค่านี้หลังจากประเมินคำขอเพื่อส่งต่อการอนุญาต
ไปยังการเรียกใช้เครื่องมือที่ดำเนินการ ห้ามตั้งค่าด้วยตนเอง เพราะฮุกนโยบายจะเขียนทับ
ค่าที่ระบุ และค่าที่ไม่รู้จักจะทำให้คำขอล้มเหลว

## ระดับนโยบายและการอนุมัติ

- `auto`: ดึงข้อมูลทันทีและตรวจสอบคำขอ
- `deny`: บล็อกและตรวจสอบคำขอ
- `approve`: ใช้สิทธิ์แบบถาวรที่ยังไม่หมดอายุ หรือขอให้บุคคลอนุญาตหนึ่งครั้ง
  อนุญาตเสมอ หรือปฏิเสธ

การอนุญาตหนึ่งครั้งจะให้สิทธิ์เฉพาะการเรียกใช้เครื่องมือปัจจุบัน การอนุญาตเสมอจะเขียนสิทธิ์
แบบถาวรสำหรับเอเจนต์และ slug นั้นลงใน SQLite โดยเอเจนต์อื่นต้องได้รับ
การอนุมัติของตนเอง OpenClaw จะเสนอตัวเลือกอนุญาตเสมอเฉพาะเมื่อผู้เรียกมีอัตลักษณ์
เอเจนต์ที่ชัดเจน สิทธิ์จะหมดอายุหลังจาก `grantTtlHours` ซึ่งมีค่าเริ่มต้นเป็น 720 ชั่วโมง
การอนุมัติที่ไม่ได้รับการตัดสินใจหรือหมดเวลาจะปฏิเสธคำขอ โดยระยะเวลารอการอนุมัติ
สูงสุดคือ 600 วินาที Plugin จะเก็บสิทธิ์แบบถาวรได้สูงสุด 1,024 รายการ เมื่อถึง
ขีดจำกัดดังกล่าว สิทธิ์ที่เก่าที่สุดจะถูกนำออก และเอเจนต์ของสิทธิ์นั้นต้องอนุมัติการเข้าถึงครั้งถัดไป

การอนุญาตที่ประเมินแล้วแต่ละรายการใช้ได้เพียงครั้งเดียวและจะถูกส่งต่อไปยังการเรียกใช้เครื่องมือ
ที่ดำเนินการผ่านสถานะ SQLite ที่ใช้ร่วมกัน ดังนั้นการส่งต่อจึงยังทำงานได้เมื่อมีอินสแตนซ์
Plugin มากกว่าหนึ่งอินสแตนซ์ทำงานอยู่ในกระบวนการ Gateway การอนุญาตที่ไม่ได้ใช้จะหมดอายุ
หลังกรอบเวลาการอนุมัติ 600 วินาที

แคชในหน่วยความจำมีค่าเริ่มต้นเป็น 300 วินาทีและมีขอบเขตตามรีจิสทรี
slug ที่กำหนดค่าไว้ ตั้งค่า `cacheTtlSeconds` เป็น `0` เพื่อปิดใช้งานแคช นโยบายจะได้รับการประเมิน
ก่อนการค้นหาแคชทุกครั้ง และการพบข้อมูลในแคชจะถูกตรวจสอบ การโหลดการกำหนดค่ารันไทม์ใหม่
จะมีผลที่ขอบเขตนโยบายและการดำเนินการแต่ละครั้ง การปิดใช้งาน Plugin หรือ
การนำ slug ออก การปฏิเสธ หรือการเปลี่ยนเป้าหมาย slug จะทำให้การอนุญาตที่รอดำเนินการและ
ค่าที่แคชไว้ใช้ไม่ได้

## ตรวจสอบสถานะและประวัติการตรวจสอบ

แสดงความพร้อมและจำนวนรีจิสทรี:

```bash
openclaw onepassword status
```

คำสั่งนี้จะรายงานว่าไฟล์โทเค็นมีอยู่หรือไม่ `op` ได้รับการแก้ไขหรือไม่และพาธของมัน
จำนวนรายการที่ลงทะเบียน และจำนวนแยกตามนโยบาย โดยจะไม่อ่านหรือแสดง
โทเค็นหรือค่าข้อมูลลับ

แสดงแถวการตรวจสอบล่าสุด 50 แถว:

```bash
openclaw onepassword audit
openclaw onepassword audit --limit 100
```

แถวจะแสดงรายการใหม่ที่สุดก่อน และแสดงการประทับเวลา เอเจนต์ slug ผลลัพธ์ `errorCode`
เมื่อความพยายามล้มเหลว และเหตุผลที่ตัดทอน เหตุผลจะถูกจัดเก็บตามที่
ระบุไว้ โบรกเกอร์จะไม่เพิ่มค่าที่ดึงมาลงในบันทึกการตรวจสอบ

## ลักษณะการทำงานของ 1Password CLI

ทุกครั้งที่ไม่พบข้อมูลในแคช ระบบจะเรียกใช้ `op item get` พร้อมรายการ vault และตัวเลือก
ฟิลด์ที่ตรงตามที่กำหนดค่าไว้ เอาต์พุต JSON เวลาหมดเขตที่จำกัด และ `--cache=false` กระบวนการลูก
จะได้รับเฉพาะฟิลด์นั้นแทนที่จะเป็นรายการทั้งหมด โดยมีเพียง
`OP_SERVICE_ACCOUNT_TOKEN` และ `HOME` อยู่ในสภาพแวดล้อมของกระบวนการลูก

Plugin จะพยายามเพียงหนึ่งครั้ง ควรจัดการข้อผิดพลาด `RATE_LIMITED` ด้วยการรอ
ก่อนส่งคำขอของเอเจนต์ในภายหลัง Plugin จะไม่สร้างลูปการลองใหม่
โดยอัตโนมัติ

## รหัสข้อผิดพลาด

ความพยายามที่ล้มเหลวจะมีรหัสข้อผิดพลาดแบบปิดหนึ่งรหัสในผลลัพธ์ของเครื่องมือและแถว
การตรวจสอบ

ข้อผิดพลาดในการเข้าถึง 1Password:

| รหัส              | ความหมาย                                                          |
| ----------------- | ---------------------------------------------------------------- |
| `TOKEN_MISSING`   | ไฟล์โทเค็นหายไปหรือว่างเปล่า                                   |
| `OP_NOT_FOUND`    | ไม่สามารถแก้ไขไบนารี `op` ได้                                |
| `ITEM_NOT_FOUND`  | รายการที่กำหนดค่าไว้ไม่อยู่ใน vault                              |
| `FIELD_NOT_FOUND` | ฟิลด์ที่กำหนดค่าไว้ไม่มีอยู่ในรายการ โดยจะแสดงป้ายกำกับที่มี |
| `RATE_LIMITED`    | ถึงขีดจำกัดอัตราของบัญชีบริการ 1Password                     |
| `AUTH_FAILED`     | การยืนยันตัวตนของบัญชีบริการล้มเหลว                            |
| `TIMEOUT`         | `op` เกิน `opTimeoutMs`                                      |
| `OP_ERROR`        | ความล้มเหลวอื่นใดของ `op` หรือเอาต์พุตไม่ถูกต้อง                         |

ข้อผิดพลาดด้านนโยบายและการตรวจสอบความถูกต้อง:

| รหัส                                               | ความหมาย                                                                      |
| -------------------------------------------------- | ---------------------------------------------------------------------------- |
| `INVALID_ACTION`, `INVALID_REASON`, `INVALID_SLUG` | คำขอไม่ผ่านการตรวจสอบความถูกต้องของอินพุต                                              |
| `UNKNOWN_SLUG`                                     | slug ไม่อยู่ในรีจิสทรีที่กำหนดค่าไว้                                       |
| `TOOL_CALL_ID_MISSING`                             | การเรียกมาถึงโดยไม่มี ID การเรียกใช้เครื่องมือ                                          |
| `POLICY_NOT_EVALUATED`                             | ไม่พบการอนุญาตที่ตรงกันสำหรับการเรียกนี้ คำขอไม่ได้รับการอนุมัติตามนโยบาย |
| `POLICY_CHANGED`                                   | การกำหนดค่าเปลี่ยนไประหว่างการอนุมัติและการดำเนินการ                                |
| `GRANT_EXPIRED`                                    | สิทธิ์แบบถาวรหมดอายุก่อนการดำเนินการ                                       |
| `APPROVAL_CANCELLED`                               | การเรียกใช้ถูกยกเลิกขณะที่รอการอนุมัติ                           |
