Bagikan melalui


Perwakilan layanan dengan Azure Kubernetes Services (AKS)

Kluster AKS memerlukan perwakilan layanan Microsoft Entra atau identitas terkelola untuk membuat dan mengelola sumber daya Azure lainnya secara dinamis, seperti Azure Load Balancer atau Azure Container Registry (ACR).

Untuk keamanan dan kemudahan penggunaan yang optimal, Microsoft merekomendasikan penggunaan identitas terkelola daripada perwakilan layanan untuk mengotorisasi akses dari kluster AKS ke sumber daya lain di Azure. Identitas terkelola adalah jenis perwakilan layanan khusus yang dapat digunakan untuk mendapatkan kredensial Microsoft Entra tanpa perlu mengelola dan mengamankan kredensial. Untuk informasi selengkapnya tentang menggunakan identitas terkelola dengan kluster Anda, lihat Menggunakan identitas terkelola di AKS.

Artikel ini menunjukkan kepada Anda cara membuat dan menggunakan perwakilan layanan dengan kluster AKS Anda.

Sebelum Anda mulai

Untuk membuat perwakilan layanan Microsoft Entra, Anda harus memiliki izin untuk mendaftarkan aplikasi dengan penyewa Microsoft Entra Anda dan untuk menetapkan aplikasi ke peran dalam langganan Anda. Jika Anda tidak memiliki izin yang diperlukan, Anda perlu meminta ID Microsoft Entra atau administrator langganan untuk menetapkan izin yang diperlukan atau membuat perwakilan layanan untuk digunakan dengan kluster AKS Anda.

Jika Anda menggunakan perwakilan layanan dari penyewa Microsoft Entra yang berbeda, ada pertimbangan lain sekeliling izin yang tersedia saat Anda menyebarkan kluster. Anda mungkin tidak memiliki izin yang tepat untuk membaca dan menulis informasi direktori. Untuk informasi selengkapnya, lihat Apa saja izin pengguna default di ID Microsoft Entra?

Prasyarat

  • Jika menggunakan Azure CLI, Anda memerlukan Azure CLI versi 2.0.59 atau yang lebih baru. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
  • Jika menggunakan Azure PowerShell, Anda memerlukan Azure PowerShell versi 5.0.0 atau yang lebih baru. Jalankan Get-InstalledModule -Name Az untuk menemukan versinya. Jika Anda perlu memasang atau melakukan peningkatan, lihat Modul pemasangan Azure Az PowerShell.

Membuat perwakilan layanan

Buat perwakilan layanan sebelum Anda membuat kluster.

  1. Buat perwakilan layanan menggunakan az ad sp create-for-rbac perintah .

    az ad sp create-for-rbac --name myAKSClusterServicePrincipal
    

    Output Anda harus mirip dengan contoh output berikut:

    {
      "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "displayName": "myAKSClusterServicePrincipal",
      "name": "http://myAKSClusterServicePrincipal",
      "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
      "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
    }
    
  2. Salin nilai untuk appId dan password dari output. Anda menggunakan ini saat membuat kluster AKS di bagian berikutnya.

Tentukan pokok layanan untuk kluster AKS

  • Gunakan perwakilan layanan yang ada untuk kluster AKS baru menggunakan az aks create perintah dan gunakan --service-principal parameter dan --client-secret untuk menentukan appId dan password dari output yang Anda terima di bagian sebelumnya.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --service-principal <appId> \
        --client-secret <password> \
        --generate-ssh-keys
    

    Catatan

    Jika Anda menggunakan perwakilan layanan yang ada dengan rahasia yang disesuaikan, pastikan rahasia tidak lebih dari 190 byte.

Mendelegasikan akses ke sumber daya Azure lainnya

Anda dapat menggunakan perwakilan layanan untuk kluster AKS untuk mengakses sumber daya lain. Misalnya, jika Anda ingin menyebarkan kluster AKS ke subnet jaringan virtual Azure yang ada, sambungkan ke Azure Container Registry (ACR), atau kunci akses atau rahasia di brankas kunci dari kluster Anda, maka Anda perlu mendelegasikan akses ke sumber daya tersebut ke perwakilan layanan. Untuk mendelegasikan akses, tetapkan peran kontrol akses berbasis peran Azure (Azure RBAC) ke perwakilan layanan.

Penting

Izin yang diberikan kepada perwakilan layanan yang terkait dengan kluster mungkin memakan waktu hingga 60 menit untuk disebarluaskan.

  • Buat penetapan peran menggunakan az role assignment create perintah . Berikan nilai appID perwakilan layanan untuk appId parameter . Tentukan cakupan untuk penetapan peran, seperti grup sumber daya atau sumber daya jaringan virtual. Penetapan peran menentukan izin apa yang dimiliki perwakilan layanan pada sumber daya dan pada cakupan apa.

    Misalnya, untuk menetapkan izin perwakilan layanan untuk mengakses rahasia di brankas kunci, Anda dapat menggunakan perintah berikut:

    az role assignment create \
        --assignee <appId> \
        --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" \
        --role "Key Vault Secrets User"
    

    Catatan

    --scope untuk sumber daya harus berupa ID sumber daya lengkap, seperti /subscriptions/<guid>/resourceGroups/myResourceGroup atau /subscriptions/<guid>/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.

