Bỏ qua đến nội dung chính

Authorization of Kubernetes

K8s-authz là một middleware ủy quyền cho Kubernetes (k8s) dựa trên Casbin, sử dụng RBAC (Role-Based Access Control) và ABAC (Attribute-Based Access Control) cho việc thực thi chính sách. Middleware này tích hợp với webhook kiểm định của K8s để kiểm tra các chính sách được định nghĩa bởi Casbin cho mỗi yêu cầu đến tài nguyên K8s. Các bộ điều khiển nhập liệu tùy chỉnh được đăng ký với Kubernetes sử dụng ValidatingAdmissionWebhook để thực hiện kiểm định trên các đối tượng yêu cầu được chuyển tiếp bởi máy chủ API và cung cấp phản hồi cho biết yêu cầu có nên được cho phép hay từ chối.

Để xác định thời điểm gửi các yêu cầu đến bộ điều khiển nhập liệu, một webhook kiểm định đã được triển khai. Webhook này chuyển tiếp các yêu cầu cho bất kỳ loại tài nguyên K8s hoặc tài nguyên phụ nào và thực hiện xác minh chính sách. Người dùng chỉ được phép thực hiện các hoạt động trên các tài nguyên này nếu họ được ủy quyền bởi bộ thực thi Casbin. Bộ thực thi kiểm tra các vai trò của người dùng như được định nghĩa trong các chính sách. Cụm K8s là mục tiêu triển khai cho phần mềm trung gian này.

Yêu cầu

Trước khi tiến hành, hãy đảm bảo rằng bạn có những thứ sau:

  • Một cụm Kubernetes đang chạy. Bạn có thể thiết lập một cụm cục bộ sử dụng Docker hoặc thiết lập một hệ sinh thái Kubernetes hoàn chỉnh trên máy chủ của bạn. Để biết hướng dẫn chi tiết, tham khảo hướng dẫn này để thiết lập một cụm Kubernetes cục bộ trên Windows hoặc hướng dẫn này để thiết lập một cụm trên Linux.
  • Kubectl CLI. Hướng dẫn cài đặt Kubectl trên Windows có thể được tìm thấy tại đây, và cho Linux tại đây.
  • OpenSSL

Sử dụng

Làm theo các bước sau để sử dụng K8s-authz:

  1. Tạo chứng chỉ và khóa cho mỗi người dùng bằng OpenSSL. Chạy tập lệnh dưới đây:

    ./gen_cert.sh
  2. Xây dựng hình ảnh Docker từ Dockerfile thủ công bằng cách chạy lệnh sau. Hãy nhớ thay đổi phiên bản xây dựng trong lệnh và trong tệp deployment tương ứng.

    docker build -t casbin/k8s_authz:0.1 .
  3. Định nghĩa các chính sách Casbin trong tệp model.confpolicy.csv. Để biết thêm thông tin về cách các chính sách này hoạt động, hãy tham khảo tài liệu.

  4. Trước khi triển khai, bạn có thể sửa đổi cổng trong tệp main.go, cũng như trong tệp cấu hình webhook xác thực file, dựa trên yêu cầu cụ thể của bạn.

  5. Triển khai bộ điều khiển xác thực và webhook trên cụm Kubernetes bằng cách chạy lệnh sau:

    kubectl apply -f deployment.yaml
  6. Đối với máy chủ sản xuất, khuyến nghị tạo một Kubernetes secret để bảo mật chứng chỉ:

    kubectl create secret generic casbin -n default \
    --from-file=key.pem=certs/casbin-key.pem \
    --from-file=cert.pem=certs/casbin-crt.pem
  7. Sau khi hoàn thành các bước trên, bạn cần cập nhật thư mục chứng chỉ trong main.gomanifests với thư mục của secret đã tạo.

Bây giờ, máy chủ nên đã hoạt động và sẵn sàng để xác thực các yêu cầu được thực hiện đến tài nguyên K8s và thực thi chính sách tương ứng.