ป้ายกำกับ: Active Directory

Docker: Samba as an Active Directory Domain ControllerDocker: Samba as an Active Directory Domain Controller

ในโลกของการพัฒนาซอฟต์แวร์สมัยใหม่ การจัดการระบบการยืนยันตัวตน (Authentication) เป็นสิ่งสำคัญอย่างยิ่ง Active Directory (AD) ของ Windows Server เป็นมาตรฐานที่องค์กรส่วนใหญ่ใช้ แต่การรัน AD บนระบบปฏิบัติการที่ไม่ใช่ Windows (เช่น macOS หรือ Linux) เพื่อวัตถุประสงค์ในการพัฒนาโปรแกรมจึงเป็นความท้าทาย

ทางออกที่ทรงพลังคือการใช้ Samba ซึ่งเป็นโปรเจกต์ที่จำลองฟังก์ชันของ AD และสามารถรันบน Linux ได้อย่างสมบูรณ์ เมื่อรวมกับ Docker ทำให้เราสามารถสร้างสภาพแวดล้อม Domain Controller ที่พกพาได้ (Portable) โดยไม่ขึ้นอยู่กับ OS หลักของเครื่องโฮสต์

สถาปัตยกรรม: Samba AD ใน Docker Container

การรัน Samba AD ใน Docker ต้องมีการกำหนดพอร์ตจำนวนมาก เนื่องจาก AD ต้องใช้บริการหลายโปรโตคอล (เช่น LDAP, Kerberos, SMB, DNS) เพื่อให้ระบบทำงานได้อย่างสมบูรณ์ การใช้ docker-compose.yml จึงเป็นวิธีที่แนะนำที่สุดในการจัดการบริการเหล่านี้

เมื่อเราตั้งค่า Container ได้แล้ว ข้อมูลผู้ใช้ โดเมน และการตั้งค่าต่างๆ จะถูกจัดการภายใน Container ซึ่งในทางปฏิบัติ การจัดการข้อมูลเหล่านี้ควรถูกสำรองและตรวจสอบความถูกต้องด้วยฐานข้อมูลเชิงสัมพันธ์ที่เชื่อถือได้ เช่น PostgreSQL

การจัดการข้อมูล AD ด้วย PostgreSQL (ตัวอย่างการจำลอง)

แม้ว่า Samba จะจัดการ AD โดยใช้ไฟล์ภายใน แต่เพื่อวัตถุประสงค์ในการพัฒนาแอปพลิเคชันที่ต้องเชื่อมต่อกับ AD และต้องการการจัดการ Schema ที่ชัดเจน เราสามารถใช้ PostgreSQL เพื่อจำลองการจัดเก็บข้อมูลผู้ใช้หรือกลุ่มต่างๆ ที่จะถูกซิงค์กับ Domain Controller ได้

SQL

-- 1. สร้างตารางสำหรับเก็บข้อมูลผู้ใช้โดเมน (User Management) 
CREATE TABLE domain_users (
    user_id SERIAL PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    full_name VARCHAR(100) NOT NULL,
    email VARCHAR(100) UNIQUE,
    is_active BOOLEAN DEFAULT TRUE
);

-- 2. แทรกข้อมูลผู้ใช้ตัวอย่าง 
INSERT INTO domain_users (username, full_name, email) VALUES
('adminuser', 'Admin Developer', '[email protected]'),
('john.doe', 'John Doe', '[email protected]');

-- 3. การดึงข้อมูลผู้ใช้ที่ใช้งานอยู่ทั้งหมด 
SELECT username, full_name FROM domain_users WHERE is_active = TRUE;

การใช้ PostgreSQL ในลักษณะนี้ช่วยให้เรามีชั้นการจัดการข้อมูล (Data Layer) ที่ชัดเจน ทำให้แอปพลิเคชันของเราสามารถตรวจสอบความถูกต้องของข้อมูลผู้ใช้ก่อนที่จะพยายาม Join Domain ได้อย่างมีประสิทธิภาพ

ข้อควรระวังด้านความปลอดภัย (Security Best Practices)

การรัน Domain Controller ในสภาพแวดล้อม Dev/Test ต้องระมัดระวังเรื่องการเปิดเผยข้อมูลสำคัญ โดยเฉพาะรหัสผ่านผู้ดูแลระบบ (SAMBA_ADMIN_PASSWORD) ที่ถูกกำหนดในไฟล์ docker-compose.yml ควรใช้เครื่องมือจัดการ Secret อย่าง Docker Secrets หรือ HashiCorp Vault แทนการ Hardcode เพื่อเพิ่มความปลอดภัยสูงสุด

บทสรุป

การรวมพลังของ Docker, Samba, และ PostgreSQL ทำให้เราได้สภาพแวดล้อมการพัฒนาที่ครบวงจรและยืดหยุ่นอย่างยิ่ง เราสามารถจำลอง Domain Controller ที่ซับซ้อนบนเครื่อง Mac หรือ Linux ได้อย่างง่ายดาย ทำให้ทีมพัฒนาสามารถสร้างและทดสอบแอปพลิเคชันที่ต้องพึ่งพาการยืนยันตัวตนแบบ Active Directory ได้อย่างสมบูรณ์แบบโดยไม่ต้องพึ่งพา Windows Server จริงๆ