Bagikan melalui


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 dan connectedk8s :

    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 setidaknya v1.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.

  1. az aksarc get-credentials Gunakan perintah untuk mendapatkan kredensial admin kluster:

    az aksarc get-credentials --name "sample-aksarccluster" --resource-group "sample-rg" --admin
    
  2. Buat namespace di kluster Kubernetes menggunakan kubectl create namespace perintah . Contoh berikut membuat namespace bernama dev:

    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.

  1. 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: ["*"]
    
  2. Buat peran menggunakan kubectl apply perintah , dan tentukan nama file manifes YAML Anda:

    kubectl apply -f role-dev-namespace.yaml
    
  3. 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 sebagai groupObjectId:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  4. 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, ganti groupObjectId dengan ID objek grup yang dihasilkan oleh perintah az 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 ganti groupObjectId dengan nama prinsipal pengguna (UPN) dalam contoh.

  5. 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:

  1. 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>
    
  2. 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.

  1. Masuk ke Azure menggunakan $AKSDEV_ID akun pengguna yang Anda teruskan sebagai input ke az ad group member add perintah . Jalankan az connectedk8s proxy perintah untuk membuka saluran ke kluster:

    az connectedk8s proxy --name "sample-aksarccluster" --resource-group "sample-rg"
    
  2. 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
    
  3. Sekarang, gunakan kubectl get pods perintah untuk melihat pod di dev 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