Menggunakan identitas terkelola yang ditetapkan pengguna di Azure Kubernetes Service (AKS)

Artikel ini menjelaskan cara mengaktifkan identitas terkelola yang ditetapkan pengguna pada kluster AKS baru atau yang sudah ada, mendapatkan ID utama identitas terkelola yang ditetapkan pengguna, dan menambahkan penetapan peran untuk identitas terkelola yang ditetapkan pengguna.

Prasyarat

  • Grup sumber daya Azure yang sudah ada. Jika Anda tidak memilikinya, Anda dapat membuatnya menggunakan az group create perintah .

    az group create \
        --name <resource-group-name> \
        --location <location>
    
  • Azure CLI versi 2.23.0 atau yang lebih baru terinstal. Jalankan az --version untuk menemukan versinya. Jika Anda perlu menginstal atau meningkatkan, lihat Install Azure CLI.
  • Untuk memperbarui kluster yang ada untuk menggunakan identitas terkelola yang ditetapkan user, Anda memerlukan Azure CLI versi 2.49.0 atau yang lebih baru.

Keterbatasan

  • Setelah membuat kluster dengan identitas terkelola, Anda tidak dapat beralih kembali menggunakan perwakilan layanan.
  • Memindahkan atau memigrasikan kluster yang mendukung identitas terkelola ke penyewa lain tidak didukung.
  • Jika kluster telah memiliki identitas yang dikelola pod Microsoft Entra (aad-pod-identity) diaktifkan, pod Node-Managed Identity (NMI) memodifikasi iptables node untuk mencegat panggilan ke titik akhir Azure Instance Metadata (IMDS). Konfigurasi ini berarti setiap permintaan yang dibuat ke titik akhir IMDS disadap oleh NMI, bahkan jika pod tertentu tidak menggunakan aad-pod-identity.
    • Anda dapat mengonfigurasi definisi sumber daya kustom (CRD) AzurePodIdentityException untuk menentukan bahwa permintaan ke titik akhir IMDS yang berasal dari pod yang cocok dengan label yang ditentukan dalam CRD harus diproksikan tanpa pemrosesan apa pun di NMI. Kecualikan pod sistem dengan label dalam namespace kube-system dengan cara mengonfigurasi CRD AzurePodIdentityException. Untuk informasi selengkapnya, lihat Gunakan identitas yang dikelola pod Microsoft Entra di Azure Kubernetes Service (AKS).
    • Untuk mengonfigurasi pengecualian, instal YAML mic-exception.
  • Wilayah USDOD Central, USDOD East, dan USGov Iowa di cloud Azure US Government tidak mendukung pembuatan kluster dengan identitas terkelola yang ditetapkan pengguna.

Memperbarui pertimbangan kluster

Saat Anda memperbarui kluster, pertimbangkan informasi berikut:

  • Pembaruan hanya berfungsi jika ada pembaruan VHD yang akan digunakan. Jika Anda menjalankan VHD terbaru, Anda harus menunggu hingga VHD berikutnya tersedia untuk melakukan pembaruan.
  • Azure CLI memastikan izin add-on Anda diatur dengan benar setelah bermigrasi. Jika Anda tidak menggunakan Azure CLI untuk melakukan operasi migrasi, Anda perlu menangani izin identitas tambahan secara manual. Untuk contoh menggunakan templat Azure Resource Manager (ARM), lihat Menetapkan peran Azure menggunakan templat ARM.
  • Jika kluster Anda menggunakan --attach-acr untuk menarik gambar dari Azure Container Registry (ACR), Anda perlu menjalankan perintah az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id> setelah memperbarui kluster Anda agar kubelet yang baru dibuat untuk identitas yang dikelola memperoleh izin untuk menarik dari ACR. Jika tidak, Anda tidak akan dapat menarik dari ACR setelah pembaruan.

Buat identitas terkelola yang ditetapkan pengguna

Jika Anda belum memiliki sumber daya identitas terkelola yang ditetapkan pengguna, buat sumber daya menggunakan az identity create perintah .

az identity create \
    --name <identity-name> \
    --resource-group <resource-group-name>

Output Anda harus menyerupai contoh output berikut:

