Bagikan melalui


Menggunakan kontrol akses berbasis peran Azure untuk Otorisasi Kubernetes

Artikel ini membahas cara menggunakan Azure RBAC untuk Otorisasi Kubernetes, yang memungkinkan manajemen terpadu dan kontrol akses di seluruh sumber daya Azure, AKS, dan sumber daya Kubernetes. Untuk informasi selengkapnya, lihat Azure RBAC untuk Otorisasi Kubernetes.

Catatan

Saat menggunakan autentikasi terintegrasi antara MICROSOFT Entra ID dan AKS, Anda dapat menggunakan pengguna, grup, atau perwakilan layanan Microsoft Entra sebagai subjek dalam kontrol akses berbasis peran Kubernetes (Kubernetes RBAC). Dengan fitur ini, Anda tidak perlu mengelola identitas dan kredensial pengguna secara terpisah untuk Kubernetes. Namun, Anda masih perlu menyiapkan dan mengelola Azure RBAC dan Kubernetes RBAC secara terpisah.

Sebelum Anda mulai

  • Anda memerlukan Azure CLI versi 2.24.0 atau yang lebih baru yang diinstal dan dikonfigurasi. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
  • Anda memerlukan kubectl, dengan versi minimum 1.18.3.
  • Anda memerlukan integrasi Microsoft Entra terkelola yang diaktifkan pada kluster sebelum dapat menambahkan Azure RBAC untuk otorisasi Kubernetes. Jika Anda perlu mengaktifkan integrasi Microsoft Entra terkelola, lihat Menggunakan ID Microsoft Entra di AKS.
  • Jika Anda memiliki CRD dan membuat definisi peran kustom, satu-satunya cara untuk mencakup CRD saat ini adalah dengan menggunakan Microsoft.ContainerService/managedClusters/*/read. Untuk objek yang tersisa, Anda dapat menggunakan grup API tertentu, seperti Microsoft.ContainerService/apps/deployments/read.
  • Penetapan peran baru dapat memakan waktu hingga lima menit untuk disebarluaskan dan diperbarui oleh server otorisasi.
  • Azure RBAC untuk Otorisasi Kubernetes mengharuskan penyewa Microsoft Entra yang dikonfigurasi untuk autentikasi sama dengan penyewa untuk langganan yang menyimpan kluster AKS Anda.

Membuat kluster AKS baru dengan integrasi Microsoft Entra terkelola dan Azure RBAC untuk Otorisasi Kubernetes

  1. Buat grup sumber daya Azure menggunakan az group create perintah .

    export RESOURCE_GROUP=<resource-group-name>
    export LOCATION=<azure-region>
    
    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  2. Buat kluster AKS dengan integrasi Microsoft Entra terkelola dan Azure RBAC untuk Otorisasi Kubernetes menggunakan az aks create perintah .

    export CLUSTER_NAME=<cluster-name>
    
    az aks create \
        --resource-group $RESOURCE_GROUP \
        --name $CLUSTER_NAME \
        --enable-aad \
        --enable-azure-rbac \
        --generate-ssh-keys
    

    Output Anda akan terlihat mirip dengan contoh output berikut:

    "AADProfile": {
        "adminGroupObjectIds": null,
        "clientAppId": null,
        "enableAzureRbac": true,
        "managed": true,
        "serverAppId": null,
        "serverAppSecret": null,
        "tenantId": "****-****-****-****-****"
    }
    

Mengaktifkan Azure RBAC pada kluster AKS yang sudah ada

  • Aktifkan Azure RBAC untuk Otorisasi Kubernetes pada kluster AKS yang ada menggunakan az aks update perintah dengan --enable-azure-rbac bendera .

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --enable-azure-rbac
    

Menonaktifkan Azure RBAC untuk Otorisasi Kubernetes dari kluster AKS

  • Hapus Azure RBAC untuk Otorisasi Kubernetes dari kluster AKS yang ada menggunakan az aks update perintah dengan --disable-azure-rbac bendera .

    az aks update --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --disable-azure-rbac
    

Peran bawaan AKS

AKS menyediakan peran bawaan berikut:

Peran Deskripsi
Pembaca RBAC Azure Kubernetes Service 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 Secrets, 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).
Penulis RBAC Azure Kubernetes Service 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 ke Secrets dan menjalankan Pod sebagai ServiceAccount mana pun di namespace, sehingga dapat digunakan untuk mendapatkan level akses API dari ServiceAccount apa pun di namespace.
Admin RBAC Azure Kubernetes Service Mengizinkan akses admin, untuk di dalam namespace layanan. Mengizinkan akses read/write ke sebagian besar sumber daya di namespace layanan (atau cakupan klaster), 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 Kluster RBAC Azure Kubernetes Service Mengizinkan akses bagi pengguna-super untuk melakukan tindakan apa pun pada sumber daya apa pun. Memberikan kontrol penuh atas setiap sumber daya dalam klaster dan di semua namespace layanan.

Membuat penetapan peran untuk akses kluster

  1. Dapatkan ID sumber daya AKS Anda menggunakan az aks show perintah .

    AKS_ID=$(az aks show --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --query id --output tsv)
    
  2. Buat penetapan peran menggunakan az role assignment create perintah . <AAD-ENTITY-ID> dapat berupa nama pengguna atau ID klien dari perwakilan layanan. Contoh berikut membuat penetapan peran untuk peran Admin RBAC Azure Kubernetes Service.

    az role assignment create --role "Azure Kubernetes Service RBAC Admin" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

    Catatan

    Anda dapat membuat penetapan peran Azure Kubernetes Service RBAC Reader dan RBAC Writer Azure Kubernetes Service yang tercakup ke namespace tertentu dalam kluster menggunakan az role assignment create perintah dan mengatur cakupan ke namespace yang diinginkan.

    az role assignment create --role "Azure Kubernetes Service RBAC Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID/namespaces/<namespace-name>
    

Buat definisi peran kustom

Contoh definisi peran kustom berikut memungkinkan pengguna untuk hanya membaca penyebaran dan tidak ada yang lain. Untuk daftar lengkap kemungkinan tindakan, lihat operasi Microsoft.ContainerService.

  1. Untuk membuat definisi peran kustom Anda sendiri, salin file berikut, ganti <YOUR SUBSCRIPTION ID> dengan ID langganan Anda sendiri, lalu simpan sebagai deploy-view.json.

    {
        "Name": "AKS Deployment Reader",
        "Description": "Lets you view all deployments in cluster/namespace.",
        "Actions": [],
        "NotActions": [],
        "DataActions": [
            "Microsoft.ContainerService/managedClusters/apps/deployments/read"
        ],
        "NotDataActions": [],
        "assignableScopes": [
            "/subscriptions/<YOUR SUBSCRIPTION ID>"
        ]
    }
    
  2. Buat definisi peran menggunakan az role definition create perintah , atur --role-definition ke file yang deploy-view.json Anda buat di langkah sebelumnya.

    az role definition create --role-definition @deploy-view.json 
    
  3. Tetapkan definisi peran ke pengguna atau identitas lain menggunakan az role assignment create perintah .

    az role assignment create --role "AKS Deployment Reader" --assignee <AAD-ENTITY-ID> --scope $AKS_ID
    

Gunakan Azure RBAC untuk Otorisasi Kubernetes dengan kubectl

  1. Pastikan Anda memiliki peran bawaan Pengguna Kluster Azure Kubernetes Service, lalu dapatkan kubeconfig kluster AKS Anda menggunakan az aks get-credentials perintah .

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
    
  2. Anda sekarang dapat menggunakan kubectl untuk mengelola kluster Anda. Misalnya, Anda dapat mencantumkan simpul di kluster Anda menggunakan kubectl get nodes.

    kubectl get nodes
    

    Contoh output:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

Gunakan Azure RBAC untuk Otorisasi Kubernetes dengan kubelogin

AKS membuat kubelogin plugin untuk membantu membuka blokir skenario seperti login non-interaktif, versi yang lebih kubectl lama, atau memanfaatkan SSO di beberapa kluster tanpa perlu masuk ke kluster baru.

  1. kubelogin Gunakan plugin dengan menjalankan perintah berikut:

    export KUBECONFIG=/path/to/kubeconfig
    kubelogin convert-kubeconfig
    
  2. Anda sekarang dapat menggunakan kubectl untuk mengelola kluster Anda. Misalnya, Anda dapat mencantumkan simpul di kluster Anda menggunakan kubectl get nodes.

    kubectl get nodes
    

    Contoh output:

    NAME                                STATUS   ROLES   AGE    VERSION
    aks-nodepool1-93451573-vmss000000   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000001   Ready    agent   3h6m   v1.15.11
    aks-nodepool1-93451573-vmss000002   Ready    agent   3h6m   v1.15.11
    

Membersihkan sumber daya

Menghapus penetapan peran

  1. Mencantumkan az role assignment list penetapan peran menggunakan perintah .

    az role assignment list --scope $AKS_ID --query [].id --output tsv
    
  2. Hapus penetapan peran menggunakan az role assignment delete perintah .

    az role assignment delete --ids <LIST OF ASSIGNMENT IDS>
    

Menghapus definisi peran

  • Hapus definisi peran kustom menggunakan az role definition delete perintah .

    az role definition delete --name "AKS Deployment Reader"
    

Menghapus grup sumber daya dan kluster AKS

  • Hapus grup sumber daya dan kluster AKS menggunakan az group delete perintah .

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

Langkah berikutnya

Untuk mempelajari selengkapnya tentang autentikasi AKS, otorisasi, RBAC Kubernetes, dan Azure RBAC, lihat: