Bagaimana Memulai Dengan Kubernetes RBAC

  • Post author:
  • Post category:Tutorial

Role-based access control (RBAC) adalah mekanisme untuk menentukan tindakan yang dapat dilakukan akun pengguna dalam cluster Kubernetes Anda. Mengaktifkan RBAC mengurangi risiko yang terkait dengan pencurian kredensial dan pengambilalihan akun. Menerbitkan setiap pengguna dengan set izin minimum yang mereka perlukan mencegah akun menjadi lebih istimewa.

Distribusi Kubernetes paling populer dimulai dengan satu akun pengguna yang diberikan akses pengguna super ke cluster. Mengautentikasi karena akun ini memungkinkan Anda melakukan tindakan apa pun tetapi dapat menimbulkan risiko keamanan yang substansial.

Dalam artikel ini, kami akan menunjukkan cara mengaktifkan dan mengonfigurasi Kubernetes RBAC API sehingga Anda dapat menentukan kemampuan pengguna dengan tepat. biasanya beberapa pengguna hanya membuat dan membuat daftar Pod sementara administrator juga dapat menghapus item. Anda dapat menyiapkan dan menerapkan kebijakan ini menggunakan sistem RBAC.

Mengaktifkan RBAC di Kubernetes

RBAC adalah fitur Kubernetes opsional, tetapi sebagian besar distribusi utama disertakan dengannya diaktifkan secara default, termasuk yang berasal dari penyedia cloud terkelola. Anda dapat memeriksa apakah RBAC tersedia di cluster Anda dengan menjalankan perintah berikut dengan Kubectl:

$ kubectl api-versions | grep rbac.authorization.k8s rbac.authorization.k8s.io/v1

Perintah harus memancarkan rbac.authorization.k8s.io/v1 sebagai outputnya jika RBAC diaktifkan. RBAC dimatikan jika perintah tidak menghasilkan output apa pun. Anda dapat mengaktifkannya dengan memulai server API Kubernetes dengan –authorization-mode=RBAC flag:

$ kube-apiserver –authorization-mode=RBAC

Lihat dokumentasi untuk distribusi Kubernetes Anda jika Anda tidak yakin bagaimana menyesuaikan API argumen startup server.

Kubernetes RBAC Objects

Implementasi RBAC Kubernetes berkisar pada empat jenis objek yang berbeda. Anda dapat mengelola objek-objek ini menggunakan Kubectl, mirip dengan sumber daya Kubernetes lainnya seperti Pods, Deployments, dan ConfigMaps.

Role – Role adalah seperangkat aturan kontrol akses yang menentukan tindakan yang dapat dilakukan pengguna.RoleBinding – “binding” adalah penghubung antara peran dan satu atau lebih subjek, yang dapat berupa pengguna atau akun layanan. Pengikatan memungkinkan subjek untuk melakukan tindakan apa pun yang termasuk dalam peran yang ditargetkan.

Roles dan RoleBindings adalah objek dengan spasi nama. Mereka harus ada dalam namespace tertentu dan mereka mengontrol akses ke objek lain di dalamnya. RBAC diterapkan ke sumber daya tingkat cluster – seperti Node dan Namespace itu sendiri – menggunakan ClusterRoles dan ClusterRoleBindings. Ini bekerja mirip dengan Roles dan RoleBindings tetapi menargetkan objek non-namespaced.

Membuat Akun Layanan

A Akun layanan Kubernetes adalah jenis pengguna yang dikelola oleh Kubernetes API. Setiap akun layanan memiliki token unik yang digunakan sebagai kredensialnya. Anda tidak dapat menambahkan pengguna normal melalui Kubernetes API jadi kami akan menggunakan akun layanan untuk tutorial ini.

Gunakan Kubectl untuk membuat akun layanan baru:

$ kubectl create serviceaccount demo

