3 điểm bởi GN⁺ 2024-02-12 | 1 bình luận | Chia sẻ qua WhatsApp

Thiết lập Keycloak SSO: dùng Docker Compose và Nginx

  • Keycloak là một giải pháp quản lý định danh và truy cập mã nguồn mở, đáng tin cậy và tương thích với các giao thức SSO chính.
  • Việc thiết lập bằng Docker Compose không quá phức tạp nhưng cũng không thật sự trực quan, nên bài viết tóm tắt lại quy trình cấu hình.

Khái niệm

  • Sử dụng cấu hình tiêu chuẩn với Nginx làm reverse proxy trung tâm để chuyển lưu lượng đến từng dịch vụ riêng lẻ thông qua localhost.
  • Đây được xem là một cấu hình kinh tế, giúp chia sẻ tài nguyên trên một máy chủ duy nhất nhưng vẫn cô lập môi trường ở mức tối đa.

Chuẩn bị

  • Cần các công cụ cơ bản (SSH, VM cài Linux, domain hoặc subdomain).
  • Để cấu hình Docker rootless, tạo một người dùng non-root mới không cần mật khẩu tên là 'keycloak', cập nhật phạm vi /etc/subuid/etc/subgid, cài Docker rootless và thiết lập tự động khởi động dịch vụ.

Cấu hình Keycloak

  • Đăng nhập bằng người dùng keycloak vừa tạo và tạo các thư mục cho dữ liệu lâu dài cùng các tệp Docker.
  • Tham khảo tài liệu chính thức để viết docker-compose.yml, rồi điền các thông tin nhạy cảm và dễ thay đổi vào tệp .env.

Kiểm thử cục bộ

  • Kiểm thử stack Docker Compose, tạo reverse SSH tunnel đến VM, sau đó xác nhận màn hình chào mừng của Keycloak trong trình duyệt.

Cấu hình Nginx

  • Thiết lập Nginx làm reverse proxy hệ thống và tạo tệp .conf Nginx mới cho dịch vụ Keycloak.
  • Thêm bản ghi A tại nhà đăng ký domain để chuyển truy vấn DNS tới địa chỉ IP của VM.

Gỡ lỗi

  • Mở .tld.com, đăng nhập vào Keycloak bằng người dùng admin, rồi kiểm tra log Docker Compose cùng log truy cập và lỗi của Nginx.
  • Nếu cần, kiểm tra cơ sở dữ liệu Keycloak.

Tùy biến bản dựng bằng Dockerfile

  • Thay vì dùng image dựng sẵn từ quay.io, có thể tự build image bằng Dockerfile.
  • Khởi động lại Docker Compose để build image và chạy dịch vụ.

Kết luận

  • Dịch vụ Keycloak đang chạy phía sau reverse proxy Nginx hệ thống với Docker rootless.
  • Các bước tiếp theo gồm tự động cập nhật container Docker, thêm đăng nhập dịch vụ và email cho Keycloak, thêm realm, thêm theme, v.v.

Ý kiến của GN⁺:

  • Tầm quan trọng của bảo mật: Trạng thái hiện tại của web khiến việc theo kịp các lỗ hổng liên quan đến bảo mật trở nên khó khăn, vì vậy việc sử dụng một giải pháp đáng tin cậy như Keycloak là rất quan trọng.
  • Kiến trúc hiệu quả: Cách chia sẻ tài nguyên trên một máy chủ duy nhất mà vẫn cô lập môi trường là lựa chọn tiết kiệm chi phí và dễ quản lý.
  • Khả năng tùy biến: Tự build bằng Dockerfile mang lại sự linh hoạt để điều chỉnh Keycloak theo nhu cầu riêng.

1 bình luận

 
GN⁺ 2024-02-12
Ý kiến trên Hacker News
  • Ý kiến của người dùng đã chọn Authelia:

    • Keycloak có nhiều tính năng nhưng cấu hình phức tạp và cần thêm các dịch vụ phụ trợ.
    • Authelia không có giao diện người dùng và không đồng bộ hai chiều với máy chủ LDAP, nhưng có thể cấu hình bằng tệp tĩnh và biến môi trường nên phù hợp trong nhiều trường hợp.
    • Nếu chỉ cần xác thực đơn giản và SSO thì nên bắt đầu với Authelia.
  • Ý kiến của người dùng từng dùng JetBrains Hub và Keycloak, sau đó chọn Dex:

    • JetBrains Hub rất dễ cấu hình, nhưng việc thiếu thẻ latest cho Docker image gây bất tiện.
    • Keycloak thì dễ ở chế độ phát triển, nhưng khó cấu hình trong môi trường vận hành thực tế.
    • Cuối cùng họ chọn Dex vì cấu hình đơn giản dù tài liệu còn thiếu.
    • Họ kết hợp OAuth2 Proxy với mẫu Nginx để đơn giản hóa cấu hình SSO.
    • Họ cũng bổ sung Cloudflare Access và WAF để tăng cường bảo mật.
  • Ý kiến của người dùng đã tạo bảng so sánh các máy chủ OpenID Connect:

    • Họ ngạc nhiên trước kích thước của codebase Keycloak.
  • Ý kiến của người dùng về các vấn đề bảo mật của Keycloak:

    • Khi nhìn vào các CVE của Keycloak, họ có lo ngại về các vấn đề bảo mật.
  • Ý kiến của người dùng chia sẻ kinh nghiệm triển khai Keycloak trên AWS ECS:

    • Keycloak đã trải qua rất nhiều thay đổi trong một thời gian dài.
    • Họ gặp khó khăn với clustering, đặc biệt là việc khám phá DNS và khám phá cụm qua UDP.
    • Đăng nhập có trạng thái không nhất quán giữa các máy chủ, khiến việc cân bằng tải trở nên khó khăn.
  • Ý kiến của người dùng có nhắc tích cực về Keycloakify:

    • Keycloakify có vẻ là một lựa chọn thay thế rất tốt cho Keycloak.
  • Ý kiến của người dùng so sánh Authelia và Keycloak:

    • Authelia trông khá hấp dẫn, nhưng Keycloak cung cấp Angular connector nên dễ bắt đầu hơn.
  • Ý kiến của người dùng chia sẻ kinh nghiệm dùng Keycloak:

    • Keycloak có cấu hình phức tạp và tài liệu còn thiếu, nhưng có thể triển khai và quản lý khá dễ bằng Terraform.
  • Ý kiến của người dùng đã thử Zitadel:

    • Keycloak có thể gây rối cho người mới bắt đầu, còn Zitadel thì dễ dùng hơn.
  • Ý kiến của người dùng than phiền về khó khăn khi dùng Keycloak:

    • Keycloak không cung cấp trực tiếp liên kết đặt lại mật khẩu mà phải xử lý qua API.
    • Việc cấu hình cụm không hề dễ và realm cũng có những giới hạn.
    • Tự xây dựng một hệ thống đăng nhập bảo mật là việc rủi ro hoặc khó khăn.