การใช้งาน AI Coding Agent อย่าง OpenCode ช่วยเพิ่มความเร็วในการพัฒนาซอฟต์แวร์ได้อย่างมหาศาล แต่การปล่อยให้ AI ทำงานโดยไม่มีการกำหนดขอบเขตความปลอดภัยที่รัดกุม อาจนำไปสู่ความเสี่ยง เช่น การรันคำสั่งอันตราย การอ่านไฟล์ความลับ หรือการทำข้อมูลสำคัญรั่วไหล บทความนี้สรุปแนวทางการจัดการ Security & Permissions ใน OpenCode แบบถูกต้องตาม Schema และเอกสารทางการล่าสุดครับ
1. โครงสร้างและการตั้งค่า Permissions ใน opencode.json
การจำกัดสิทธิ์ใน OpenCode ทำได้โดยการกำหนดค่าใน opencode.json ซึ่งรองรับทั้งการตั้งค่าแบบครอบคลุมและการกำหนดสิทธิ์แบบเจาะจง (Granular Rules):
{
"$schema": "https://opencode.ai/config.json",
"permission": {
"bash": {
"*Get-Content **/.env*": "deny",
"*gc **/.env*": "deny",
"*type **/.env*": "deny",
"*cat **/.env*": "deny",
"*grep **/.env*": "deny",
"*Select-String **/.env*": "deny",
"* .env.example": "allow"
},
"read": {
"**/.env*": "deny",
"**/.env.example": "allow"
},
"grep": {
"**/.env*": "deny",
"**/.env.example": "allow"
},
"glob": {
"*": "allow"
},
"external_directory": {
"~/projects/personal/**": "allow"
}
},
"security": {
"restrictToWorkspace": true,
"allowAbsolutePaths": false
},
"share": "manual"
}
- ผลลัพธ์ของสิทธิ์ (Actions): มี 3 ค่าหลัก คือ
"allow"(อนุญาตทันที),"ask"(ต้องถามยืนยัน), และ"deny"(ปฏิเสธเด็ดขาด) - การใช้ Wildcard Matching: รองรับ
*(ตรงกับตัวอักษรใดๆ ในชั้นเดียว),**(Recursive สแกนทะลุทุก Subdirectory) และ?(ตรงกับ 1 ตัวอักษร) - หลักการอ่านกฎ (Last-Match-Wins): ระบบจะอ่านกฎจากบนลงล่าง กฎข้อสุดท้ายที่ตรงเงื่อนไขจะเป็นกฎที่มีผลจริงเสมอ เช่น การสั่ง
"**/.env*": "deny"ไว้ก่อนเพื่อบล็อกไฟล์.envทุกรูปแบบแล้วจึงวาง"**/.env.example": "allow"ไว้ด้านล่างสุด เพื่อปลดล็อกให้ใช้เฉพาะไฟล์ตัวอย่างได้