{                                  
    "clientId": "<client-id>",
    "clientSecretUrl": "<clientSecretUrl>",
    "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>",
    "location": "<location>",
    "name": "<identity-name>",
    "principalId": "<principal-id>",
    "resourceGroup": "<resource-group-name>",
    "tags": {},
    "tenantId": "<tenant-id>",
    "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}

Dapatkan ID prinsipal untuk identitas terkelola yang ditetapkan pengguna

Dapatkan ID utama dari identitas terkelola yang diberi pengguna dengan menggunakan perintah az identity show.

CLIENT_ID=$(az identity show \
    --name <identity-name> \
    --resource-group <resource-group-name> \
    --query principalId \
    --output tsv)

Mendapatkan ID sumber dari identitas terkelola yang ditetapkan oleh pengguna

Dapatkan ID sumber daya untuk identitas terkelola yang ditetapkan pengguna dengan perintah az identity show.

RESOURCE_ID=$(az identity show \
    --name <identity-name> \
    --resource-group <resource-group-name> \
    --query id \
    --output tsv)

Mengaktifkan identitas terkelola yang ditetapkan pengguna pada kluster AKS baru

Buat kluster AKS dengan identitas terkelola yang ditetapkan pengguna menggunakan perintah az aks create dan parameter --assign-identity yang diatur ke ID sumber daya identitas terkelola yang ditetapkan pengguna.

az aks create \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --network-plugin azure \
    --vnet-subnet-id <vnet-subnet-id> \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 \
    --assign-identity $RESOURCE_ID \
    --generate-ssh-keys

Memperbarui kluster yang ada untuk menggunakan identitas terkelola yang ditetapkan pengguna

Perbarui kluster yang ada untuk menggunakan identitas terkelola yang ditentukan pengguna dengan menggunakan perintah az aks update dan menetapkan parameter --assign-identity ke ID sumber daya dari identitas terkelola yang ditentukan pengguna.

az aks update \
    --resource-group <resource-group-name> \
    --name <cluster-name> \
    --enable-managed-identity \
    --assign-identity $RESOURCE_ID

Output untuk pembaruan kluster yang berhasil untuk menggunakan identitas terkelola yang ditetapkan pengguna harus menyerupai contoh output berikut:

...
    "identity": {
    "principalId": null,
    "tenantId": null,
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
        "clientId": "<client-id>",
        "principalId": "<principal-id>"
        }
    }
    },
...

Setelah Anda memperbarui kluster untuk menggunakan identitas terkelola yang ditetapkan pengguna alih-alih perwakilan layanan, sarana kontrol dan pod menggunakan identitas terkelola yang ditetapkan pengguna untuk otorisasi saat mengakses layanan lain di Azure. Kubelet terus menggunakan service principal sampai Anda juga meningkatkan node pool Anda. Peningkatan kumpulan simpul menyebabkan waktu henti untuk kluster AKS Anda karena simpul di kumpulan simpul diisolasi, dikosongkan, dan dikonfigurasi ulang. Anda dapat menggunakan perintah pada simpul Anda untuk memperbarui ke identitas terkelola yang ditetapkan pengguna.

az aks nodepool upgrade \
  --resource-group <resource-group-name> \
  --cluster-name <aks-cluster-name> \
  --name <node-pool-name> \
  --node-image-only

Nota

Memigrasikan identitas terkelola untuk sarana kontrol dari yang ditetapkan sistem ke yang ditetapkan pengguna tidak mengakibatkan waktu henti untuk sarana kontrol dan kumpulan agen. Komponen kontrol tetap menggunakan identitas lama yang ditugaskan oleh sistem hingga beberapa jam sampai refresh token berikutnya.

Menetapkan peran RBAC Azure ke identitas terkelola yang ditetapkan oleh pengguna

Tambahkan penetapan peran untuk identitas terkelola yang ditugaskan pengguna menggunakan perintah az role assignment create. Contoh berikut menetapkan peran Key Vault Secrets User ke identitas terkelola yang ditetapkan pengguna untuk memberinya izin untuk mengakses rahasia dalam key vault. Penetapan peran dibatasi ke sumber daya brankas kunci.

