Authorization of Kubernetes
K8s-authz เป็น middleware สำหรับการอนุญาตใน Kubernetes (k8s) ที่ใช้ Casbin ซึ่งใช้ RBAC (Role-Based Access Control) และ ABAC (Attribute-Based Access Control) เพื่อบังคับใช้นโยบาย Middleware นี้รวมเข้ากับ K8s validation admission webhook เพื่อตรวจสอบนโยบายที่กำหนดโดย Casbin สำหรับแต่ละคำขอที่ทำไปยังทรัพยากร K8s Custom admission controllers ถูกลงทะเบียนกับ Kubernetes โดยใช้ ValidatingAdmissionWebhook
เพื่อทำการตรวจสอบคำขอที่ส่งมาจาก API server และให้คำตอบว่าคำขอนั้นควรได้รับอนุญาตหรือควรถูกปฏิเสธ
เพื่อกำหนดเวลาที่จะส่งคำขอเข้ามายัง admission controller, webhook สำหรับการตรวจสอบได้ถูกนำมาใช้งาน Webhook นี้ทำหน้าที่เป็น proxy สำหรับคำขอของทรัพยากร K8s หรือ sub-resource และทำการตรวจสอบนโยบาย ผู้ใช้จะได้รับอนุญาตให้ดำเนินการกับทรัพยากรเหล่านี้ได้เฉพาะเมื่อพวกเขาได้รับอนุญาตจาก Casbin enforcer Enforcer ตรวจสอบบทบาทของผู้ใช้ตามที่กำหนดไว้ในนโยบาย K8s cluster เป็นเป้าหมายการปรับใช้สำหรับ middleware นี้
ความต้องการ
ก่อนที่จะดำเนินการต่อ, โปรดตรวจสอบว่าคุณมีสิ่งต่อไปนี้:
- Kubernetes cluster ที่กำลังทำงาน คุณสามารถตั้งค่า local cluster โดยใช้ Docker หรือตั้งค่าระบบ Kubernetes ทั้งหมดบนเซิร์ฟเวอร์ของคุณ สำหรับคำแนะนำโดยละเอียด, โปรดดูที่ guide สำหรับการตั้งค่า local Kubernetes cluster บน Windows หรือ guide สำหรับการตั้งค่า cluster บน Linux
- Kubectl CLI คำแนะนำสำหรับการติดตั้ง Kubectl บน Windows สามารถดูได้ที่ here, และสำหรับ Linux here
- OpenSSL
การใช้งาน
ทำตามขั้นตอนเหล่านี้เพื่อใช้ K8s-authz:
สร้าง certificates และ keys สำหรับแต่ละผู้ใช้โดยใช้ OpenSSL รันสคริปต์ด้านล่าง:
./gen_cert.sh
สร้าง Docker image จาก Dockerfile ด้วยตนเองโดยการรันคำสั่งต่อไปนี้ อย่าลืมเปลี่ยนเวอร์ชันการสร้างในคำสั่งและในไฟล์ deployment file ให้ตรงกัน
docker build -t casbin/k8s_authz:0.1 .
กำหนดนโยบาย Casbin ในไฟล์ model.conf และ policy.csv สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการทำงานของนโยบายเหล่านี้, โปรดดูที่ documentation
ก่อนที่จะทำการปรับใช้, คุณสามารถแก้ไขพอร์ตในไฟล์ main.go และในไฟล์การตั้งค่า webhook สำหรับการตรวจสอบ file, ตามความต้องการของคุณ
ปรับใช้ validation controller และ webhook บน Kubernetes cluster โดยการรันคำสั่งต่อไปนี้:
kubectl apply -f deployment.yaml
สำหรับเซิร์ฟเวอร์การผลิต, แนะนำให้สร้าง Kubernetes
secret
เพื่อรักษาความปลอดภัยของ certificates:kubectl create secret generic casbin -n default \
--from-file=key.pem=certs/casbin-key.pem \
--from-file=cert.pem=certs/casbin-crt.pemหลังจากทำขั้นตอนข้างต้นเสร็จสิ้น, คุณจำเป็นต้องอัปเดตไดเรกทอรีของ certificate ใน main.go และ manifests ด้วยไดเรกทอรีของ
secret
ที่สร้างขึ้น
ตอนนี้, เซิร์ฟเวอร์ควรจะทำงานและพร้อมที่จะตรวจสอบคำขอที่ทำไปยังทรัพยากร K8s และบังคับใช้นโยบายตามที่กำหนด