Bagian berikut merinci delegasi umum yang mungkin perlu Anda tetapkan ke perwakilan layanan.

Azure Container Registry

Jika Anda menggunakan Azure Container Registry (ACR) sebagai penyimpanan gambar kontainer, Anda perlu memberikan izin kepada perwakilan layanan untuk kluster AKS Anda untuk membaca dan menarik gambar. Sebaiknya gunakan az aks create perintah atau az aks update untuk berintegrasi dengan registri dan tetapkan peran yang sesuai untuk perwakilan layanan. Untuk langkah terperinci, lihat Mengautentikasi dengan Azure Container Registry dari Azure Kubernetes Service.

Jaringan

Anda dapat menggunakan jaringan tingkat lanjut di mana jaringan virtual dan subnet atau alamat IP publik berada di grup sumber daya lain. Tetapkan peran bawaan Kontributor Jaringan pada subnet dalam jaringan virtual. Sebagai alternatif, Anda dapat membuat peran kustom dengan izin untuk mengakses sumber daya jaringan dalam grup sumber daya tersebut. Untuk informasi selengkapnya, lihat izin layanan AKS.

Penyimpanan

Jika Anda perlu mengakses sumber daya disk yang ada di grup sumber daya lain, tetapkan salah satu kumpulan izin peran berikut:

  • Buat peran kustom dan tentukan izin peran Microsoft.Compute/disks/read dan Microsoft.Compute/disks/write , atau
  • Tetapkan peran bawaan Kontributor Komputer Virtual pada grup sumber daya.

Azure Container Instances

Jika Anda menggunakan Kubelet Virtual untuk berintegrasi dengan AKS dan memilih untuk menjalankan Azure Container Instances (ACI) dalam grup sumber daya yang terpisah dari kluster AKS, perwakilan layanan AKS harus diberi izin Kontributor pada grup sumber daya ACI.

Pertimbangan lain

Saat menggunakan AKS dan perwakilan layanan Microsoft Entra, pertimbangkan hal berikut:

  • Perwakilan layanan untuk Kubernetes adalah bagian dari konfigurasi kluster, tetapi jangan gunakan identitas ini untuk menyebarkan kluster.
  • Secara default, mandat perwakilan layanan berlaku selama satu tahun. Anda dapat kapan saja memperbarui atau memutar mandat perwakilan layanan.
  • Setiap perwakilan layanan dikaitkan dengan aplikasi Microsoft Entra. Anda dapat mengaitkan perwakilan layanan untuk kluster Kubernetes dengan nama aplikasi Microsoft Entra yang valid (misalnya: https://www.contoso.org/example). URL untuk aplikasi tidak harus berupa titik akhir yang sebenarnya.
  • Saat Anda menentukan ID Klien perwakilan layanan, gunakan nilai appId.
  • Pada VM simpul agen di kluster Kubernetes, kredensial perwakilan layanan disimpan dalam /etc/kubernetes/azure.json file.
  • Saat Anda menghapus kluster AKS yang dibuat menggunakan az aks create perintah , perwakilan layanan yang dibuat tidak dihapus secara otomatis.
    • Untuk menghapus perwakilan layanan, kueri untuk servicePrincipalProfile.clientId kluster Anda dan hapus menggunakan az ad sp delete perintah . Ganti nilai untuk -g parameter untuk nama dan -n parameter grup sumber daya untuk nama kluster:

      az ad sp delete --id $(az aks show \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --query servicePrincipalProfile.clientId \
        --output tsv)
      

Pecahkan masalah

Azure CLI menyimpan kredensial perwakilan layanan untuk kluster AKS. Jika kredensial ini kedaluwarsa, Anda dapat mengalami kesalahan selama penyebaran kluster AKS. Jika Anda menjalankan az aks create perintah dan menerima pesan kesalahan yang mirip dengan yang berikut ini, itu mungkin menunjukkan masalah dengan kredensial perwakilan layanan yang di-cache:

Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
(Details: adal: Refresh request failed. Status Code = '401'.

Anda dapat memeriksa tanggal kedaluwarsa kredensial perwakilan layanan Anda menggunakan az ad app credential list perintah dengan "[].endDateTime" kueri.

az ad app credential list \
    --id <app-id> \
    --query "[].endDateTime" \
    --output tsv

Waktu kedaluwarsa default untuk mandat perwakilan layanan adalah satu tahun. Jika kredensial Anda lebih dari satu tahun, Anda dapat mengatur ulang kredensial yang ada atau membuat perwakilan layanan baru.

Pemecahan masalah Umum Azure CLI

Azure CLI dapat berjalan di beberapa lingkungan shell, tetapi dengan sedikit variasi format. Jika Anda mendapatkan hasil yang tidak diharapkan dengan perintah Azure CLI, lihat Cara berhasil menggunakan Azure CLI.

Langkah berikutnya

Untuk informasi selengkapnya tentang perwakilan layanan Microsoft Entra, lihat Objek perwakilan aplikasi dan layanan.

Untuk informasi mengenai cara memperbarui mandat, lihat Memperbarui atau memutar mandat untuk perwakilan layanan di AKS.