az role assignment create \
    --assignee <client-id> \
    --role "Key Vault Secrets User" \
    --scope "<key-vault-resource-id>"

Nota

Diperlukan waktu hingga 60 menit agar izin yang diberikan ke identitas terkelola kluster Anda disebarluaskan.

Membuat file konfigurasi Terraform

File konfigurasi Terraform menentukan infrastruktur yang dibuat dan dikelola Terraform.

  1. Buat file bernama main.tf dan tambahkan kode berikut untuk menentukan versi Terraform dan tentukan penyedia Azure:

    terraform {
    required_version = ">= 1.0"
    required_providers {
      azurerm = {
        source  = "hashicorp/azurerm"
        version = "~> 4.0"
      }
     }
    }
    provider "azurerm" {
     features {}
    }
    
  2. Tambahkan kode berikut ke main.tf untuk membuat grup sumber daya Azure. Jangan ragu untuk mengubah nama dan lokasi grup sumber daya sesuai kebutuhan.

    resource "azurerm_resource_group" "example" {
     name     = "aks-rg"
     location = "East US"
    }
    

Membuat kluster AKS dengan identitas terkelola yang ditetapkan pengguna menggunakan Terraform

Tambahkan kode berikut ke main.tf untuk membuat identitas terkelola yang ditetapkan pengguna dan kluster AKS yang menggunakan identitas:

resource "azurerm_user_assigned_identity" "uai" {
 name                = "aks-user-identity"
 resource_group_name = azurerm_resource_group.example.name
 location            = azurerm_resource_group.example.location
}
resource "azurerm_kubernetes_cluster" "user_assigned" {
 name                = "aks-user"
 location            = azurerm_resource_group.example.location
 resource_group_name = azurerm_resource_group.example.name
 dns_prefix          = "aksuser"
 identity {
   type         = "UserAssigned"
   identity_ids = [azurerm_user_assigned_identity.uai.id]
 }
 default_node_pool {
   name       = "system"
   node_count = 1
   vm_size    = "Standard_DS2_v2"
 }
}

Menambahkan penetapan peran untuk identitas terkelola yang ditetapkan pengguna menggunakan Terraform

Tambahkan kode berikut ke main.tf untuk membuat penetapan peran untuk identitas terkelola yang ditetapkan oleh pengguna. Contoh ini menetapkan peran Key Vault Secrets User kepada identitas terkelola yang ditetapkan oleh pengguna untuk memberikan izin mengakses rahasia di brankas kunci. Penetapan peran dibatasi ke sumber daya brankas kunci.

resource "azurerm_role_assignment" "user_assigned_key_vault_secrets_user" {
 scope                = azurerm_resource_group.example.id
 role_definition_name = "Key Vault Secrets User"
 principal_id         = azurerm_user_assigned_identity.uai.principal_id
}

Menginisialisasi Terraform

Inisialisasi Terraform di direktori yang berisi file main.tf Anda menggunakan perintah terraform init. Perintah ini mengunduh penyedia Azure yang diperlukan untuk mengelola sumber daya Azure dengan Terraform.

terraform init

Buat rencana pelaksanaan Terraform

Buat rencana eksekusi Terraform menggunakan terraform plan perintah . Perintah ini menunjukkan kepada Anda sumber daya yang akan dibuat atau dimodifikasi oleh Terraform dalam langganan Azure Anda.

terraform plan

Menerapkan konfigurasi Terraform

Setelah meninjau dan mengonfirmasi rencana eksekusi, terapkan konfigurasi Terraform menggunakan terraform apply perintah . Perintah ini membuat atau memodifikasi sumber daya yang ditentukan dalam file main.tf Anda di langganan Azure Anda.

terraform apply

Memverifikasi implementasi Terraform

Setelah menerapkan konfigurasi Terraform, Anda dapat memverifikasi penyebaran menggunakan perintah [az aks show][az-aks-show] dengan --query parameter untuk memfilter output dan menampilkan informasi identitas. Contohnya:

az aks show \
 --name <cluster-name> \
 --resource-group <resource-group> \
 --query identity.type \
 --output tsv

Untuk mempelajari selengkapnya tentang identitas terkelola di AKS, lihat artikel berikut ini: