Tutorial: Menggunakan identitas beban kerja dengan aplikasi di Azure Kubernetes Service (AKS)

Azure Kubernetes Service (AKS) adalah layanan Kubernetes terkelola yang memungkinkan Anda dengan cepat menyebarkan dan mengelola kluster Kubernetes. Di tutorial ini, Anda akan:

  • Sebarkan kluster AKS menggunakan Azure CLI dengan Penerbit OpenID Koneksi (OIDC) dan identitas terkelola.
  • Buat Azure Key Vault dan rahasia.
  • Buat ID Beban Kerja Microsoft Entra dan akun layanan Kubernetes.
  • Konfigurasikan identitas terkelola untuk federasi token.
  • Sebarkan beban kerja dan verifikasi autentikasi dengan identitas beban kerja.

Sebelum Anda mulai

Prasyarat

  • Jika Anda tidak memiliki Langganan Azure, buat Akun gratis Azure sebelum memulai.
  • Artikel ini memerlukan Azure CLI versi 2.47.0 atau yang lebih baru. Jika menggunakan Azure Cloud Shell, versi terbaru sudah terinstal.
  • Identitas yang Anda gunakan untuk membuat kluster Anda harus memiliki izin minimum yang sesuai. Untuk informasi selengkapnya tentang akses dan identitas untuk AKS, lihat Opsi akses dan identitas untuk Azure Kubernetes Service (AKS).
  • Jika Anda memiliki beberapa langganan Azure, pilih ID langganan yang sesuai tempat sumber daya harus ditagih menggunakan perintah az account set .

Buat grup sumber daya

Grup sumber daya Azure adalah grup logis tempat sumber daya Azure disebarkan dan dikelola. Saat membuat grup sumber daya, Anda diminta untuk menentukan lokasi. Lokasi ini adalah lokasi penyimpanan metadata grup sumber daya Anda dan tempat sumber daya Anda berjalan di Azure jika Anda tidak menentukan wilayah lain selama pembuatan sumber daya.

Contoh berikut ini menampilkan cara membuat grup sumber daya bernama myResourceGroup di lokasi eastus.

  • Mmebuat grup sumber daya menggunakan perintah buat grup az.

    az group create --name myResourceGroup --location eastus
    

    Contoh output berikut ini menyerupai pembuatan grup sumber daya yang berhasil:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null
    }
    

Ekspor variabel lingkungan

Untuk membantu menyederhanakan langkah-langkah untuk mengonfigurasi identitas yang diperlukan, langkah-langkah di bawah ini menentukan variabel lingkungan untuk referensi pada kluster.

  • Buat variabel ini menggunakan perintah berikut. Ganti nilai default untuk RESOURCE_GROUP, , LOCATIONSERVICE_ACCOUNT_NAME, SUBSCRIPTION, USER_ASSIGNED_IDENTITY_NAME, dan FEDERATED_IDENTITY_CREDENTIAL_NAME.

    export RESOURCE_GROUP="myResourceGroup"
    export LOCATION="westcentralus"
    export SERVICE_ACCOUNT_NAMESPACE="default"
    export SERVICE_ACCOUNT_NAME="workload-identity-sa"
    export SUBSCRIPTION="$(az account show --query id --output tsv)"
    export USER_ASSIGNED_IDENTITY_NAME="myIdentity"
    export FEDERATED_IDENTITY_CREDENTIAL_NAME="myFedIdentity"
    export KEYVAULT_NAME="azwi-kv-tutorial"
    export KEYVAULT_SECRET_NAME="my-secret"
    

Membuat kluster AKS

  1. Buat kluster AKS menggunakan perintah az aks create dengan --enable-oidc-issuer parameter untuk menggunakan Pengeluar Sertifikat OIDC.

    az aks create -g "${RESOURCE_GROUP}" -n myAKSCluster --node-count 1 --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
    

    Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.

  2. Dapatkan URL Pengeluar Sertifikat OIDC dan simpan ke variabel lingkungan menggunakan perintah berikut. Ganti nilai default untuk argumen -n, yang merupakan nama kluster.

    export AKS_OIDC_ISSUER="$(az aks show -n myAKSCluster -g "${RESOURCE_GROUP}" --query "oidcIssuerProfile.issuerUrl" -otsv)"
    

    Variabel harus berisi URL Penerbit yang mirip dengan contoh berikut:

    https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/00000000-0000-0000-0000-000000000000/
    

    Secara default, Penerbit diatur untuk menggunakan URL https://{region}.oic.prod-aks.azure.comdasar , di mana nilai untuk {region} mencocokkan lokasi tempat kluster AKS disebarkan.

Membuat Azure Key Vault dan rahasia

  1. Buat Azure Key Vault dalam grup sumber daya yang Anda buat dalam tutorial ini menggunakan perintah az keyvault create .

    az keyvault create --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --name "${KEYVAULT_NAME}"
    

    Keluaran dari perintah ini menunjukkan properti key vault yang baru dibuat. Perhatikan dua properti yang tercantum di bawah:

    • Name: Nama vault yang Anda berikan ke --name parameter .
    • vaultUri: Dalam contoh, ini adalah https://<your-unique-keyvault-name>.vault.azure.net/. Aplikasi yang menggunakan brankas Anda melalui REST API-nya harus menggunakan URI ini.

    Pada titik ini, akun Azure Anda adalah satu-satunya yang berwenang untuk melakukan operasi apa pun di brankas baru ini.

  2. Tambahkan rahasia ke vault menggunakan perintah az keyvault secret set . Kata sandi adalah nilai yang Anda tentukan untuk variabel KEYVAULT_SECRET_NAME lingkungan dan menyimpan nilai Hello! di dalamnya.

    az keyvault secret set --vault-name "${KEYVAULT_NAME}" --name "${KEYVAULT_SECRET_NAME}" --value 'Hello!'
    
  3. Tambahkan URL Key Vault ke variabel KEYVAULT_URL lingkungan menggunakan perintah az keyvault show .

    export KEYVAULT_URL="$(az keyvault show -g "${RESOURCE_GROUP}" -n ${KEYVAULT_NAME} --query properties.vaultUri -o tsv)"
    

