ข้ามไปยังเนื้อหา
กลับหน้ารายการบทความ

authentik: ใช้ Proxy Provider ป้องกันเว็บภายในด้วยการล็อกอินเดียว

ตั้ง authentik เป็นด่านยืนยันตัวตนให้เว็บเดิมผ่าน Proxy Provider และ Outpost พร้อมวิธีเลือกโหมดและทดสอบสิทธิ์จริง

authentik: ใช้ Proxy Provider ป้องกันเว็บภายในด้วยการล็อกอินเดียว

เมื่อมีเว็บภายในหลายตัว การทำหน้าล็อกอินเองทุกแอปมักทำให้กฎรหัสผ่านและการปิดบัญชีไม่ตรงกัน authentik เป็น identity provider ที่สร้าง Application คู่กับ Provider และใช้ Proxy Provider เพื่อคุมแอปที่ยังไม่ได้รองรับ OIDC หรือ SAML โดยตรงได้ บทความนี้ตั้งเป้าให้ผู้ใช้ที่ไม่ได้ล็อกอินถูกส่งไปยืนยันตัวตน และผู้ใช้ไม่มีสิทธิ์ไม่สามารถเข้าถึง upstream ผ่านทางลัด

เลือกโหมดให้ตรงกับเส้นทางจริง

ในเอกสาร authentik มี Proxy mode ซึ่งให้ Outpost เป็น reverse proxy รับคำขอแล้วส่งต่อไปแอป และ Forward auth mode ซึ่งให้ reverse proxy เดิมถาม Outpost ก่อนส่งคำขอไปแอป หากมี NGINX/Traefik อยู่แล้วและต้องการรักษาการกำหนดเส้นทางเดิม ให้พิจารณา Forward auth แบบ single application ก่อน ส่วน domain-level forward auth ใช้กฎร่วมหลาย subdomain ได้ แต่ไม่แยกนโยบายสิทธิ์รายแอปแบบ single application จึงไม่เหมาะเมื่อแต่ละแอปต้องจำกัดผู้ใช้ต่างกัน

ลำดับการตั้งค่า

  1. เตรียม authentik ตามคู่มือติดตั้ง Docker Compose และกำหนด HTTPS, โดเมน, secret key กับ PostgreSQL password ให้ครบ ก่อนเปิดให้ผู้ใช้จริง ตรวจว่าฐานข้อมูลและ worker ทำงานปกติ
  2. ใน Admin ไปที่ Applications → Applications → New Application สร้าง Application และ Proxy Provider พร้อมกัน กำหนด external host เป็น URL ที่ผู้ใช้เห็น เช่น https://wiki.example.org และ internal host เป็นที่อยู่ upstream ที่ Outpost เข้าถึงได้ เฉพาะกรณี Proxy mode
  3. เลือก authorization flow แล้วผูก Provider เข้ากับ Proxy Outpost ภายใต้ Applications → Outposts หากใช้ managed outpost ให้ตรวจการเข้าถึง Docker socket เพราะไฟล์ Compose ทางการอาจ mount socket เพื่อจัดการ Outpost อัตโนมัติ ระบบที่ไม่ต้องการสิทธิ์นี้ใช้การติดตั้ง Outpost ด้วยมือหรือ Docker socket proxy
  4. ตั้ง reverse proxy ตามโหมดที่เลือก ใน Forward auth ต้องส่งเส้นทาง /outpost.goauthentik.io ไป Outpost ด้วย มิฉะนั้น redirect หรือ callback จะล้มเหลว เปิดเฉพาะ host ที่ต้องการป้องกัน และไม่เปิด upstream ให้เข้าตรงจากอินเทอร์เน็ต

ทดสอบก่อนนำไปใช้

เปิด URL ในหน้าต่างไม่ระบุตัวตน ควรเห็นหน้า login แล้วกลับสู่ URL เดิมหลังสำเร็จ จากนั้นลองบัญชีที่ไม่ได้รับสิทธิ์ ต้องถูกปฏิเสธ ทดสอบทั้งหน้าแรก ไฟล์ static, API และ WebSocket ของแอป หาก response ฝั่งหน้าเว็บถูกป้องกันแต่ API ยังเข้าตรงได้ แปลว่าเส้นทาง reverse proxy ยังไม่ครอบคลุม ตรวจ log ของ Outpost และ client ID ของ Provider เมื่อเกิดวงจร redirect

อย่าคิดว่า SSO ทำให้ upstream ปลอดภัยโดยอัตโนมัติ ต้องจำกัด network ingress, ตั้ง TLS, สำรองการตั้งค่าและทดสอบการกู้คืนบัญชี admin ด้วย หากแอปรองรับ OIDC/SAML โดยตรงอยู่แล้ว ให้ประเมิน Provider ประเภทนั้น เพราะแอปจะรับตัวตนผู้ใช้ได้ชัดเจนกว่าการป้องกันระดับ proxy

อ่านเพิ่มเติม: Proxy Provider, ติดตั้ง Docker Compose, แนวคิด Provider