วิธีการให้สิทธิ์การเข้าถึงฐานข้อมูลแก่ AI Agent อย่างปลอดภัย
การให้ AI agent เข้าถึงฐานข้อมูลโปรดักชันของคุณถือเป็นความเสี่ยงมหาศาล การใช้ผู้ใช้แบบ read-only อย่างเดียวนั้นไม่เพียงพอ เพราะเอเจนต์ไม่สามารถตัดสินเจตนาหรือความอ่อนไหวของข้อมูลได้ หากคุณให้สิทธิ์การเขียน (write access) การโจมตีแบบ prompt injection อาจเปลี่ยนเอเจนต์ที่มีประโยชน์ให้กลายเป็นเอเจนต์ที่สร้างความเสียหายได้
คุณต้องมีเกราะป้องกันสองชั้นเพื่อรักษาความปลอดภัยของข้อมูลของคุณ
เลเยอร์ที่ 1: การควบคุมฐานข้อมูลแบบคงที่ (Static Database Controls)
สิ่งเหล่านี้คือการตั้งค่าพื้นฐานภายในเอนจินฐานข้อมูลของคุณ ควรเริ่มใช้สิ่งเหล่านี้ก่อน:
- Least-privilege roles: สร้างบทบาทเฉพาะสำหรับเอเจนต์ ห้ามใช้บัญชี admin โดยเด็ดขาด
- Read replicas: ส่งเอเจนต์สำหรับงานวิเคราะห์ไปยัง replica เพื่อไม่ให้ไปทำให้ฐานข้อมูลโปรดักชันทำงานช้าลง
- Row-level security: ใช้นโยบายเพื่อจำกัดข้อมูลที่เอเจนต์สามารถมองเห็นได้
- Statement timeouts: ป้องกันไม่ให้คิวรีที่ทำงานผิดปกติ (runaway queries) ทำให้เซิร์ฟเวอร์ของคุณล่ม
- Allowlists: จำกัดการเชื่อมต่อเฉพาะโฮสต์ที่กำหนดเท่านั้น
เลเยอร์ที่ 2: Runtime Control Plane
การควบคุมแบบ Static ตรวจสอบเพียงแค่ตัวตนเท่านั้น แต่ไม่สามารถหยุดเอเจนต์จากการดึงข้อมูลออกไป (exfiltrating data) หรือการทำตามคำสั่งที่เป็นอันตรายได้ คุณจึงต้องการ Control Plane ที่คั่นกลางระหว่างเอเจนต์และฐานข้อมูล
เลเยอร์นี้ต้องทำหน้าที่สี่อย่าง:
- Classify: จำแนกทุกคิวรีว่าเป็นแบบ read, write หรือ schema change
- Enforce default-deny: บล็อกทุกอย่าง เว้นแต่จะได้รับอนุญาตอย่างชัดเจน
- Gate risky actions: กำหนดให้มนุษย์ต้องเป็นผู้อนุมัติการลบข้อมูลจำนวนมาก (bulk deletes) หรือการเปลี่ยนโครงสร้าง (schema changes)
- Record everything: เก็บประวัติการทำงานและการอนุมัติทุกอย่างในรูปแบบ immutable log (บันทึกที่ไม่สามารถแก้ไขได้)
ทำไมเรื่องนี้ถึงสำคัญ: หากคุณใส่กฎไว้ใน prompt เอเจนต์ก็สามารถเพิกเฉยต่อกฎเหล่านั้นได้ แต่ Control Plane จะอยู่นอกบริบทของเอเจนต์ มันจะเห็นคิวรีที่เกิดขึ้นจริง ไม่ใช่แค่แผนการของเอเจนต์ สิ่งนี้จะช่วยปกป้องคุณจากการโจมตีแบบ prompt injection
ใช้รายการตรวจสอบนี้เพื่อการเข้าถึงที่ปลอดภัย:
- มีบทบาทเฉพาะ (Dedicated role) สำหรับแต่ละเอเจนต์
- ใช้ read replicas สำหรับการสำรวจข้อมูล
- ใช้การรักษาความปลอดภัยระดับแถว (row-level security)
- ตั้งค่า statement timeouts
- ส่งทราฟฟิกทั้งหมดผ่าน control plane
- ใช้นโยบาย default-deny
- ต้องมีการอนุมัติจากมนุษย์สำหรับงานที่มีความเสี่ยงสูง
- เก็บ immutable audit log
การควบคุมแบบ Static ทำหน้าที่ของมัน ส่วน Control Plane จะจัดการส่วนที่เหลือ คุณจำเป็นต้องมีทั้งสองอย่าง
Optional learning community: https://t.me/GyaanSetuAi