Ini menghasilkan akun baru yang disebut demo. Selanjutnya Anda perlu mengambil token yang akan Anda gunakan untuk mengautentikasi sebagai akun ini. Pertama temukan nama rahasia yang menyimpan token:

$ kubectl deskripsikan serviceaccount demo Nama: demo Namespace: default Label: Anotasi: Rahasia tarik gambar: Rahasia yang dapat dipasang: demo-token-w543b Token: demo-token-w543b Events:

This token akun layanan disimpan dalam rahasia yang disebut demo-token-w543b. Anda dapat mengambil token dengan mendapatkan nilai rahasia dengan perintah ini:

$ TOKEN=$(kubectl explain secret demo-token-w543b | grep token: | awk `{print $2}`)

Token sekarang disimpan dalam variabel TOKEN di cangkangmu. Anda dapat menggunakan variabel ini untuk menambahkan konteks Kubectl baru yang memungkinkan Anda mengautentikasi sebagai akun layanan Anda:

$ kubectl config set-credentials demo –token=$TOKEN Set “demo” pengguna. $ kubectl config set-context demo –cluster=default –user=demo Konteks “demo” dibuat.

Anda harus mengubah nilai flag –cluster agar sesuai dengan nama koneksi cluster Kubectl yang aktif. Ini biasanya default atau nama konteks yang Anda pilih saat ini. Anda dapat memeriksa konteks yang dipilih dengan menjalankan kubectl config current-context.

Beralih ke konteks baru Anda untuk mengautentikasi sebagai akun layanan demo Anda. Catat nama konteks yang Anda pilih saat ini terlebih dahulu, sehingga Anda dapat beralih kembali ke akun superuser Anda nanti.

$ kubectl config current-context default $ kubectl config use-context demo Beralih ke konteks “demo”. Perintah

Kubectl sekarang akan mengautentikasi sebagai akun layanan demo. Coba ambil daftar Pod di cluster:

$ kubectl get pods Error from server (Terlarang): Pod dilarang: Pengguna “system:serviceaccount:default:demo” tidak dapat mencantumkan resource “pods” di grup API “” di namespace “default”

Operasi telah dilarang karena akun layanan demo tidak memiliki peran yang memungkinkannya mengakses Pods.

Menambahkan Role

Roles dibuat dengan cara yang sama seperti objek Kubernetes lainnya. Anda menulis file YAML yang mendefinisikan peran dan izin yang diberikannya. Setiap peran berisi satu atau lebih aturan yang mengizinkan tindakan tertentu dilakukan terhadap sekumpulan sumber daya. Berikut adalah peran sederhana yang memungkinkan pengguna untuk mengambil detail Pod yang ada:

apiVersion: rbac.authorization.k8s.io/v1 jenis: Metadata peran: namespace: nama default: aturan demo-role: – apiGroups: [“”] resources: [“pods”] kata kerja: [“get”, “list”]

Kata kerja get and list yang diterapkan pada sumber daya pod berarti Anda akan dapat menjalankan perintah seperti get pod dan mendeskripsikan pod. Mencoba membuat Pod baru, atau menghapus Pod yang sudah ada, akan dilarang karena kata kerja buat dan hapus dihilangkan dari role.

Beralih kembali ke konteks Kubectl asli Anda sehingga Anda dapat menambahkan peran ke cluster Anda menggunakan akun administratif Anda:

$ kubectl config use-context default Beralih ke konteks “default”.

Sekarang tambahkan peran:

$ kubectl apply -f role.yaml role.rbac.authorization.k8s.io/demo-role CreatedMengikat Peran ke Pengguna dan Akun Layanan

Sekarang Anda dapat kaitkan peran Anda dengan akun layanan demo Anda dengan membuat RoleBinding baru. Buat file YAML berikut untuk menentukan binding Anda:

apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: namespace: default name: demo-role-binding subject: – kind: ServiceAccount name: demo apiGroup: “” roleRef : jenis: Nama peran: demo-role apiGroup: “”

