Menggunakan Azure RBAC pada kluster Kubernetes dengan dukungan Azure Arc
Jenis objek Kube ClusterRoleBinding dan RoleBinding membantu menentukan otorisasi pada Kube secara asli. Dengan menggunakan fitur ini, Anda dapat menggunakan ID Microsoft Entra dan penetapan peran di Azure untuk mengontrol pemeriksaan otorisasi pada kluster. Penetapan peran Azure memungkinkan Anda mengontrol secara terperinci pengguna mana yang dapat membaca, menulis, dan menghapus objek Kubernetes seperti penyebaran, pod, dan layanan.
Untuk gambaran umum konseptual fitur ini, lihat Azure RBAC di Kubernetes dengan dukungan Azure Arc.
Prasyarat
Instal atau tingkatkan Azure CLI ke versi terbaru.
Instal versi
connectedk8s
terbaru ekstensi Azure CLI:az extension add --name connectedk8s
Jika ekstensi
connectedk8s
sudah dipasang, Anda dapat memperbaruinya ke versi terbaru dengan menggunakan perintah berikut:az extension update --name connectedk8s
Menyambungkan kluster Kubernetes berbasis Azure Arc yang telah ada:
- Jika Anda belum menyambungkan kluster, harap gunakan mulai cepat kami.
- Tingkatkan agen Anda ke versi terbaru.
Catatan
Azure RBAC tidak tersedia untuk Red Hat OpenShift atau penawaran Kubernetes terkelola di mana akses pengguna ke server API dibatasi (misalnya: Amazon Elastic Kubernetes Service (EKS), Google Kubernetes Engine (GKE)).
Azure RBAC saat ini tidak mendukung kluster Kubernetes yang beroperasi pada arsitektur ARM64. Silakan gunakan RBAC Kubernetes untuk mengelola kontrol akses untuk kluster Kubernetes berbasis ARM64.
Untuk kluster Azure Kubernetes Service (AKS), fitur ini tersedia secara asli dan tidak memerlukan kluster AKS untuk terhubung ke Azure Arc.
Untuk kluster Azure Kubernetes Service (AKS) yang diaktifkan oleh Azure Arc di Azure Stack HCI 23H2, mengaktifkan Azure RBAC saat ini hanya didukung selama pembuatan kluster Kubernetes. Untuk membuat kluster AKS yang diaktifkan oleh Azure Arc dengan Azure RBAC diaktifkan, ikuti panduan Otorisasi Gunakan Azure RBAC for Kubernetes. Perhatikan bahwa Azure RBAC tidak didukung untuk Azure Stack HCI, versi 22H2.
Mengaktifkan Azure RBAC pada kluster
Dapatkan identitas MSI kluster dengan menjalankan perintah berikut:
az connectedk8s show -g <resource-group> -n <connected-cluster-name>
Dapatkan ID (
identity.principalId
) dari output dan jalankan perintah berikut untuk menetapkan peran Connected Cluster Managed Identity CheckAccess Reader ke kluster MSI:az role assignment create --role "Connected Cluster Managed Identity CheckAccess Reader" --assignee "<Cluster MSI ID>" --scope <cluster ARM ID>
Aktifkan kontrol akses berbasis peran Azure (RBAC) pada kluster Kubernetes dengan dukungan Azure Arc dengan menjalankan perintah berikut:
az connectedk8s enable-features -n <clusterName> -g <resourceGroupName> --features azure-rbac
Catatan
Sebelum Menjalankan perintah sebelumnya, pastikan bahwa file
kubeconfig
pada mesin menunjuk ke kluster tempat Anda mengaktifkan fitur Azure RBAC.Gunakan
--skip-azure-rbac-list
dengan perintah sebelumnya untuk daftar nama pengguna, email, dan koneksi OpenID yang dipisahkan koma yang menjalani pemeriksaan otorisasi dengan menggunakan KubeClusterRoleBinding
asli dan objekRoleBinding
, bukan Azure RBAC.
Kluster generik di mana tidak ada reconciler yang berjalan pada apiserver
spesifikasi
SSH ke dalam setiap simpul master kluster dan ambil langkah-langkah berikut:
Jika Anda
kube-apiserver
adalah pod statis:Rahasia
azure-arc-guard-manifests
dikube-system
namespace berisi dua file:guard-authn-webhook.yaml
danguard-authz-webhook.yaml
. Salin file-file ini ke/etc/guard
direktori simpul.sudo mkdir -p /etc/guard kubectl get secrets azure-arc-guard-manifests -n kube-system -o json | jq -r '.data."guard-authn-webhook.yaml"' | base64 -d > /etc/guard/guard-authn-webhook.yaml kubectl get secrets azure-arc-guard-manifests -n kube-system -o json | jq -r '.data."guard-authz-webhook.yaml"' | base64 -d > /etc/guard/guard-authz-webhook.yaml
Buka manifes
apiserver
di mode edit:sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
Tambahkan spesifikasi berikut di bawah
volumes
:- hostPath path: /etc/guard type: Directory name: azure-rbac
Tambahkan spesifikasi berikut di bawah
volumeMounts
:- mountPath: /etc/guard name: azure-rbac readOnly: true
Jika Anda
kube-apiserver
bukan pod statis:Buka manifes
apiserver
di mode edit:sudo vi /etc/kubernetes/manifests/kube-apiserver.yaml
Tambahkan spesifikasi berikut di bawah
volumes
:- name: azure-rbac secret: secretName: azure-arc-guard-manifests
Tambahkan spesifikasi berikut di bawah
volumeMounts
:- mountPath: /etc/guard name: azure-rbac readOnly: true
Tambahkan argumen
apiserver
berikut:- --authentication-token-webhook-config-file=/etc/guard/guard-authn-webhook.yaml - --authentication-token-webhook-cache-ttl=5m0s - --authorization-webhook-cache-authorized-ttl=5m0s - --authorization-webhook-config-file=/etc/guard/guard-authz-webhook.yaml - --authorization-webhook-version=v1 - --authorization-mode=Node,RBAC,Webhook
Jika kluster Kube adalah versi 1.19.0 atau yang lebih baru, kamu juga harus mengatur argumen
apiserver
berikut:- --authentication-token-webhook-version=v1
Simpan dan tutup editor untuk memperbarui pod
apiserver
.
Kluster yang dibuat dengan menggunakan Kluster API
Salin rahasia penjaga yang berisi autentikasi dan otorisasi file konfigurasi webhook dari kluster beban kerja ke mesin Anda:
kubectl get secret azure-arc-guard-manifests -n kube-system -o yaml > azure-arc-guard-manifests.yaml
Ubah bidang
namespace
dalam file azure-arc-guard-manifests.yaml ke namespace layanan dalam kluster manajemen tempat Anda menerapkan sumber daya kustom untuk pembuatan kluster beban kerja.Terapkan manifes ini:
kubectl apply -f azure-arc-guard-manifests.yaml
Edit objek
KubeadmControlPlane
dengan menjalankankubectl edit kcp <clustername>-control-plane
:Tambahkan cuplikan berikut di bawah
files
:- contentFrom: secret: key: guard-authn-webhook.yaml name: azure-arc-guard-manifests owner: root:root path: /etc/kubernetes/guard-authn-webhook.yaml permissions: "0644" - contentFrom: secret: key: guard-authz-webhook.yaml name: azure-arc-guard-manifests owner: root:root path: /etc/kubernetes/guard-authz-webhook.yaml permissions: "0644"
Tambahkan cuplikan berikut di bawah
apiServer
>extraVolumes
:- hostPath: /etc/kubernetes/guard-authn-webhook.yaml mountPath: /etc/guard/guard-authn-webhook.yaml name: guard-authn readOnly: true - hostPath: /etc/kubernetes/guard-authz-webhook.yaml mountPath: /etc/guard/guard-authz-webhook.yaml name: guard-authz readOnly: true
Tambahkan cuplikan berikut di bawah
apiServer
>extraArgs
:authentication-token-webhook-cache-ttl: 5m0s authentication-token-webhook-config-file: /etc/guard/guard-authn-webhook.yaml authentication-token-webhook-version: v1 authorization-mode: Node,RBAC,Webhook authorization-webhook-cache-authorized-ttl: 5m0s authorization-webhook-config-file: /etc/guard/guard-authz-webhook.yaml authorization-webhook-version: v1
Simpan dan tutup untuk memperbarui objek
KubeadmControlPlane
. Tunggu hingga perubahan ini muncul pada kluster beban kerja.
Membuat penetapan peran bagi pengguna untuk mengakses kluster
Pemilik sumber daya Kubernetes dengan dukungan Azure Arc dapat menggunakan peran bawaan atau peran kustom untuk memberi pengguna lain akses ke kluster Kubernetes.
Peran bawaan
Peran | Deskripsi |
---|---|
Penampil Kubernetes Azure Arc | Mengizinkan akses baca-saja untuk melihat sebagian besar objek di namespace layanan. Peran ini tidak mengizinkan melihat rahasia, karena read izin pada rahasia akan memungkinkan akses ke ServiceAccount kredensial di namespace. Info masuk ini pada gilirannya akan memungkinkan akses API melalui nilai ServiceAccount tersebut (bentuk eskalasi hak istimewa). |
Penulis Azure Arc Kubernetes | 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 mengakses rahasia dan menjalankan pod sebagai nilai apa pun ServiceAccount di namespace layanan, sehingga dapat digunakan untuk mendapatkan tingkat akses API dari nilai apa pun ServiceAccount di namespace layanan. |
Azure Arc Kubernetes Admin | Mengizinkan akses admin. Ini dimaksudkan untuk diberikan dalam namespace layanan melalui RoleBinding . Jika Anda menggunakannya di RoleBinding , ini memungkinkan akses baca/tulis ke sebagian besar sumber daya di namespace layanan, termasuk kemampuan untuk membuat peran dan pengikatan peran dalam namespace layanan. Peran ini tidak mengizinkan akses write ke kuota sumber daya atau ke namespace itu sendiri. |
Admin Klaster Azure Arc Kubernetes | Mengizinkan akses bagi superuser untuk melakukan tindakan apa pun pada sumber daya apa pun. Ketika Anda menggunakannya di ClusterRoleBinding , itu memberikan kontrol penuh atas setiap sumber daya di kluster dan di semua namespace layanan. Ketika Anda menggunakannya di RoleBinding , itu memberikan kontrol penuh atas setiap sumber daya di pengikatan peran namespace layanan, termasuk namespace layanan itu sendiri. |
Anda dapat membuat penetapan peran yang tercakup ke kluster Kubernetes dengan dukungan Azure Arc di portal Azure pada panel Access Control (IAM) sumber daya kluster. Anda juga bisa menggunakan perintah Azure CLI berikut:
az role assignment create --role "Azure Arc Kubernetes Cluster Admin" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID
Dalam perintah tersebut, AZURE-AD-ENTITY-ID
dapat berupa nama pengguna (misalnya,testuser@mytenant.onmicrosoft.com
) atau bahkan nilai appId
perwakilan layanan.
Berikut adalah contoh lain dalam membuat penetapan peran yang tercakup ke namespace layanan tertentu dalam kluster:
az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID/namespaces/<namespace-name>
Catatan
Anda dapat membuat penetapan peran yang dilingkup ke kluster dengan menggunakan portal Azure atau Azure CLI. Namun, hanya Azure CLI yang dapat digunakan untuk membuat penetapan peran yang dilingkup ke namespace.
Peran kustom
Anda dapat memilih untuk membuat definisi peran Anda sendiri untuk digunakan dalam penetapan peran.
Di bawah ini adalah contoh definisi peran yang memungkinkan pengguna untuk hanya membaca penyebaran. Untuk informasi selengkapnya, lihat daftar lengkap tindakan data yang dapat Anda gunakan untuk membuat definisi peran.
Salin objek JSON berikut ke dalam file yang disebut custom-role.json. Ganti tempat penampung <subscription-id>
dengan ID langganan aktual. Peran kustom menggunakan salah satu tindakan data dan memungkinkan Anda melihat semua penyebaran dalam cakupan (kluster atau namespace layanan) tempat penetapan peran dibuat.
{
"Name": "Arc Deployment Viewer",
"Description": "Lets you view all deployments in cluster/namespace.",
"Actions": [],
"NotActions": [],
"DataActions": [
"Microsoft.Kubernetes/connectedClusters/apps/deployments/read"
],
"NotDataActions": [],
"assignableScopes": [
"/subscriptions/<subscription-id>"
]
}
Membuat definisi peran dengan menjalankan perintah berikut ini dari folder tempat Anda menyimpan custom-role.json:
az role definition create --role-definition @custom-role.json
Membuat penetapan peran dengan menggunakan definisi peran kustom ini:
az role assignment create --role "Arc Deployment Viewer" --assignee <AZURE-AD-ENTITY-ID> --scope $ARM_ID/namespaces/<namespace-name>
Mengonfigurasi kubectl dengan info masuk pengguna
Ada dua cara untuk mendapatkan file kubeconfig yang kamu butuhkan untuk mengakses kluster:
- Anda menggunakan fitur Cluster Connect (
az connectedk8s proxy
) dari kluster Kubernetes dengan dukungan Azure Arc. - Admin kluster berbagi file kubeconfig dengan setiap pengguna lainnya.
Menggunakan koneksi kluster
Jalankan perintah berikut untuk memulai proses proksi:
az connectedk8s proxy -n <clusterName> -g <resourceGroupName>
Setelah proses proksi berjalan, Anda dapat membuka tab lain di konsol untuk mulai mengirim permintaan Anda ke kluster.
Menggunakan file kubeconfig bersama
Menggunakan kubeconfig bersama memerlukan langkah-langkah yang sedikit berbeda tergantung pada versi Kubernetes Anda.
Jalankan perintah berikut untuk mengatur kredensial untuk pengguna. Tentukan
serverApplicationId
sebagai6256c85f-0aad-4d50-b960-e6e9b21efe35
danclientApplicationId
sebagai3f4439ff-e698-4d6d-84fe-09c9d574f06b
:kubectl config set-credentials <testuser>@<mytenant.onmicrosoft.com> \ --auth-provider=azure \ --auth-provider-arg=environment=AzurePublicCloud \ --auth-provider-arg=client-id=<clientApplicationId> \ --auth-provider-arg=tenant-id=<tenantId> \ --auth-provider-arg=apiserver-id=<serverApplicationId>
Buka file kubeconfig yang kamu buat sebelumnya. Di bawah
contexts
, verifikasi bahwa konteks yang terkait dengan titik kluster ke info masuk pengguna yang Anda buat di langkah sebelumnya. Untuk mengatur konteks saat ini ke kredensial pengguna ini, jalankan perintah berikut:kubectl config set-context --current=true --user=<testuser>@<mytenant.onmicrosoft.com>
Tambahkan pengaturan mode konfigurasi di bawah
user
>config
:name: testuser@mytenant.onmicrosoft.com user: auth-provider: config: apiserver-id: $SERVER_APP_ID client-id: $CLIENT_APP_ID environment: AzurePublicCloud tenant-id: $TENANT_ID config-mode: "1" name: azure
Catatan
Plugin Exec adalah strategi autentikasi Kubernetes yang memungkinkan
kubectl
untuk menjalankan perintah eksternal untuk menerima kredensial pengguna untuk dikirim keapiserver
. Dimulai dengan Kubernetes versi 1.26, plugin otorisasi Azure default tidak lagi disertakan dalamclient-go
dankubectl
. Dengan versi yang lebih baru, untuk menggunakan plugin exec untuk menerima kredensial pengguna, Anda harus menggunakan Azure Kubelogin,client-go
plugin kredensial (exec) yang mengimplementasikan autentikasi Azure.Instal Azure Kubelogin:
Untuk Windows atau Mac, ikuti instruksi penginstalan Azure Kubelogin.
Untuk Linux atau Ubuntu, unduh versi terbaru kubelogin, lalu jalankan perintah berikut:
curl -LO https://github.com/Azure/kubelogin/releases/download/"$KUBELOGIN_VERSION"/kubelogin-linux-amd64.zip unzip kubelogin-linux-amd64.zip sudo mv bin/linux_amd64/kubelogin /usr/local/bin/ sudo chmod +x /usr/local/bin/kubelogin
Kubelogin dapat digunakan untuk mengautentikasi dengan kluster dengan dukungan Azure Arc dengan meminta token proof-of-possession (PoP). Konversikan kubeconfig menggunakan kubelogin untuk menggunakan mode masuk yang sesuai. Misalnya, untuk login kode perangkat dengan pengguna Microsoft Entra, perintahnya adalah sebagai berikut:
export KUBECONFIG=/path/to/kubeconfig kubelogin convert-kubeconfig --pop-enabled --pop-claims 'u=<ARM ID of cluster>"
Mengirim permintaan ke kluster
Jalankan perintah
kubectl
apa pun. Contohnya:kubectl get nodes
kubectl get pods
Setelah diminta untuk autentikasi berbasis browser, salin URL masuk perangkat (
https://microsoft.com/devicelogin
) dan buka di browser web Anda.Masukkan kode yang dicetak di konsol Anda. Salin dan tempel kode di terminal Anda ke dalam permintaan untuk input autentikasi perangkat.
Masukkan nama pengguna (
testuser@mytenant.onmicrosoft.com
) dan kata sandi terkait.Jika Anda melihat pesan kesalahan seperti ini, artinya Anda tidak berwenang untuk mengakses sumber daya yang diminta:
Error from server (Forbidden): nodes is forbidden: User "testuser@mytenant.onmicrosoft.com" cannot list resource "nodes" in API group "" at the cluster scope: User doesn't have access to the resource in Azure. Update role assignment to allow access.
Admin perlu membuat penetapan peran baru yang memberi wewenang kepada pengguna ini untuk memiliki akses pada sumber daya.
Menggunakan Akses Bersyarah dengan ID Microsoft Entra
Saat mengintegrasikan MICROSOFT Entra ID dengan kluster Kubernetes dengan dukungan Azure Arc, Anda juga dapat menggunakan Akses Bersyarat untuk mengontrol akses ke kluster Anda.
Catatan
Microsoft Entra Conditional Access adalah kemampuan Microsoft Entra ID P2.
Untuk membuat contoh kebijakan Akses Bersyar untuk digunakan dengan kluster:
Di bagian atas portal Azure, cari dan pilih ID Microsoft Entra.
Pada menu untuk ID Microsoft Entra di sisi kiri, pilih Aplikasi perusahaan.
Pada menu aplikasi perusahaan di sisi kiri, pilih Akses Bersyarat.
Pada menu Akses Bersyarat di sisi kiri, pilih Kebijakan>Kebijakan baru.
Masukkan nama untuk kebijakan, seperti arc-k8s-policy.
Pilih Pengguna dan grup. Di bawah Sertakan, pilih Pilih pengguna dan grup. Pilih pengguna dan grup tempat Anda ingin menerapkan kebijakan. Untuk contoh ini, pilih grup Microsoft Entra yang sama yang memiliki akses administratif ke kluster Anda.
Pilih Aplikasi atau tindakan cloud. Di bawah Sertakan, pilih Pilih aplikasi. Kemudian cari dan pilih aplikasi server yang Anda buat sebelumnya.
Di bawah Kontrol akses, pilih Beri. Pilih Berikan akses>Perangkat wajib ditandai sebagai sesuai.
Di bawah Aktifkan kebijakan, pilih Aktif>Buat.
Akses kluster lagi. Sebagai contoh, jalankan perintah kubectl get nodes
untuk melihat simpul dalam kluster:
kubectl get nodes
Ikuti instruksi untuk sign-in lagi. Pesan kesalahan menyatakan bahwa Anda berhasil masuk, tetapi admin Anda memerlukan perangkat yang meminta akses untuk dikelola oleh ID Microsoft Entra untuk mengakses sumber daya. Ikuti langkah-langkah ini:
Di portal Azure, buka ID Microsoft Entra.
Pilih Aplikasi perusahaan. Lalu di bawah Aktivitas, pilih Masuk.
Entri di bagian atas menunjukkan Gagal untuk Status dan Berhasil untuk Akses Bersyarat. Pilih entri, lalu pilih Akses Bersyarat di Detail. Perhatikan bahwa kebijakan Akses Bersyarat Anda terdaftar.
Mengonfigurasi akses kluster just-in-time dengan ID Microsoft Entra
Opsi lain untuk kontrol akses kluster adalah menggunakan Privileged Identity Management (PIM) untuk permintaan just-in-time.
Catatan
Microsoft Entra PIM adalah kemampuan Microsoft Entra ID P2. Untuk informasi selengkapnya tentang SKU MICROSOFT Entra ID, lihat panduan harga.
Untuk mengonfigurasi permintaan akses just-in-time untuk kluster Anda, selesaikan langkah-langkah berikut:
Di bagian atas portal Azure, cari dan pilih ID Microsoft Entra.
Catat ID penyewa. Untuk sisa instruksi ini, kami akan menunjukkan ID itu sebagai
<tenant-id>
.Pada menu untuk ID Microsoft Entra di sisi kiri, di bawah Kelola, pilih Grup>Grup Baru.
Pastikan bahwa Keamanan dipilih untuk Tipe grup. Masukkan nama grup, seperti myJITGroup. Di bawah Peran Microsoft Entra dapat ditetapkan ke grup ini (Pratinjau), pilih Ya. Terakhir, pilih Buat.
Anda akan dikembalikan ke halaman Grup. Pilih grup yang baru Anda buat dan catat ID objeknya. Untuk sisa instruksi ini, kami akan menunjuk ID ini sebagai
<object-id>
.Di portal Microsoft Azure, di menu untuk Aktivitas di sisi kiri, pilih Akses Istimewa (Pratinjau). Lalu pilih Aktifkan Akses Istimewa.
Pilih Tambahkan Penugasan untuk mulai memberikan akses.
Pilih peran Anggota, dan pilih pengguna serta grup yang ingin Anda beri akses kluster. Admin grup dapat mengubah penugasan ini kapan saja. Saat Anda siap untuk melanjutkan, pilih Berikutnya.
Pilih jenis penugasan Aktif, durasi yang diinginkan, dan menyediakan justifikasi. Saat Anda siap untuk melanjutkan, pilih Tetapkan. Untuk informasi selengkapnya tentang tipe tugas, lihat Menetapkan kelayakan untuk grup akses istimewa (pratinjau) dalam Privileged Identity Management.
Setelah Anda membuat penugasan, verifikasi bahwa akses just-in-time berfungsi dengan mengakses kluster. Sebagai contoh, Gunakan perintah kubectl get nodes
untuk melihat simpul dalam kluster:
kubectl get nodes
Perhatikan persyaratan autentikasi dan ikuti langkah-langkah untuk mengautentikasi. Jika autentikasi berhasil, Anda akan melihat output yang mirip dengan ini:
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
NAME STATUS ROLES AGE VERSION
node-1 Ready agent 6m36s v1.18.14
node-2 Ready agent 6m42s v1.18.14
node-3 Ready agent 6m33s v1.18.14
Langkah berikutnya
- Sambungkan ke kluster dengan aman menggunakan Cluster Connect.
- Baca tentang arsitektur Azure RBAC di Kubernetes dengan dukungan Arc.