3 คะแนน โดย GN⁺ 2024-02-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

การตั้งค่า Keycloak SSO: ใช้ Docker Compose และ Nginx

  • Keycloak เป็นโซลูชันโอเพนซอร์สด้านการจัดการตัวตนและการเข้าถึงที่เชื่อถือได้ และรองรับโปรโตคอล SSO หลัก ๆ
  • การตั้งค่าด้วย Docker Compose ไม่ได้ซับซ้อนมาก แต่ก็ไม่ได้ตรงไปตรงมานัก จึงมีการสรุปขั้นตอนการตั้งค่าไว้

แนวคิด

  • ใช้การตั้งค่ามาตรฐานโดยให้ Nginx ทำหน้าที่เป็นรีเวิร์สพร็อกซีกลาง เพื่อส่งทราฟฟิกไปยังแต่ละบริการผ่าน localhost
  • ถือเป็นการตั้งค่าที่ประหยัด เพราะใช้ทรัพยากรร่วมกันบนโฮสต์เดียว ขณะเดียวกันก็แยกสภาพแวดล้อมออกจากกันให้มากที่สุด

สิ่งที่ต้องเตรียม

  • ต้องมีเครื่องมือพื้นฐาน (SSH, VM ที่ติดตั้ง Linux, โดเมนหรือซับโดเมน)
  • สำหรับการตั้งค่า Docker rootless ให้สร้างผู้ใช้ใหม่แบบ non-root ชื่อ keycloak ที่ไม่ต้องใช้รหัสผ่าน อัปเดตช่วงใน /etc/subuid และ /etc/subgid ติดตั้ง Docker rootless และตั้งค่าให้บริการเริ่มทำงานอัตโนมัติ

การตั้งค่า Keycloak

  • ล็อกอินด้วยผู้ใช้ keycloak ที่เพิ่งสร้างขึ้น แล้วสร้างไดเรกทอรีสำหรับข้อมูลถาวรและไฟล์ Docker
  • อ้างอิงเอกสารทางการเพื่อเขียน docker-compose.yml และกรอกข้อมูลที่มีความอ่อนไหวและเปลี่ยนแปลงได้ลงในไฟล์ .env

ทดสอบในเครื่อง

  • ทดสอบสแตก Docker Compose สร้าง reverse SSH tunnel ไปยัง VM แล้วตรวจสอบหน้าต้อนรับของ Keycloak ในเบราว์เซอร์

การตั้งค่า Nginx

  • ตั้งค่า Nginx เป็นระบบรีเวิร์สพร็อกซี และสร้างไฟล์ .conf ใหม่ของ Nginx สำหรับบริการ Keycloak
  • เพิ่ม A record ที่ผู้รับจดทะเบียนโดเมน เพื่อให้ DNS query ถูกส่งไปยัง IP ของ VM

ดีบัก

  • เปิด .tld.com เพื่อล็อกอินเข้า Keycloak ด้วยผู้ใช้ admin แล้วตรวจสอบล็อกของ Docker Compose รวมถึง access log และ error log ของ Nginx
  • หากจำเป็น ให้ตรวจสอบฐานข้อมูลของ Keycloak

การสร้างแบบกำหนดเองด้วย Dockerfile

  • แทนที่จะใช้ภาพอิมเมจที่สร้างไว้ล่วงหน้าจาก quay.io ให้สร้างอิมเมจของตนเองด้วย Dockerfile
  • รีสตาร์ต Docker Compose เพื่อสร้างอิมเมจและเริ่มบริการ

บทสรุป

  • กำลังรันบริการ Keycloak โดยใช้ระบบรีเวิร์สพร็อกซี Nginx อยู่หลัง Rootless Docker
  • ขั้นตอนถัดไปคือการอัปเดตคอนเทนเนอร์ Docker อัตโนมัติ เพิ่มการล็อกอินและอีเมลสำหรับบริการ Keycloak เพิ่ม realm และเพิ่มธีม

ความเห็นของ GN⁺:

  • ความสำคัญของความปลอดภัย: สภาพปัจจุบันของเว็บทำให้ยากที่จะตามทันช่องโหว่ด้านความปลอดภัย ดังนั้นการใช้โซลูชันที่เชื่อถือได้อย่าง Keycloak จึงมีความสำคัญ
  • สถาปัตยกรรมที่มีประสิทธิภาพ: วิธีที่ใช้ทรัพยากรร่วมกันบนโฮสต์เดียว แต่ยังแยกสภาพแวดล้อมออกจากกันได้ เป็นแนวทางที่คุ้มค่าและดูแลง่าย
  • ความสามารถในการปรับแต่ง: การสร้างแบบกำหนดเองด้วย Dockerfile มอบความยืดหยุ่นในการปรับ Keycloak ให้เข้ากับความต้องการของตนเอง

1 ความคิดเห็น

 
GN⁺ 2024-02-12
ความเห็นจาก Hacker News
  • ความเห็นจากผู้ใช้ที่เลือก Authelia:

    • Keycloak มีฟีเจอร์มาก แต่การตั้งค่าซับซ้อนและต้องใช้บริการเพิ่มเติม
    • Authelia ไม่มีส่วนติดต่อผู้ใช้และไม่รองรับการซิงก์สองทางกับเซิร์ฟเวอร์ LDAP แต่สามารถตั้งค่าด้วยไฟล์สแตติกและตัวแปรสภาพแวดล้อมได้ จึงเหมาะกับหลายกรณี
    • หากต้องการเพียงการยืนยันตัวตนแบบง่ายและ SSO แนะนำให้เริ่มจาก Authelia
  • ความเห็นจากผู้ใช้ที่มีประสบการณ์กับ JetBrains Hub และ Keycloak และเลือกใช้ Dex:

    • JetBrains Hub ตั้งค่าได้ง่ายมาก แต่การไม่มี latest tag ของ Docker image เป็นเรื่องไม่สะดวก
    • Keycloak ใช้งานง่ายในโหมดพัฒนา แต่ตั้งค่าได้ยากในสภาพแวดล้อมใช้งานจริง
    • สุดท้ายจึงเลือก Dex ซึ่งตั้งค่าง่ายแม้เอกสารจะยังไม่เพียงพอ
    • ใช้ OAuth2 Proxy ร่วมกับเทมเพลต Nginx เพื่อทำให้การตั้งค่า SSO ง่ายขึ้น
    • เพิ่ม Cloudflare Access และ WAF เพื่อความปลอดภัย
  • ความเห็นจากผู้ใช้ที่ทำตารางเปรียบเทียบเซิร์ฟเวอร์ OpenID Connect:

    • รู้สึกประหลาดใจกับขนาดของ codebase ของ Keycloak
  • ความเห็นจากผู้ใช้เกี่ยวกับปัญหาด้านความปลอดภัยของ Keycloak:

    • เมื่อดู CVE (ช่องโหว่ที่เปิดเผยสู่สาธารณะ) ของ Keycloak ก็มีความกังวลเกี่ยวกับปัญหาความปลอดภัย
  • ความเห็นจากผู้ใช้ที่แชร์ประสบการณ์การติดตั้ง Keycloak บน AWS ECS:

    • Keycloak ผ่านการเปลี่ยนแปลงมามากตลอดระยะเวลาที่ยาวนาน
    • เคยมีความยากลำบากกับการทำคลัสเตอร์ โดยเฉพาะปัญหาเรื่องการค้นพบผ่าน DNS และการค้นพบคลัสเตอร์ผ่าน UDP
    • การล็อกอินแบบมีสถานะไม่สอดคล้องกันระหว่างเซิร์ฟเวอร์ ทำให้การทำโหลดบาลานซ์เป็นเรื่องยาก
  • ความเห็นจากผู้ใช้ที่กล่าวถึง Keycloakify ในทางบวก:

    • Keycloakify ดูเหมือนจะเป็นทางเลือกที่ยอดเยี่ยมสำหรับ Keycloak
  • ความเห็นจากผู้ใช้ที่เปรียบเทียบ Authelia กับ Keycloak:

    • Authelia ดูน่าสนใจ แต่ Keycloak มี Angular connector ให้ จึงเริ่มต้นได้ง่าย
  • ความเห็นจากผู้ใช้ที่แชร์ประสบการณ์การใช้ Keycloak:

    • Keycloak ตั้งค่ายุ่งยากและเอกสารไม่เพียงพอ แต่สามารถใช้ Terraform เพื่อดีพลอยและจัดการได้อย่างง่ายดาย
  • ความเห็นจากผู้ใช้ที่เคยใช้ Zitadel:

    • Keycloak อาจทำให้ผู้เริ่มต้นสับสน และ Zitadel ใช้งานได้ง่ายกว่า
  • ความเห็นจากผู้ใช้ที่บ่นถึงความยากในการใช้ Keycloak:

    • Keycloak ไม่ได้ให้ลิงก์รีเซ็ตรหัสผ่านโดยตรง และต้องจัดการผ่าน API
    • การตั้งค่าคลัสเตอร์ไม่ง่าย และมีข้อจำกัดเกี่ยวกับ realm
    • การสร้างระบบล็อกอินที่ปลอดภัยด้วยตัวเองมีความเสี่ยงหรือทำได้ยาก