RoleBindings perlu menyertakan satu atau beberapa subjek yang mengidentifikasi pengguna dan akun layanan yang ditargetkan oleh pengikatan. Bidang roleRef mengacu pada peran yang ingin Anda tetapkan untuk setiap pengguna tersebut.

Peran dan RoleBinding harus ada di namespace yang sama. Gunakan ClusterRole dan ClusterRoleBinding sebagai gantinya untuk resource yang tidak memiliki namespace.

Next run kubectl apply untuk menambahkan RoleBinding ke cluster Anda. Ini akan segera berlaku, memberikan akun layanan demo kemampuan yang dideklarasikan dalam peran demo Role:

$ kubectl apply -f role-binding.yaml rolebinding.rbac.authorization.k8s.io/demo-role-binding createdMenguji RBAC Anda Rule

Uji implementasi RBAC sederhana Anda dengan beralih kembali ke konteks Kubectl baru yang Anda buat untuk akun demo:

$ kubectl config use-context demo Beralih ke konteks “demo”.

Sekarang ulangi perintah get pods dari sebelumnya:

$ kubectl get pods Tidak sumber daya yang ditemukan di namespace.

default Kali ini perintah telah berhasil. Akun layanan demo sekarang diizinkan untuk mengambil daftar Pod karena terikat dengan Peran peran demo. Anda masih akan melihat kesalahan Terlarang jika Anda mencoba membuat Pod baru karena operasi itu tidak termasuk dalam peran apa pun yang terikat pada akun:

$ kubectl run nginx –image=nginx Kesalahan dari server (Terlarang): pod dilarang: Pengguna “system:serviceaccount:default:demo” tidak dapat membuat “pod” sumber daya di grup API “” di namespace “default”

Anda dapat menyelesaikan ini dengan menetapkan peran lain kepada pengguna yang menyertakan kata kerja buat untuk sumber daya pod. Atau, Anda dapat mengedit file YAML peran yang ada dan menerapkan versi yang dimodifikasi ke cluster:

apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: demo-role rules: – apiGroups: [” “] sumber daya: [“pod”] kata kerja: [“buat”, “dapatkan”, “daftar”]

Anda juga dapat menambahkan aturan tambahan ke peran Anda untuk membuat berbagai kombinasi grup sumber daya dan tindakan yang diizinkan.

Summary

RBAC memungkinkan Anda untuk menentukan kemampuan perangkat lunak yang tersedia untuk akun pengguna individu. Sistem RBAC Kubernetes memberikan kontrol yang sangat tepat untuk membatasi jenis sumber daya yang dapat diakses akun, dan tindakan yang diizinkan untuk dilakukan.

Mengadopsi RBAC memperketat keamanan di sekitar cluster Anda dan menciptakan lingkungan operasi yang lebih kecil risikonya. Namun Anda tetap perlu mengingat praktik terbaik untuk menghindari munculnya masalah baru. Anda harus mengaudit klaster secara berkala untuk mengidentifikasi akun yang memiliki hak istimewa berlebih dan membersihkan peran yang berlebihan. Ini akan membantu mencegah kebingungan dan memungkinkan Anda untuk mendapatkan gambaran yang jelas tentang tindakan yang dapat diambil oleh setiap akun.

Implementasi RBAC yang efektif harus didasarkan pada jumlah peran yang sekecil mungkin, dengan setiap peran memiliki serangkaian tindakan minimum yang diperlukan untuknya. area fungsi tertentu. Menetapkan terlalu banyak hak istimewa ke setiap akun meniadakan manfaat RBAC sehingga perlu meluangkan waktu untuk merencanakan persyaratan setiap pengguna sebelum Anda mulai membuat peran dan binding.

Itulah berita seputar Bagaimana Memulai Dengan Kubernetes RBAC, semoga bermanfaat. Disadur dari HowToGeek.com.