ข้ามไปยังเนื้อหาหลัก

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:

  1. สร้าง certificates และ keys สำหรับแต่ละผู้ใช้โดยใช้ OpenSSL รันสคริปต์ด้านล่าง:

    ./gen_cert.sh
  2. สร้าง Docker image จาก Dockerfile ด้วยตนเองโดยการรันคำสั่งต่อไปนี้ อย่าลืมเปลี่ยนเวอร์ชันการสร้างในคำสั่งและในไฟล์ deployment file ให้ตรงกัน

    docker build -t casbin/k8s_authz:0.1 .
  3. กำหนดนโยบาย Casbin ในไฟล์ model.conf และ policy.csv สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการทำงานของนโยบายเหล่านี้, โปรดดูที่ documentation

  4. ก่อนที่จะทำการปรับใช้, คุณสามารถแก้ไขพอร์ตในไฟล์ main.go และในไฟล์การตั้งค่า webhook สำหรับการตรวจสอบ file, ตามความต้องการของคุณ

  5. ปรับใช้ validation controller และ webhook บน Kubernetes cluster โดยการรันคำสั่งต่อไปนี้:

    kubectl apply -f deployment.yaml
  6. สำหรับเซิร์ฟเวอร์การผลิต, แนะนำให้สร้าง 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
  7. หลังจากทำขั้นตอนข้างต้นเสร็จสิ้น, คุณจำเป็นต้องอัปเดตไดเรกทอรีของ certificate ใน main.go และ manifests ด้วยไดเรกทอรีของ secret ที่สร้างขึ้น

ตอนนี้, เซิร์ฟเวอร์ควรจะทำงานและพร้อมที่จะตรวจสอบคำขอที่ทำไปยังทรัพยากร K8s และบังคับใช้นโยบายตามที่กำหนด