Skip to main content

การเรียนรู้ MongoDB Security

บทนำ

MongoDB Security เป็นกระบวนการที่ช่วยให้การจัดเก็บและจัดการข้อมูลใน MongoDB ปลอดภัยจากการเข้าถึงที่ไม่ได้รับอนุญาต รวมถึงป้องกันภัยคุกคามต่างๆ เช่น การโจมตีจากภายนอก การละเมิดข้อมูล และการแก้ไขข้อมูลโดยไม่ได้รับอนุญาต


องค์ประกอบสำคัญของ MongoDB Security

1. Authentication (การพิสูจน์ตัวตน)

การตรวจสอบตัวตนของผู้ใช้ที่ต้องการเข้าถึง MongoDB

  • เปิดใช้งาน Authentication ด้วย --auth
  • สร้างผู้ใช้ด้วยบทบาทที่เหมาะสม

ตัวอย่างการสร้างผู้ใช้:

db.createUser({
user: "admin",
pwd: "securePassword123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
});

2. Authorization (การอนุญาต)

การกำหนดสิทธิ์ในการเข้าถึงและจัดการข้อมูลของผู้ใช้

  • ใช้ Role-Based Access Control (RBAC)
  • ตัวอย่างบทบาทที่ใช้บ่อย:
    • read: อ่านข้อมูล
    • readWrite: อ่านและเขียนข้อมูล
    • dbAdmin: จัดการฐานข้อมูล

ตัวอย่างการกำหนดบทบาท:

db.grantRolesToUser("admin", [ { role: "readWrite", db: "myDatabase" } ]);

3. Network Security (ความปลอดภัยของเครือข่าย)

  • กำหนด Binding IP ให้เชื่อมต่อเฉพาะ IP ที่ได้รับอนุญาต
  • ใช้ Firewall ป้องกันการเข้าถึงจาก IP ที่ไม่รู้จัก
  • เปิดใช้งาน TLS/SSL เพื่อเข้ารหัสการเชื่อมต่อ

ตัวอย่างการกำหนด Binding IP:

net:
bindIp: 127.0.0.1,192.168.1.100

4. Encryption (การเข้ารหัสข้อมูล)

  • ใช้ Encryption at Rest เพื่อป้องกันการเข้าถึงข้อมูลที่จัดเก็บ
  • เปิดใช้งาน TLS/SSL เพื่อเข้ารหัสข้อมูลระหว่างการรับส่ง

ตัวอย่างการเปิดใช้งาน TLS/SSL:

net:
ssl:
mode: requireSSL
PEMKeyFile: /etc/ssl/mongodb.pem

5. Auditing (การตรวจสอบ)

  • เปิดใช้งาน Auditing เพื่อบันทึกเหตุการณ์ต่างๆ เช่น การเข้าสู่ระบบ การเปลี่ยนแปลงข้อมูล

ตัวอย่างการเปิดใช้งาน Auditing:

auditLog:
destination: file
path: /var/log/mongodb/audit.log

แนวทางปฏิบัติที่ดีที่สุด (Best Practices)

1. อัปเดต MongoDB อย่างสม่ำเสมอ

  • ใช้เวอร์ชันล่าสุดเพื่อรับการแก้ไขช่องโหว่ด้านความปลอดภัย

2. ตั้งค่ารหัสผ่านที่แข็งแรง

  • ใช้รหัสผ่านที่มีความซับซ้อนและเปลี่ยนรหัสผ่านเป็นระยะ

3. จำกัดสิทธิ์การเข้าถึง

  • ให้สิทธิ์เฉพาะที่จำเป็นสำหรับการปฏิบัติงานเท่านั้น

4. ปิดการใช้งานฟีเจอร์ที่ไม่จำเป็น

  • เช่น การเชื่อมต่อผ่าน HTTP Interface หรือ REST API หากไม่ได้ใช้งาน

5. ตรวจสอบ Logs อย่างสม่ำเสมอ

  • วิเคราะห์ Logs เพื่อค้นหาพฤติกรรมที่น่าสงสัยหรือผิดปกติ

การป้องกันภัยคุกคามที่พบบ่อย

1. SQL Injection

  • ตรวจสอบและกรอง Input ที่มาจากผู้ใช้
  • ใช้ Query Parameterization

2. Brute Force Attack

  • ใช้รหัสผ่านที่แข็งแรง
  • เปิดใช้งานการล็อกผู้ใช้หลังจากพยายามเข้าสู่ระบบผิดพลาดหลายครั้ง

3. Man-in-the-Middle Attack

  • เปิดใช้งาน TLS/SSL สำหรับการเชื่อมต่อทั้งหมด

การตรวจสอบสถานะความปลอดภัย

1. คำสั่ง db.getRoles()

  • ใช้เพื่อตรวจสอบบทบาทที่กำหนดในระบบ

2. คำสั่ง db.getUsers()

  • ใช้เพื่อตรวจสอบผู้ใช้ที่มีในระบบ

3. คำสั่ง db.serverStatus()

  • ใช้เพื่อตรวจสอบสถานะของเซิร์ฟเวอร์

สรุป

MongoDB Security เป็นสิ่งสำคัญที่ช่วยป้องกันข้อมูลและระบบจากภัยคุกคามต่างๆ การปฏิบัติตามแนวทางปฏิบัติที่ดีที่สุดและการตรวจสอบสถานะความปลอดภัยของระบบเป็นสิ่งที่ควรทำอย่างต่อเนื่องเพื่อให้ระบบฐานข้อมูลมีความปลอดภัยสูงสุด