Bagikan melalui


Mengontrol akses menggunakan Microsoft Entra ID dan Kubernetes RBAC untuk Windows Server

Berlaku untuk: AKS di Azure Stack HCI 22H2, AKS di Windows Server

Azure Kubernetes Service (AKS) dapat dikonfigurasi 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 Arc. 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 memerlukan prasyarat berikut:

  • Kluster Kubernetes yang dibuat di AKS Arc. Jika Anda perlu menyiapkan kluster, lihat instruksi untuk menggunakan Pusat Admin Windows atau PowerShell untuk menyebarkan AKS.
  • Koneksi Azure Arc. Anda harus memiliki koneksi Azure Arc ke kluster Kubernetes Anda. Untuk informasi tentang mengaktifkan Azure Arc, lihat Menyambungkan Azure Kubernetes Service pada kluster Azure Stack HCI ke Kubernetes dengan dukungan Azure Arc.
  • Anda memerlukan akses ke alat baris perintah berikut:
    • Azure CLI dan ekstensi connectedk8s. Azure CLI adalah sekumpulan perintah yang digunakan untuk membuat dan mengelola sumber daya Azure. Untuk memeriksa apakah Anda memiliki Azure CLI, buka alat baris perintah, dan ketik: az -v. Selain itu, instal ekstensi connectedk8s untuk membuka saluran ke kluster Kubernetes Anda. Untuk petunjuk penginstalan, lihat Cara menginstal Azure CLI.
    • Kubectl. Alat baris perintah Kube ini memungkinkan Anda menjalankan perintah yang menargetkan kluster Kubernetes. Untuk memeriksa apakah Anda menginstal kubectl, buka prompt perintah dan ketik: kubectl version --client. Pastikan versi klien kubectl Anda setidaknya versi v1.24.0. Untuk petunjuk penginstalan, lihat kubectl.
    • PowerShell dan modul AksHci PowerShell. PowerShell adalah solusi otomatisasi tugas lintas platform yang terdiri dari shell baris perintah, bahasa pembuatan skrip, dan kerangka kerja manajemen konfigurasi. Jika Anda menginstal AKS Arc, Anda memiliki akses ke modul AksHci PowerShell.

Langkah pertama opsional

Jika Anda belum memiliki grup Microsoft Entra yang berisi anggota, Anda mungkin ingin membuat grup dan menambahkan beberapa anggota, sehingga Anda bisa 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. Dapatkan kredensial admin kluster menggunakan Get-AksHciCredential perintah :

    Get-AksHciCredential -name <name-of-your-cluster>
    
  2. Buat namespace layanan 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. Penetapan ini dapat diterapkan ke namespace layanan 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.

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

    kubectl apply -f role-dev-namespace.yaml
    
  5. 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
    

    az ad group show Perintah mengembalikan nilai yang Anda gunakan sebagai groupObjectId:

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  6. 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 sampel.

  7. 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 kubernetes RBAC yang menghadap pengguna.

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. Saat digunakan dalam ClusterRoleBinding, peran ini memberikan kontrol penuh atas setiap sumber daya dalam 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 ada Memungkinkan akses admin, dimaksudkan untuk diberikan dalam namespace menggunakan pengikatan peran. Jika digunakan dalam pengikatan peran, 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. 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 ada 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 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.
pemandangan Tidak ada Izinkan akses read-only untuk melihat sebagian besar objek di namespace layanan. Hal ini tidak mengizinkan untuk menampilkan peran atau pengikatan peran. Peran ini tidak memungkinkan 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).

Menggunakan peran RBAC Kubernetes bawaan dengan MICROSOFT Entra ID

Untuk menggunakan peran RBAC Kubernetes bawaan dengan ID Microsoft Entra, 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 ID 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 tentukan sebagai input ke az ad group member add perintah . Jalankan az connectedk8s proxy perintah untuk membuka saluran ke kluster:

    az connectedk8s proxy -n <cluster-name> -g <resource-group>
    
  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