Mengontrol akses menggunakan MICROSOFT Entra ID dan Kubernetes RBAC
Berlaku untuk: AKS di Azure Stack HCI 23H2
Anda dapat mengonfigurasi Azure Kubernetes Service (AKS) untuk menggunakan ID Microsoft Entra untuk autentikasi pengguna. Dalam konfigurasi ini, Anda masuk ke kluster Kubernetes menggunakan token autentikasi Microsoft Entra. Setelah diautentikasi, Anda dapat menggunakan kontrol akses berbasis peran Kubernetes (Kubernetes RBAC) bawaan untuk mengelola akses ke namespace layanan dan sumber daya kluster berdasarkan identitas pengguna atau keanggotaan grup.
Artikel ini menjelaskan cara mengontrol akses menggunakan RBAC Kubernetes dalam kluster Kubernetes berdasarkan keanggotaan grup Microsoft Entra di AKS. Anda membuat grup demo dan pengguna di ID Microsoft Entra. Kemudian, Anda membuat peran dan pengikatan peran di kluster untuk memberikan izin yang sesuai untuk membuat dan melihat sumber daya.
Prasyarat
Sebelum menyiapkan RBAC Kubernetes menggunakan MICROSOFT Entra ID, Anda harus memiliki prasyarat berikut:
AKS yang diaktifkan oleh kluster Azure Arc. Jika Anda perlu menyiapkan kluster, lihat instruksi untuk menggunakan portal Azure atau Azure CLI.
Anda memerlukan Azure CLI yang diinstal dan dikonfigurasi. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
Instal versi
aksarc
terbaru ekstensi Azure CLI danconnectedk8s
:az extension add --name aksarc az extension add --name connectedk8s
Jika Anda sudah menginstal
aksarc
ekstensi, perbarui ekstensi ke versi terbaru:az extension update --name aksarc az extension update --name connectedk8s
Kubectl. Alat baris perintah Kube, kubectl, memungkinkan Anda menjalankan perintah yang menargetkan kluster Kubernetes Anda. Untuk memeriksa apakah Anda menginstal kubectl, buka prompt perintah dan ketik
kubectl version --client
. Pastikan versi klien kubectl Anda setidaknyav1.24.0
. Untuk petunjuk penginstalan, lihat kubectl.
Langkah pertama opsional
Jika Anda belum memiliki grup Microsoft Entra yang berisi anggota, Anda mungkin ingin membuat grup dan menambahkan beberapa anggota, sehingga Anda dapat mengikuti instruksi dalam artikel ini.
Untuk menunjukkan bekerja dengan MICROSOFT Entra ID dan Kubernetes RBAC, Anda dapat membuat grup Microsoft Entra untuk pengembang aplikasi yang dapat digunakan untuk menunjukkan bagaimana Kubernetes RBAC dan Microsoft Entra ID mengontrol akses ke sumber daya kluster. Di lingkungan produksi, Anda dapat menggunakan pengguna dan grup yang ada dalam penyewa Microsoft Entra.
Membuat grup demo di ID Microsoft Entra
Pertama, buat grup di ID Microsoft Entra di penyewa Anda untuk pengembang aplikasi menggunakan az ad group create
perintah . Contoh berikut meminta Anda untuk masuk ke penyewa Azure Anda lalu membuat grup bernama appdev:
az login
az ad group create --display-name appdev --mail-nickname appdev
Menambahkan pengguna ke grup Anda
Dengan grup contoh yang dibuat di ID Microsoft Entra untuk pengembang aplikasi, tambahkan pengguna ke appdev
grup. Anda menggunakan akun pengguna ini untuk masuk ke kluster AKS dan menguji integrasi RBAC Kubernetes.
Tambahkan pengguna ke grup appdev yang dibuat di bagian sebelumnya menggunakan az ad group member add
perintah . Jika Anda keluar dari sesi, sambungkan kembali ke Azure menggunakan az login
.
$AKSDEV_ID = az ad user create --display-name <name> --password <strongpassword> --user-principal-name <name>@contoso.onmicrosoft.com
az ad group member add --group appdev --member-id $AKSDEV_ID
Membuat pengikatan peran RBAC Kubernetes kustom pada sumber daya kluster AKS untuk grup Microsoft Entra
Konfigurasikan kluster AKS untuk memungkinkan grup Microsoft Entra Anda mengakses kluster. Jika Anda ingin menambahkan grup dan pengguna, lihat Membuat grup demo di ID Microsoft Entra.
az aksarc get-credentials
Gunakan perintah untuk mendapatkan kredensial admin kluster:az aksarc get-credentials --name "sample-aksarccluster" --resource-group "sample-rg" --admin
Buat namespace di kluster Kubernetes menggunakan
kubectl create namespace
perintah . Contoh berikut membuat namespace bernamadev
:kubectl create namespace dev
Dalam Kubernetes, Peran mendefinisikan izin yang akan diberikan, dan RoleBindings menerapkannya ke pengguna atau grup yang diinginkan. Penugasan ini dapat diterapkan ke namespace tertentu atau di seluruh kluster. Untuk informasi lebih lanjut, lihat Menggunakan otorisasi RBAC Kube.
Buat peran untuk namespace dev . Peran ini memberikan izin penuh ke namespace. Di lingkungan produksi, Anda mungkin ingin menentukan izin yang lebih terperinci untuk pengguna atau grup yang berbeda.
Buat file bernama role-dev-namespace.yaml dan salin/tempel manifes YAML berikut:
kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-full-access namespace: dev rules: - apiGroups: ["", "extensions", "apps"] resources: ["*"] verbs: ["*"] - apiGroups: ["batch"] resources: - jobs - cronjobs verbs: ["*"]
Buat peran menggunakan
kubectl apply
perintah , dan tentukan nama file manifes YAML Anda:kubectl apply -f role-dev-namespace.yaml
Dapatkan ID sumber daya untuk grup appdev menggunakan
az ad group show
perintah . Grup ini ditetapkan sebagai subjek RoleBinding di langkah berikutnya:az ad group show --group appdev --query objectId -o tsv
Perintah
az ad group show
mengembalikan nilai yang Anda gunakan sebagaigroupObjectId
:38E5FA30-XXXX-4895-9A00-050712E3673A
Buat file bernama rolebinding-dev-namespace.yaml, dan salin/tempel manifes YAML berikut. Anda menetapkan pengikatan peran yang memungkinkan grup appdev menggunakan
role-dev-namespace
peran untuk akses namespace. Pada baris terakhir, gantigroupObjectId
dengan ID objek grup yang dihasilkan oleh perintahaz ad group show
:kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: dev-user-access namespace: dev roleRef: apiGroup: rbac.authorization.k8s.io kind: Role name: dev-user-full-access subjects: - kind: Group namespace: dev name: groupObjectId
Tip
Jika Anda ingin membuat RoleBinding untuk satu pengguna, tentukan
kind: User
dan gantigroupObjectId
dengan nama prinsipal pengguna (UPN) dalam contoh.Buat RoleBinding menggunakan
kubectl apply
perintah dan tentukan nama file manifes YAML Anda:kubectl apply -f rolebinding-dev-namespace.yaml
rolebinding.rbac.authorization.k8s.io/dev-user-access created
Gunakan peran RBAC Kubernetes bawaan untuk sumber daya kluster AKS Anda
Kubernetes juga menyediakan peran bawaan yang menghadap pengguna. Peran bawaan meliputi:
- Peran pengguna super (kluster-admin)
- Peran yang dimaksudkan untuk diberikan di seluruh kluster menggunakan ClusterRoleBindings
- Peran yang dimaksudkan untuk diberikan dalam namespace tertentu menggunakan RoleBindings (admin, edit, tampilkan)
Untuk informasi selengkapnya tentang peran RBAC Kubernetes bawaan, lihat peran yang menghadap pengguna RBAC Kubernetes.
Peran yang menghadap pengguna
Default ClusterRole | Default ClusterRoleBinding | Deskripsi |
---|---|---|
cluster-admin | group system:masters | Memungkinkan akses pengguna super, untuk melakukan tindakan apa pun pada sumber daya apa pun. Ketika digunakan dalam ClusterRoleBinding, peran ini memberikan kontrol penuh atas setiap sumber daya di kluster dan di semua namespace layanan. Ketika Anda menggunakannya di RoleBinding, akses tersebut memberikan kontrol penuh atas setiap sumber daya di pengikatan peran namespace layanan, termasuk namespace layanan itu sendiri. |
admin | Tidak | Memungkinkan akses admin, dimaksudkan untuk diberikan dalam namespace menggunakan pengikatan peran. Jika digunakan dalam pengikatan peran, izinkan akses baca/tulis ke sebagian besar sumber daya di namespace, termasuk kemampuan untuk membuat peran dan pengikatan peran dalam namespace. Peran ini tidak mengizinkan akses write ke kuota sumber daya atau ke namespace itu sendiri. Peran ini juga tidak mengizinkan akses tulis ke titik akhir dalam kluster yang dibuat menggunakan Kubernetes v1.22+. Untuk informasi selengkapnya, lihat Menulis Akses untuk Titik Akhir. |
edit | Tidak | Mengizinkan akses read/write ke sebagian besar objek dalam sebuah namespace layanan. Peran ini tidak memungkinkan melihat atau memodifikasi peran atau pengikatan peran. Namun, peran ini memungkinkan akses rahasia dan menjalankan pod sebagai ServiceAccount apa pun di namespace layanan, sehingga dapat digunakan untuk mendapatkan tingkat akses API dari ServiceAccount apa pun di namespace layanan. Peran ini juga tidak mengizinkan akses tulis ke titik akhir dalam kluster yang dibuat menggunakan Kubernetes v1.22+. Untuk informasi selengkapnya, lihat Menulis Akses untuk Titik Akhir. |
view | Tidak | Mengizinkan akses baca-saja untuk melihat sebagian besar objek di namespace layanan. Hal ini tidak mengizinkan untuk menampilkan peran atau pengikatan peran. Peran ini tidak mengizinkan melihat rahasia, karena membaca konten rahasia memungkinkan akses ke kredensial ServiceAccount di namespace layanan, yang akan memungkinkan akses API sebagai ServiceAccount apa pun di namespace layanan (bentuk eskalasi hak istimewa). |
Gunakan peran RBAC Kubernetes bawaan dengan MICROSOFT Entra ID
Untuk menggunakan peran RBAC Kubernetes bawaan dengan MICROSOFT Entra ID, ikuti langkah-langkah berikut:
Terapkan peran RBAC Kubernetes bawaan
view
ke grup Microsoft Entra Anda:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
Terapkan peran RBAC Kubernetes bawaan
view
ke setiap pengguna Microsoft Entra Anda:kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
Bekerja dengan sumber daya kluster menggunakan identitas Microsoft Entra
Sekarang, uji izin yang diharapkan saat Anda membuat dan mengelola sumber daya di kluster Kubernetes. Dalam contoh ini, Anda menjadwalkan dan melihat Pod di namespace layanan yang ditetapkan pengguna. Kemudian, Anda mencoba menjadwalkan dan melihat pod di luar namespace yang ditetapkan.
Masuk ke Azure menggunakan
$AKSDEV_ID
akun pengguna yang Anda teruskan sebagai input keaz ad group member add
perintah . Jalankanaz connectedk8s proxy
perintah untuk membuka saluran ke kluster:az connectedk8s proxy --name "sample-aksarccluster" --resource-group "sample-rg"
Setelah saluran proksi dibuat, buka sesi lain, dan jadwalkan pod NGINX menggunakan
kubectl run
perintah di namespace layanan dev :kubectl run nginx-dev --image=mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine --namespace dev
Ketika NGINX berhasil dijadwalkan, Anda akan melihat output berikut:
pod/nginx-dev created
Sekarang, gunakan
kubectl get pods
perintah untuk melihat pod didev
namespace:kubectl get pods --namespace dev
Ketika NGINX berhasil berjalan, Anda akan melihat output berikut:
NAME READY STATUS RESTARTS AGE nginx-dev 1/1 Running 0 4m
Membuat dan melihat sumber daya kluster di luar namespace yang ditetapkan
Untuk mencoba melihat pod di luar namespace dev , gunakan kubectl get pods
perintah dengan --all-namespaces
bendera:
kubectl get pods --all-namespaces
Keanggotaan grup pengguna tidak memiliki peran Kubernetes yang memungkinkan tindakan ini. Tanpa izin, perintah menghasilkan kesalahan:
Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk