Authorization of Kubernetes
K8s-authz adalah middleware otorisasi Kubernetes (k8s) berbasis Casbin yang memanfaatkan RBAC (Role-Based Access Control) dan ABAC (Attribute-Based Access Control) untuk penegakan kebijakan. Middleware ini terintegrasi dengan webhook admissi validasi K8s untuk memvalidasi kebijakan yang didefinisikan oleh Casbin untuk setiap permintaan yang dibuat ke sumber daya K8s. Pengontrol admissi kustom terdaftar dengan Kubernetes menggunakan ValidatingAdmissionWebhook
untuk melakukan validasi pada objek permintaan yang diteruskan oleh server API dan memberikan respons yang menunjukkan apakah permintaan tersebut harus diizinkan atau ditolak.
Untuk menentukan kapan mengirim permintaan masuk ke pengontrol admissi, webhook validasi telah diterapkan. Webhook ini memproksi permintaan untuk semua jenis sumber daya K8s atau sub-sumber daya dan melakukan verifikasi kebijakan. Pengguna hanya diizinkan untuk melakukan operasi pada sumber daya ini jika mereka diotorisasi oleh enforcer Casbin. Enforcer memeriksa peran pengguna sebagaimana didefinisikan dalam kebijakan. Kluster K8s adalah target penerapan untuk middleware ini.
Persyaratan
Sebelum melanjutkan, pastikan Anda memiliki yang berikut:
- Kluster Kubernetes yang sedang berjalan. Anda dapat menyiapkan kluster lokal menggunakan Docker atau menyiapkan ekosistem Kubernetes lengkap di server Anda. Untuk instruksi yang lebih detail, lihat panduan ini untuk menyiapkan kluster Kubernetes lokal di Windows atau panduan ini untuk menyiapkan kluster di Linux.
- Kubectl CLI. Instruksi untuk menginstal Kubectl di Windows dapat ditemukan di sini, dan untuk Linux di sini.
- OpenSSL
Penggunaan
Ikuti langkah-langkah ini untuk menggunakan K8s-authz:
Hasilkan sertifikat dan kunci untuk setiap pengguna menggunakan OpenSSL. Jalankan skrip di bawah ini:
./gen_cert.sh
Bangun gambar Docker dari Dockerfile secara manual dengan menjalankan perintah berikut. Ingatlah untuk mengubah versi build dalam perintah dan dalam file penyebaran sesuai dengan kebutuhan.
docker build -t casbin/k8s_authz:0.1 .
Tentukan kebijakan Casbin dalam file model.conf dan policy.csv. Untuk informasi lebih lanjut tentang bagaimana kebijakan ini bekerja, lihat dokumentasi.
Sebelum menyebar, Anda dapat mengubah port dalam file main.go, serta dalam konfigurasi webhook validasi file, berdasarkan kebutuhan spesifik Anda.
Sebarkan pengontrol validasi dan webhook pada kluster Kubernetes dengan menjalankan perintah berikut:
kubectl apply -f deployment.yaml
Untuk server produksi, disarankan untuk membuat
secret
Kubernetes untuk mengamankan sertifikat:kubectl create secret generic casbin -n default \
--from-file=key.pem=certs/casbin-key.pem \
--from-file=cert.pem=certs/casbin-crt.pemSetelah menyelesaikan langkah-langkah di atas, Anda perlu memperbarui direktori sertifikat di main.go dan manifests dengan direktori dari
secret
yang dibuat.
Sekarang, server seharusnya sudah berjalan dan siap untuk memvalidasi permintaan yang dibuat ke sumber daya K8s serta menegakkan kebijakan sesuai dengan itu.