ในยุคของการทำงานแบบกระจายตัว (Remote Work) การเข้าถึงทรัพยากรฐานข้อมูล PostgreSQL จากภายนอกเครือข่ายเป็นเรื่องที่หลีกเลี่ยงไม่ได้ อย่างไรก็ตาม การเชื่อมต่อที่ขาดการควบคุมที่เหมาะสม เปรียบเสมือนการเปิดประตูฐานข้อมูลให้สาธารณะเข้าถึงได้ง่าย ซึ่งเป็นช่องโหว่ร้ายแรงที่แฮกเกอร์สามารถใช้ประโยชน์ได้
“>หัวใจสำคัญของการรักษาความปลอดภัยในระดับ Senior Architect คือการเปลี่ยนมุมมองจากการป้องกันแบบ ‘กำแพงรอบนอก’ (Perimeter Defense) ไปสู่การควบคุมที่เน้นตัวตน (Identity) และสิทธิ์การเข้าถึง (Least Privilege) เป็นหลัก ซึ่งหลักการนี้คือแกนกลางของแนวคิด Zero Trust
🛡️ ทำไมต้องหลีกเลี่ยง Port Forwarding สำหรับ PostgreSQL?
“>การเปิด Port Forwarding เพื่อให้เครื่องภายนอกเข้าถึง PostgreSQL ได้โดยตรง (เช่น การเปิด Port 5432) คือการกระทำที่เสี่ยงที่สุด เพราะมันเท่ากับการเปิดประตูให้ทุกคนสามารถสแกนหาจุดอ่อนของระบบได้โดยไม่ต้องพิสูจน์ตัวตนล่วงหน้า การทำเช่นนี้ขัดต่อหลักการรักษาความปลอดภัยสมัยใหม่ที่ต้องมีการตรวจสอบตัวตน (Authentication) และการอนุญาต (Authorization) ทุกครั้งก่อนอนุญาตให้เข้าถึงข้อมูล
🔑 หลักการ Zero Trust ในการเข้าถึง PostgreSQL
“>Zero Trust คือการไม่เชื่อใจใครโดยปริยาย (Never Trust, Always Verify) ไม่ว่าผู้ใช้จะมาจากที่ไหนก็ตาม การเข้าถึง PostgreSQL ต้องถูกจำกัดให้เป็นไปตามหลักการ Least Privilege เสมอ แทนที่จะพึ่งพาเพียงแค่ Firewall เราต้องตรวจสอบว่า ‘ใคร’ กำลังพยายามเชื่อมต่อ, ‘จากที่ไหน’, และ ‘เพื่อวัตถุประสงค์ใด’ ก่อนที่จะอนุญาตให้เข้าถึง
🚀 ทางออกที่ปลอดภัย: VPN และ Tunneling
“>วิธีที่ถูกต้องตามหลักสถาปัตยกรรมคือการสร้าง ‘อุโมงค์’ (Tunnel) ที่เข้ารหัสและต้องมีการพิสูจน์ตัวตนก่อนเข้าถึง โดยใช้ VPN (Virtual Private Network) หรือเครื่องมือสมัยใหม่อย่าง Tailscale หรือ Zero Trust Network Access (ZTNA) สิ่งเหล่านี้จะทำให้การเชื่อมต่อภายนอกถูกจำกัดให้อยู่ในเครือข่ายส่วนตัวเสมือนจริง (Private Network) ก่อนที่จะถึงตัว PostgreSQL
“>ในระดับ PostgreSQL เราต้องใช้ไฟล์ pg_hba.conf (Host-Based Authentication) เพื่อกำหนดกฎการเข้าถึงอย่างเข้มงวด โดยระบุว่าการเชื่อมต่อจาก IP หรือเครือข่ายใดเท่านั้นที่ได้รับอนุญาตให้ใช้ User และ Database ใด
SQL
-- ตัวอย่างการจำกัดการเข้าถึงใน pg_hba.conf<br># TYPE DATABASE USER ADDRESS METHOD<br>host all all 192.168.1.0/24 scram-sha-256<br>host all all ::/0 reject
ตัวอย่างโค้ดข้างต้นแสดงให้เห็นว่าเราอนุญาตให้เข้าถึงได้จากเครือข่าย 192.168.1.0/24 เท่านั้น และใช้การพิสูจน์ตัวตนที่แข็งแกร่งอย่าง scram-sha-256 ส่วนบรรทัดสุดท้ายคือการปฏิเสธการเข้าถึงทั้งหมดจากที่อื่น (::/0) ซึ่งเป็นหัวใจของการป้องกันแบบ Zero Trust
✅ บทสรุป: Best Practices
“>การรักษาความปลอดภัยของ PostgreSQL ในยุค Remote Work ไม่ใช่แค่การตั้งรหัสผ่านที่แข็งแกร่ง แต่คือการควบคุมเส้นทาง (Path) และตัวตน (Identity) ของผู้เชื่อมต่อทั้งหมด ควรใช้ VPN หรือ ZTNA เพื่อสร้างขอบเขตการเข้าถึงที่ปลอดภัย จากนั้นจึงใช้ pg_hba.conf เพื่อบังคับใช้หลักการ Least Privilege เสมอ การทำเช่นนี้จะช่วยลดความเสี่ยงจากการเปิด Port โดยไม่จำเป็นได้อย่างมีประสิทธิภาพ