การใช้งาน 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 ซ้ำซ้อนกันในหลายจุด ระบบจะประมวลผลตามลำดับความสำคัญจากสูงไปต่ำ ดังนี้:
- Agent Config (
.opencode/agents/*.md): สิทธิ์ระดับ Agent จะ Override ค่าอื่นเสมอ - opencode.json ในโฟลเดอร์โปรเจกต์: มีผลเฉพาะในโปรเจกต์นั้นๆ
- 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