Membuat identitas terkelola dan memberikan izin untuk mengakses rahasia

  1. Atur langganan tertentu sebagai langganan aktif saat ini menggunakan perintah az account set .

    az account set --subscription "${SUBSCRIPTION}"
    
  2. Buat identitas terkelola menggunakan perintah az identity create .

    az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
    
  3. Atur kebijakan akses untuk identitas terkelola untuk mengakses rahasia Key Vault menggunakan perintah berikut.

    export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -otsv)"
    
    az keyvault set-policy --name "${KEYVAULT_NAME}" --secret-permissions get --spn "${USER_ASSIGNED_CLIENT_ID}"
    

Membuat akun layanan Kubernetes

  1. Buat akun layanan Kubernetes dan anotasi dengan ID klien identitas terkelola yang dibuat pada langkah sebelumnya menggunakan perintah az aks get-credentials . Ganti nilai default untuk nama kluster dan nama grup sumber daya.

    az aks get-credentials -n myAKSCluster -g "${RESOURCE_GROUP}"
    
  2. Salin input multibaris berikut ke terminal Anda dan jalankan perintah untuk membuat akun layanan.

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: ServiceAccount
    metadata:
      annotations:
        azure.workload.identity/client-id: ${USER_ASSIGNED_CLIENT_ID}
      name: ${SERVICE_ACCOUNT_NAME}
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
    EOF
    

    Output berikut menyerupan pembuatan identitas yang berhasil:

    Serviceaccount/workload-identity-sa created
    

Menetapkan kredensial identitas federasi

  • Buat kredensial identitas gabungan antara identitas terkelola, penerbit akun layanan, dan subjek menggunakan perintah az identity federated-credential create .

    az identity federated-credential create --name ${FEDERATED_IDENTITY_CREDENTIAL_NAME} --identity-name ${USER_ASSIGNED_IDENTITY_NAME} --resource-group ${RESOURCE_GROUP} --issuer ${AKS_OIDC_ISSUER} --subject system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}
    

    Catatan

    Dibutuhkan beberapa detik agar kredensial identitas federasi disebarluaskan setelah awalnya ditambahkan. Jika permintaan token segera tersedia setelah menambahkan kredensial identitas federasi, Anda mungkin mengalami kegagalan selama beberapa menit, karena cache diisi di direktori dengan data lama. Untuk menghindari masalah ini, Anda dapat menambahkan sedikit penundaan setelah menambahkan kredensial identitas federasi.

Menyebarkan beban kerja

  1. Sebarkan pod yang mereferensikan akun layanan yang dibuat pada langkah sebelumnya menggunakan perintah berikut.

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: Pod
    metadata:
      name: quick-start
      namespace: ${SERVICE_ACCOUNT_NAMESPACE}
      labels:
        azure.workload.identity/use: "true"
    spec:
      serviceAccountName: ${SERVICE_ACCOUNT_NAME}
      containers:
        - image: ghcr.io/azure/azure-workload-identity/msal-go
          name: oidc
          env:
          - name: KEYVAULT_URL
            value: ${KEYVAULT_URL}
          - name: SECRET_NAME
            value: ${KEYVAULT_SECRET_NAME}
      nodeSelector:
        kubernetes.io/os: linux
    EOF
    

    Output berikut menyerupan pembuatan pod yang berhasil:

    pod/quick-start created
    
  2. Periksa apakah semua properti disuntikkan dengan benar dengan webhook menggunakan perintah kubectl describe .

    kubectl describe pod quick-start
    
  3. Verifikasi pod bisa mendapatkan token dan mengakses rahasia dari Key Vault menggunakan perintah log kubectl.

    kubectl logs quick-start
    

    Output berikut menyerupan akses token yang berhasil:

    I1013 22:49:29.872708       1 main.go:30] "successfully got secret" secret="Hello!"
    

Membersihkan sumber daya

Anda mungkin ingin meninggalkan sumber daya ini di tempat. Jika Anda tidak lagi memerlukan sumber daya ini, gunakan perintah berikut untuk menghapusnya.

  1. Hapus pod menggunakan kubectl delete pod perintah .

    kubectl delete pod quick-start
    
  2. Hapus akun layanan menggunakan kubectl delete sa perintah .

    kubectl delete sa "${SERVICE_ACCOUNT_NAME}" --namespace "${SERVICE_ACCOUNT_NAMESPACE}"
    
  3. Hapus grup sumber daya Azure dan semua sumber dayanya menggunakan perintah az group delete .

    az group delete --name "${RESOURCE_GROUP}"
    

Langkah berikutnya

Dalam tutorial ini, Anda menyebarkan kluster Kubernetes dan kemudian menyebarkan aplikasi kontainer sederhana untuk menguji bekerja dengan ID Beban Kerja Microsoft Entra.

Tutorial ini untuk tujuan pengantar. Untuk panduan tentang cara membuat solusi lengkap dengan AKS untuk produksi, lihat panduan solusi AKS.