Memeriksa RBAC di Kubernetes

Mengamankan cluster Kubernetes adalah satu hal, tetapi menjaga keamanan masih merupakan tantangan. Namun, alat baru telah ditambahkan ke Kubernetes: sekarang jauh lebih mudah untuk melakukan keduanya.


gambar


Kubernetes (dimulai dengan versi 1.6) memperkenalkan konsep kontrol akses berbasis peran (RBAC), yang memungkinkan administrator untuk menetapkan kebijakan pembatasan untuk pengguna klaster. Artinya, Anda membuat pengguna dengan akses terbatas: membatasi akses pengguna ke sumber daya seperti rahasia atau ruang nama tertentu.


Dalam posting ini, kita tidak akan mengerti bagaimana mengimplementasikan RBAC. Ada cukup sumber yang layak di mana topik ini dibahas dari dan ke:



Lebih baik fokus pada cara memastikan bahwa persyaratan bisnis Anda terpenuhi, dan melihat apakah menjalankan objek RBAC perlu diperiksa untuk melihat apakah mereka menjalankan fungsinya.


Skrip kami


Beberapa organisasi menerima beberapa kelompok untuk bekerja dengan kluster Kubernet baru. Ada persyaratan: Anda tidak dapat mencampuri penyebaran grup tetangga sehingga tidak ada masalah atau downtime antarkelompok yang tak terduga.


Dan pemilik cluster menyebarkan RBAC ke dalam cluster, sehingga membatasi akses ke namespace tertentu. Pemeriksaan pertama menunjukkan: grup tidak dapat saling melihat pod di namespace.


Seminggu telah berlalu. Pemilik gugus memperhatikan bahwa pengguna dari namespace yang terisolasi sedang membaca rahasia dari namespace lain. Bagaimana bisa begitu? Dia menggunakan RBAC!


Saya menerapkannya, tetapi, seperti dalam bekerja dengan kode, sistem harus diuji kepatuhannya dengan hasil yang diinginkan. Adalah baik bahwa kubectl Kubectl CLI Kubernetes menyediakan satu set alat untuk memeriksa konfigurasi RBAC. kubectl auth can-i


Bisakah saya? ("Bisakah saya?")
can-i menggunakan API hanya memeriksa untuk melihat apakah tindakan tertentu dapat dilakukan. Dia menggunakan parameter berikut: kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL] kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL] kubectl auth can-i VERB [TYPE | TYPE/NAME | NONRESOURCEURL] . Sekarang pengguna saat ini dapat memeriksa apakah tindakan tertentu tersedia baginya. Ayo pergi:


 kubectl auth can-i create pods 

Ini harus mengembalikan respons "ya" atau "tidak" dengan kode keluar yang sesuai.


Namun, ketika mencoba memeriksa hak-hak pengguna lain, kami menemukan masalah: pengguna di bawah siapa kami diotorisasi dalam cluster ditentukan dalam file config ./kube/config , dan tidak nyaman untuk memiliki konfigurasi terpisah untuk menguji masing-masing pengguna. Untungnya, Kubernetes datang untuk menyelamatkan lagi: ia dapat mensimulasikan pengguna menggunakan label --as= dan --as-group= .


Perbarui perintah, gunakan simulasi dari pengguna lain:


 kubectl auth can-i create pods --as=me 

Kita harus melihat bahwa dengan kode keluar 1 , respons "tidak" dikembalikan.


Dan ini hebat, karena kami sekarang memiliki serangkaian perintah yang memungkinkan kami memeriksa apakah pengguna atau grup pengguna memiliki akses ke sumber daya Kubernetes apa pun - mulai dari melihat pod hingga menghapus rahasia.


Otomasi


Namun, masih terlalu dini untuk berhenti: sekarang kami dapat menerapkan urutan pengujian yang akan menggambarkan daftar persyaratan dan menjalankannya sebagai bagian dari jalur pipa CD. Untuk penyebabnya!


Ada banyak untuk dipilih, ada cukup banyak bahasa untuk diterapkan: dimulai dengan Ava dan Mocha di JavaScript dan berakhir dengan Rspec. Dalam hal ini, saya menerapkan kerangka uji Kelelawar murni Bash.


Di bawah ini adalah contoh menjalankan tes. Itu memeriksa operasi aturan RBAC yang memungkinkan pengguna dari grup untuk mengubah jumlah menjalankan perapian di namespace. Itu dieksekusi jika atribut "dieksekusi" telah ditetapkan. Atau - menggunakan bats filename .


 #!/usr/bin/env bats @test "Team namespaces can scale deployments within their own namespace" { run kubectl auth can-i update deployments.apps --subresource="scale" --as-group="$group" --as="$user" -n $ns [ "$status" -eq 0 ] [ "$output" == "yes" ] done } 

Perintah --as dan --as-group membutuhkan penggunaan aturan RBAC berikut:


 rules: - apiGroups: - authorization.k8s.io resources: - selfsubjectaccessreviews - selfsubjectrulesreviews verbs: - create 

Berikut adalah metode sederhana bagi Anda untuk menerapkan pemeriksaan aturan RBAC di Kubernetes. Dengan menjadikannya bagian dari pipa Kubernetes, kami akan secara signifikan memperkuat kebijakan RBAC. Metode ini telah diuji dalam praktik: menangkap perubahan yang melanggar kebijakan akses jauh lebih cepat!


Terima kasih telah meluangkan waktu untuk membaca posting ini!

Source: https://habr.com/ru/post/id434374/


All Articles