PlusMagi's Blog By Pitt Phunsanit Database Network Isolation & Firewall Rules (Disable Public Access)

Network Isolation & Firewall Rules (Disable Public Access)

ในสถาปัตยกรรมระบบข้อมูลสมัยใหม่ การปกป้องข้อมูลไม่ได้จำกัดอยู่แค่การเข้ารหัส (Encryption) เท่านั้น แต่คือการสร้างปราการป้องกันหลายชั้น (Defense in Depth) ตั้งแต่ระดับเครือข่ายจนถึงระดับโค้ด การกำหนดขอบเขตการเข้าถึงที่ชัดเจน (Network Isolation) และการควบคุมการไหลเวียนของข้อมูลด้วยกฎเกณฑ์ที่เข้มงวด จึงเป็นหัวใจสำคัญในการลดพื้นที่ผิวของการโจมตี (Attack Surface) ของฐานข้อมูล PostgreSQL

หลักการ Network Isolation ในระดับ PostgreSQL

สำหรับฐานข้อมูล PostgreSQL การจำลองแนวคิด Network Isolation จะถูกนำมาใช้ผ่านกลไกที่เรียกว่า Role-Based Access Control (RBAC) และการกำหนดค่าการเชื่อมต่อที่แม่นยำ (Connection Parameters) เป้าหมายหลักคือการยึดหลักการ ‘ปฏิเสธเป็นค่าเริ่มต้น’ (Deny by Default) นั่นหมายความว่า หากไม่มีการกำหนดสิทธิ์อย่างชัดเจนให้ผู้ใช้งานหรือแอปพลิเคชันใดๆ เข้าถึงข้อมูลหรือฟังก์ชันใดๆ ได้ การเข้าถึงนั้นจะต้องถูกบล็อกโดยอัตโนมัติ

การจำกัดการเข้าถึงสาธารณะ (Disabling Public Access) ในบริบทของ PostgreSQL ไม่ได้หมายถึงการปิดพอร์ตภายนอกเท่านั้น แต่รวมถึงการจำกัดว่าผู้ใช้งาน (User) ใดสามารถเชื่อมต่อจากที่ใด (Host) และด้วยวิธีการใด (Authentication Method) ซึ่งทั้งหมดนี้ถูกควบคุมโดยไฟล์การกำหนดค่าหลักอย่าง pg_hba.conf

การนำ PostgreSQL มาใช้ควบคุมการเข้าถึง

การจำกัดการเข้าถึงที่แข็งแกร่งต้องอาศัยการทำงานร่วมกันของหลายส่วน ทั้งการตั้งค่าระดับเซิร์ฟเวอร์และการจัดการสิทธิ์ภายในฐานข้อมูล:

  1. การจำกัด Host และ Authentication: ใช้ pg_hba.conf เพื่อระบุว่าเฉพาะ IP Address ที่ได้รับอนุญาตเท่านั้นที่สามารถเชื่อมต่อได้ และกำหนดวิธีการยืนยันตัวตนที่ปลอดภัย (เช่น scram-sha-256)
  2. การกำหนดสิทธิ์ขั้นต่ำ (Least Privilege): สร้าง Role ให้มีสิทธิ์เท่าที่จำเป็นในการทำงานเท่านั้น ห้ามให้ Role ใดมีสิทธิ์ superuser หากไม่จำเป็น
  3. การแบ่งส่วนข้อมูล (Schema Segmentation): แยกข้อมูลที่สำคัญออกจากกันใน Schema ต่างๆ และกำหนดสิทธิ์การเข้าถึง Schema เหล่านั้นอย่างเข้มงวด

ตัวอย่างการจำกัดสิทธิ์การเชื่อมต่อด้วย SQL

แม้ว่าการตั้งค่า pg_hba.conf จะเป็นไฟล์คอนฟิกภายนอก แต่เราสามารถใช้ SQL เพื่อสร้าง Role ที่มีสิทธิ์จำกัดได้เพื่อเสริมความปลอดภัย:

SQL

-- 1. สร้าง Role ที่มีสิทธิ์จำกัด (Read-Only User) เพื่อใช้ในการรายงานเท่านั้น
CREATE ROLE report_user WITH LOGIN PASSWORD 'secure_password';

-- 2. กำหนดสิทธิ์ให้ Role นี้สามารถ SELECT ข้อมูลจากตารางที่กำหนดเท่านั้น
GRANT SELECT ON table_sales TO report_user;

-- 3. ปฏิเสธสิทธิ์การแก้ไข (Write/Update) เพื่อให้มั่นใจว่า Role นี้ทำได้แค่การอ่าน
REVOKE INSERT, UPDATE, DELETE ON table_sales FROM report_user;

บทสรุป: การรักษาความปลอดภัยแบบหลายชั้น

การรักษาความปลอดภัยของ PostgreSQL ที่สมบูรณ์แบบต้องอาศัยการมองภาพรวมของสถาปัตยกรรมทั้งหมด ตั้งแต่การตั้งค่า Firewall ภายนอก (Network Layer) ไปจนถึงการกำหนดสิทธิ์ระดับ Role (Application Layer) การใช้หลักการ Network Isolation และการกำหนดกฎเกณฑ์การเข้าถึงที่เข้มงวดอย่างสม่ำเสมอ จะช่วยให้องค์กรสามารถลดความเสี่ยงจากการถูกโจมตีทางไซเบอร์ได้อย่างมีประสิทธิภาพสูงสุด