AI Agent ต้องการขอบเขต ไม่ใช่กุญแจที่ไขได้ทุกห้อง
การให้ AI agent เข้าถึงแอปของคุณผ่าน MCP นั้นมีความเสี่ยง คุณกำลังยื่นพวงกุญแจให้พวกเขาแล้วหวังว่าพวกเขาจะเปิดแค่บางประตูเท่านั้น ความไว้วางใจนั้นคือความเสี่ยงด้านความปลอดภัย
เมื่อสร้าง MCP tools สำหรับแอป Laravel แบบ multi-tenant คุณต้องแก้ปัญหาหนึ่งอย่าง นั่นคือ จะปล่อยให้ agent ควบคุมแอปโดยไม่เข้าถึงข้อมูลของผู้อื่นได้อย่างไร
MCP tool แต่ละตัวทำหน้าที่เป็น endpoint เมื่อ agent เรียกใช้ tool เซิร์ฟเวอร์ของคุณก็จะรันโค้ด ในการตั้งค่าแบบ multi-tenant ทุก tool จะต้องตอบคำถามสองข้อนี้:
- คุณได้รับอนุญาตให้ทำสิ่งนี้หรือไม่?
- คุณได้รับอนุญาตให้ทำที่นี่หรือไม่?
หากคุณข้ามขั้นตอนเหล่านี้ คุณกำลังสร้างช่องโหว่ด้านความปลอดภัย
Web requests ใช้ session ในการจัดการ multi-tenancy แต่ MCP tools ใช้ token มันไม่มี session และไม่มี middleware เพื่อกำหนด tenant context ปัจจุบัน หากคุณพึ่งพา global scopes ที่มองหา "current org" ใน session พวกมันจะไม่พบอะไรเลย คำสั่ง query ที่ควรจะถูกจำกัดอาจจะคืนค่าทุกแถวในฐานข้อมูลของคุณออกมา
ผมใช้กฎ 4 ข้อนี้เพื่อให้ปลอดภัย:
- Explicit filtering: อย่าพึ่งพา ambient scope ภายใต้ token auth ให้ใช้ single trait เพื่อกรองข้อมูลตาม organization ทุกครั้ง
- Use UUIDs: อย่าใช้ auto-increment IDs ให้ใช้ identifier ที่คาดเดาไม่ได้ เพื่อไม่ให้ agent คาดเดา record อื่นๆ ได้
- Reuse permissions: อย่าสร้างชุด permission ใหม่สำหรับ agent ให้ใช้ ability strings ชุดเดียวกับที่แอปเว็บของคุณใช้
- Mark side effects: ใช้ annotations เพื่อระบุว่า tool นั้นเป็นแบบ read-only หรือ write-enabled
การใช้ single trait สำหรับการค้นหา organization จะช่วยให้คุณมีจุดเดียวในการตรวจสอบ (audit) หากการค้นหาคืนค่าเป็น null ตัว tool จะบอก agent ว่าไม่พบ record นั้น และ agent จะไม่ได้รับข้อมูลใดๆ เกี่ยวกับ tenant อื่นเลย
นี่ไม่ใช่ปัญหาของ AI แต่มันคือปัญหาเรื่อง multi-tenancy และ authorization การใช้ MCP ทำให้การเปิดแอปของคุณออกสู่ภายนอกนั้นง่ายขึ้น ดังนั้นคุณจึงต้องมีวินัยในเรื่องการกำหนดขอบเขต
Agent ควรทำได้เพียงสิ่งที่มนุษย์ทำได้ ภายใน tenant ของตนเองเท่านั้น และไม่ควรทำอะไรเกินกว่านั้น
Optional learning community: https://t.me/GyaanSetuAi
