Wednesday, September 30, 2026

[OpenCode] คู่มือตั้งค่า ความปลอดภัยใน OpenCode: คุม Permissions และปกป้องไฟล์ความลับ

การใช้งาน AI Coding Agent อย่าง OpenCode ช่วยเพิ่มความเร็วในการพัฒนาซอฟต์แวร์ได้อย่างมหาศาล แต่การปล่อยให้ AI ทำงานโดยไม่มีการกำหนดขอบเขตความปลอดภัยที่รัดกุม อาจนำไปสู่ความเสี่ยง เช่น การรันคำสั่งอันตราย การอ่านไฟล์ความลับ หรือการทำข้อมูลสำคัญรั่วไหล บทความนี้สรุปแนวทางการจัดการ Security & Permissions ใน OpenCode แบบครบถ้วนและรันได้จริงครับ


1. การตั้งค่าความปลอดภัยใน opencode.json

การจำกัดสิทธิ์ผ่านไฟล์ opencode.json ช่วยควบคุมขอบเขตการทำงานของ Agent อย่างเด็ดขาด ด้วยการกำหนด permission และ security:

{
  "permission": {
    "read": "allow",
    "edit": "allow",
    "bash": "ask",
    "glob": "allow",
    "grep": "allow",
    "ls": "allow",
    "web_search": "ask",
    "fetch": "ask",
    "subagent": "allow"
  },
  "security": {
    "restrictToWorkspace": true,
    "allowAbsolutePaths": false
  }
}
  • "bash": "ask" — บังคับถามยืนยันก่อนรันคำสั่ง Terminal ทุกครั้ง ป้องกันการรันคำสั่งอันตรายโดยไม่ตั้งใจ
  • "restrictToWorkspace": true — ล็อกไม่ให้ Agent ออกไปเข้าถึงหรือแก้ไขไฟล์นอกโฟลเดอร์โปรเจกต์
  • "allowAbsolutePaths": false — ป้องกันการอ้างอิง Path เต็ม เช่น C:\Windows หรือ C:\Users\...

2. รายละเอียด Permission, ค่าที่กำหนดได้ และ ค่า Default

OpenCode มีระบบ Permission สำหรับควบคุมเครื่องมือต่าง ๆ โดยสามารถตั้งค่าได้ 3 ระดับ คือ "allow" (อนุญาตทันที), "ask" (ต้องถามยืนยันก่อน) และ "deny" (ปฏิเสธการใช้งาน) ซึ่งมีค่าเริ่มต้น (Default) ดังนี้:

Permission ค่า Default พฤติกรรมและการใช้งาน
read "allow" อ่านเนื้อหาภายในไฟล์
edit "allow" สร้าง แก้ไข หรือลบไฟล์
glob "allow" ค้นหาไฟล์/โฟลเดอร์ด้วย Pattern Matching
grep "allow" ค้นหาข้อความภายในไฟล์
ls "allow" เรียกดูรายการไฟล์ใน Directory
subagent "allow" เรียกใช้งาน Subagent อื่นๆ
bash "ask" รันคำสั่งใน Terminal/Shell (ต้องถามยืนยัน)
web_search "ask" ค้นหาข้อมูลบนอินเทอร์เน็ต (ต้องถามยืนยัน)
fetch "ask" ดึงข้อมูลจาก URL ภายนอก (ต้องถามยืนยัน)

3. ลำดับความสำคัญของสิทธิ์ (Permission Precedence)

เมื่อมีการตั้งค่า Permission ซ้ำซ้อนกันในหลายจุด ระบบจะประมวลผลตามลำดับความสำคัญจากสูงไปต่ำ ดังนี้:

  1. Agent Config (.opencode/agents/*.md): สิทธิ์ระดับ Agent จะ Override ค่าอื่นเสมอ
  2. opencode.json ในโฟลเดอร์โปรเจกต์: มีผลเฉพาะในโปรเจกต์นั้นๆ
  3. opencode.json ในระบบ (~/.config/opencode/): สิทธิ์พื้นฐานระดับทั้งเครื่อง

4. ควบคุมการแชร์ Session (share)

การตั้งค่าแชร์บทสนทนาส่งผลโดยตรงต่อความปลอดภัยของ Source Code และ Logs:

{
  "share": "manual"
}

หากตั้งค่าเป็น "share": "auto" ระบบจะอัปโหลด Session Logs ขึ้น Web Server เป็น Public Read-Only Link ให้อัตโนมัติ

ข้อเท็จจริงด้าน Security: ผู้ที่ได้รับลิงก์จะไม่สามารถ Remote กลับมาควบคุมเครื่องได้ ทำได้เพียงอ่านเท่านั้น แต่มีความเสี่ยงสูงเรื่อง Data Leakage หากมี API Keys, Passwords หรือ Internal URLs หลุดไปใน Logs แนะนำให้ตั้งเป็น "manual" หรือ "disabled" เสมอ


5. ป้องกันการอ่านไฟล์ความลับด้วย .opencodeignore

การสร้างไฟล์ .opencodeignore จะช่วยระบุไฟล์และโฟลเดอร์ที่ไม่ต้องการให้ Agent เข้าถึงได้อย่างเด็ดขาด เพื่อป้องกันความลับรั่วไหล:

# บล็อกไฟล์ Credentials และ Keys ระดับระบบ
*.env
*.env.*
*.pem
*.key
*.pfx
id_rsa
id_ed25519

# บล็อกโฟลเดอร์ข้อมูลส่วนตัว Cloud / K8s
.aws/
.azure/
.gcp/
.kube/

# Whitelist: ปลดล็อกให้ Agent อ่านเฉพาะไฟล์โครงสร้างตัวอย่าง
!.env.example

สรุป

การตั้งค่า opencode.json ร่วมกับการใช้ .opencodeignore จะช่วยให้คุณใช้งาน OpenCode ได้อย่างคล่องตัวและเต็มประสิทธิภาพ โดยยังคงรักษาความปลอดภัยของระบบ ข้อมูลความลับ และ Source Code ได้อย่างมั่งคงครับ

No comments:

Post a Comment