Menyebarkan dan mengonfigurasi identitas beban kerja pada kluster Azure Kubernetes Service (AKS)
Azure Kubernetes Service (AKS) adalah layanan Kubernetes terkelola yang memungkinkan Anda dengan cepat menyebarkan dan mengelola kluster Kubernetes. Dalam artikel ini, Anda akan:
- Menyebarkan kluster AKS menggunakan Azure CLI yang menyertakan OpenID Koneksi Issuer dan ID Beban Kerja Microsoft Entra
- Memberikan akses ke Azure Key Vault Anda
- Membuat ID Beban Kerja Microsoft Entra dan akun layanan Kubernetes
- Konfigurasikan identitas terkelola untuk federasi token.
Artikel ini mengasumsikan Anda memiliki pemahaman dasar tentang konsep Kubernetes. Untuk informasi lebih, lihat konsep inti Kubernetes untuk Azure Kubernetes Service (AKS). Jika Anda tidak terbiasa dengan ID Beban Kerja Microsoft Entra, lihat artikel Gambaran Umum berikut ini.
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 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 di mana sumber daya harus ditagih menggunakan perintah akun az.
Catatan
Alih-alih mengonfigurasi semua langkah secara manual, ada implementasi lain yang disebut Service Koneksi or yang akan membantu Anda mengonfigurasi beberapa langkah secara otomatis dan mencapai hasil yang sama. Lihat juga: Tutorial: Koneksi ke akun penyimpanan Azure di Azure Kubernetes Service (AKS) dengan Service Koneksi or menggunakan identitas beban kerja.
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.
Jalankan perintah berikut untuk membuat variabel ini. Ganti nilai default untuk RESOURCE_GROUP
, , LOCATION
SERVICE_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"
Membuat kluster AKS
Buat kluster AKS menggunakan perintah az aks create dengan --enable-oidc-issuer
parameter untuk menggunakan Pengeluar Sertifikat OIDC. Contoh berikut membuat kluster bernama myAKSCluster dengan satu node di myResourceGroup:
az aks create -g "${RESOURCE_GROUP}" -n myAKSCluster --enable-oidc-issuer --enable-workload-identity --generate-ssh-keys
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Catatan
Saat Anda membuat kluster AKS, grup sumber daya kedua secara otomatis dibuat untuk menyimpan sumber daya AKS. Untuk informasi selengkapnya, lihat Mengapa dua grup sumber daya dibuat dengan AKS?.
Memperbarui kluster AKS yang ada
Anda dapat memperbarui kluster AKS menggunakan perintah az aks update dengan --enable-oidc-issuer
dan --enable-workload-identity
parameter untuk menggunakan Pengeluar Sertifikat OIDC dan mengaktifkan identitas beban kerja. Contoh berikut memperbarui kluster bernama myAKSCluster:
az aks update -g "${RESOURCE_GROUP}" -n myAKSCluster --enable-oidc-issuer --enable-workload-identity
Mengambil URL Pengeluar Sertifikat OIDC
Untuk mendapatkan URL Pengeluar Sertifikat OIDC dan menyimpannya ke variabel lingkungan, jalankan 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" -o tsv)"
Variabel harus berisi URL Penerbit yang mirip dengan contoh berikut:
https://eastus.oic.prod-aks.azure.com/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/
Secara default, Penerbit diatur untuk menggunakan URL https://{region}.oic.prod-aks.azure.com/{tenant_id}/{uuid}
dasar , di mana nilai untuk {region}
mencocokkan lokasi tempat kluster AKS disebarkan. Nilai {uuid}
mewakili kunci OIDC.
Buat identitas terkelola
Gunakan perintah az account set Azure CLI untuk mengatur langganan tertentu menjadi langganan aktif saat ini. Kemudian gunakan perintah az identity create untuk membuat identitas terkelola.
az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}" --location "${LOCATION}" --subscription "${SUBSCRIPTION}"
Selanjutnya, mari kita buat variabel untuk ID identitas terkelola.
export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -o tsv)"
Membuat akun layanan Kubernetes
Buat akun layanan Kubernetes dan anotasi dengan ID klien identitas terkelola yang dibuat pada langkah sebelumnya. Gunakan perintah az aks get-credentials dan ganti nilai untuk nama kluster dan nama grup sumber daya.
az aks get-credentials -n myAKSCluster -g "${RESOURCE_GROUP}"
Salin dan tempel input multibaris berikut di Azure CLI.
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
Gunakan perintah az identity federated-credential create untuk membuat kredensial identitas federasi antara identitas terkelola, penerbit akun layanan, dan subjek.
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}" --audience api://AzureADTokenExchange
Catatan
Dibutuhkan waktu beberapa detik agar info masuk identitas federasi dapat disebarluaskan setelah ditambahkan. Jika permintaan token dibuat segera setelah menambahkan kredensial identitas federasi, itu mungkin menyebabkan 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 aplikasi Anda
Saat Anda menyebarkan pod aplikasi, manifes harus mereferensikan akun layanan yang dibuat di langkah Buat akun layanan Kubernetes. Manifes berikut menunjukkan cara mereferensikan akun, khususnya metadata\namespace dan properti spec\serviceAccountName :
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: your-pod
namespace: "${SERVICE_ACCOUNT_NAMESPACE}"
labels:
azure.workload.identity/use: "true" # Required, only the pods with this label can use workload identity
spec:
serviceAccountName: "${SERVICE_ACCOUNT_NAME}"
containers:
- image: <your image>
name: <containerName>
EOF
Penting
Pastikan pod aplikasi Anda yang menggunakan identitas beban kerja telah menambahkan label azure.workload.identity/use: "true"
berikut ke spesifikasi pod Anda, jika tidak, pod gagal setelah di-restart.
Opsional - Memberikan izin untuk mengakses Azure Key Vault
Langkah ini diperlukan jika Anda perlu mengakses rahasia, kunci, dan sertifikat yang dipasang di Azure Key Vault dari pod. Lakukan langkah-langkah berikut untuk mengonfigurasi akses dengan identitas terkelola. Langkah-langkah ini mengasumsikan Anda memiliki Azure Key Vault yang sudah dibuat dan dikonfigurasi dalam langganan Anda. Jika Anda tidak memilikinya, lihat Membuat Azure Key Vault menggunakan Azure CLI.
Sebelum melanjutkan, Anda memerlukan informasi berikut:
- Nama Key Vault
- Grup sumber daya yang memegang Key Vault
Anda dapat mengambil informasi ini menggunakan perintah Azure CLI: az keyvault list.
Atur kebijakan akses untuk identitas terkelola untuk mengakses rahasia di Key Vault Anda dengan menjalankan perintah berikut:
export KEYVAULT_RESOURCE_GROUP="myResourceGroup" export KEYVAULT_NAME="myKeyVault" export USER_ASSIGNED_CLIENT_ID="$(az identity show --resource-group "${RESOURCE_GROUP}" --name "${USER_ASSIGNED_IDENTITY_NAME}" --query 'clientId' -o tsv)" az keyvault set-policy --name "${KEYVAULT_NAME}" --secret-permissions get --spn "${USER_ASSIGNED_CLIENT_ID}"
Buat rahasia di Key Vault:
export KEYVAULT_SECRET_NAME="my-secret" az keyvault secret set --vault-name "${KEYVAULT_NAME}" \ --name "${KEYVAULT_SECRET_NAME}" \ --value "Hello\!"
Ekspor URL Key Vault:
export KEYVAULT_URL="$(az keyvault show -g ${KEYVAULT_RESOURCE_GROUP} -n ${KEYVAULT_NAME} --query properties.vaultUri -o tsv)"
Sebarkan pod yang mereferensikan akun layanan dan URL Key Vault di atas:
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
Untuk memeriksa apakah semua properti disuntikkan dengan benar oleh webhook, gunakan perintah kubectl describe :
kubectl describe pod quick-start | grep "SECRET_NAME:"
Jika berhasil, output harus mirip dengan yang berikut ini:
SECRET_NAME: ${KEYVAULT_SECRET_NAME}
Untuk memverifikasi bahwa pod mampu mendapatkan token dan mengakses sumber daya, gunakan perintah log kubectl:
kubectl logs quick-start
Jika berhasil, output harus mirip dengan yang berikut ini:
I0114 10:35:09.795900 1 main.go:63] "successfully got secret" secret="Hello\\!"
Menonaktifkan identitas beban kerja
Untuk menonaktifkan ID Beban Kerja Microsoft Entra pada kluster AKS tempat id tersebut diaktifkan dan dikonfigurasi, Anda dapat menjalankan perintah berikut:
az aks update --resource-group "${RESOURCE_GROUP}" --name myAKSCluster --disable-workload-identity
Langkah berikutnya
Dalam artikel ini, Anda menyebarkan kluster Kubernetes dan mengonfigurasinya untuk menggunakan identitas beban kerja sebagai persiapan beban kerja aplikasi untuk mengautentikasi dengan kredensial tersebut. Sekarang Anda siap untuk menyebarkan aplikasi Anda dan mengonfigurasinya untuk menggunakan identitas beban kerja dengan versi terbaru pustaka klien Azure Identity . Jika Anda tidak dapat menulis ulang aplikasi untuk menggunakan versi pustaka klien terbaru, Anda dapat menyiapkan pod aplikasi untuk mengautentikasi menggunakan identitas terkelola dengan identitas beban kerja sebagai solusi migrasi jangka pendek.