Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Siapkan pengikatan identitas pada kluster Azure Kubernetes Service (AKS) Anda untuk memetakan identitas terkelola yang ditetapkan pengguna (UAMI) di beberapa kluster saat menggunakan satu kredensial identitas federasi (FIC). Penyiapan ini membantu Anda menskalakan autentikasi Microsoft Entra untuk beban kerja tanpa mencapai batas FIC.
Prasyarat
- Tinjau Konsep pengikatan identitas untuk memahami cara kerja pengikatan identitas.
- Azure CLI versi 2.73.0 atau yang lebih baru. Untuk memeriksa versi Anda, gunakan
az versionperintah . Untuk menginstal atau memperbarui Azure CLI, lihat Menginstal Azure CLI. - Anda memerlukan izin Azure berikut pada lingkup identitas dan kluster:
Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/writedanMicrosoft.ContainerService/managedClusters/write. - Anda memerlukan izin admin kluster Kubernetes (atau setara) untuk membuat
ClusterRoledanClusterRoleBindingsumber daya.
Keterbatasan
- Pengikatan identitas belum didukung pada kluster yang dikonfigurasi dengan integrasi VNet server API.
Membuat sumber daya pengujian
Buat grup sumber daya Azure menggunakan
az group createperintah .export RESOURCE_GROUP="ib-test" export LOCATION="westus2" az group create --name $RESOURCE_GROUP --location $LOCATIONBuat kluster AKS dengan identitas beban kerja dan penerbit OIDC yang diaktifkan menggunakan perintah
az aks createdengan bendera--enable-workload-identitydan--enable-oidc-issuer.export CLUSTER_NAME="ib-test-cluster" az aks create --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME --location $LOCATION --no-ssh-key --enable-workload-identity --enable-oidc-issuerBuat identitas terkelola yang ditetapkan pengguna (UAMI) menggunakan
az identity createperintah .export MI_NAME="ib-test-mi" az identity create --resource-group $RESOURCE_GROUP --name $MI_NAME
Dapatkan ID UAMI
Dapatkan ID sumber daya, utama, klien, dan penyewa UAMI dan tetapkan sebagai variabel lingkungan menggunakan perintah berikut
az identity show:export MI_RESOURCE_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query id --output tsv) export MI_PRINCIPAL_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query principalId --output tsv) export MI_CLIENT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query clientId --output tsv) export MI_TENANT_ID=$(az identity show --resource-group $RESOURCE_GROUP --name $MI_NAME --query tenantId --output tsv)
Membuat pengikatan identitas
Petakan UAMI ke kluster AKS dengan pengikatan identitas menggunakan perintah
az aks identity-binding create.az aks identity-binding create --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib" --managed-identity-resource-id $MI_RESOURCE_IDNota
Saat Anda membuat pengikatan identitas, AKS secara otomatis membuat kredensial identitas federasi (FIC) bernama
aks-identity-bindingdi bawah UAMI. Kredensial ini dikelola oleh AKS. Jangan ubah atau hapus saat pengikatan identitas sedang digunakan. FIC yang dibuat untuk pengikatan identitas dibagikan di semua pengikatan identitas yang merujuk pada UAMI yang sama.
Dapatkan URL penerbit OIDC untuk UAMI
Peroleh URL penerbit OIDC yang terkait dengan UAMI dengan memeriksa pengikatan identitas menggunakan perintah
az aks identity-binding show.az aks identity-binding show --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib"Contoh output ringkas:
{ "oidcIssuer": { "oidcIssuerUrl": "https://ib.oic.prod-aks.azure.com/<MI-tenant-id>/<MI-client-id>" } }
Menyambungkan ke kluster AKS
Dapatkan kredensial kluster AKS menggunakan
az aks get-credentialsperintah dan simpan ke file kubeconfig terpisah:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME -a -f "${CLUSTER_NAME}.kubeconfig"Atur
KUBECONFIGvariabel lingkungan untuk menunjuk ke file kubeconfig baru:export KUBECONFIG="$(pwd)/${CLUSTER_NAME}.kubeconfig"
Mengotorisasi namespace dan akun layanan
Konfigurasikan kontrol akses berbasis peran (RBAC) untuk memberikan subjek tertentu izin untuk menggunakan identitas terkelola melalui pengikatan identitas dengan menerapkan manifes berikut menggunakan dengan perintah berikut
kubectl apply.Nota
Contoh berikut secara eksplisit mengacu pada akun layanan
demodi namespacedemo. Meskipun secara eksplisit mengacu pada akun layanan tertentu adalah salah satu opsi, dimungkinkan juga untuk merujuk ke kumpulan akun layanan di bawahsubjects. Untuk informasi selengkapnya, lihat Mengacu pada subjek dalam dokumentasi Kubernetes.kubectl apply -f - <<EOF apiVersion: v1 kind: Namespace metadata: name: demo --- apiVersion: v1 kind: ServiceAccount metadata: name: demo namespace: demo --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: use-mi-${MI_CLIENT_ID} rules: - verbs: ["use-managed-identity"] apiGroups: ["cid.wi.aks.azure.com"] resources: ["${MI_CLIENT_ID}"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: use-mi-${MI_CLIENT_ID} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: use-mi-${MI_CLIENT_ID} subjects: - kind: ServiceAccount name: demo namespace: demo EOF
Membuat brankas kunci dengan perlindungan penghapusan menyeluruh dan otorisasi Azure RBAC
Buat vault kunci dengan perlindungan penghapusan dan otorisasi Azure RBAC diaktifkan menggunakan perintah
az keyvault createdengan bendera--enable-purge-protectiondan--enable-rbac-authorization. Anda juga dapat menggunakan brankas kunci yang ada jika dikonfigurasi untuk perlindungan penghapusan menyeluruh dan otorisasi Azure RBAC.export KEY_VAULT_NAME="ib-test" az keyvault create \ --name $KEY_VAULT_NAME \ --resource-group $RESOURCE_GROUP \ --location $LOCATION \ --enable-purge-protection \ --enable-rbac-authorization
Dapatkan ID dan URL sumber daya brankas kunci
Dapatkan ID sumber daya key vault menggunakan perintah
az keyvault showdan atur sebagai variabel lingkungan.export KEY_VAULT_RESOURCE_ID=$(az keyvault show --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query id \ --output tsv)Dapatkan URL brankas kunci dengan menggunakan perintah
az keyvault showdan atur sebagai variabel lingkungan.export KEYVAULT_URL="$(az keyvault show \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query properties.vaultUri \ --output tsv)"
Mengonfigurasi akses Key Vault dan membuat secret
Langkah-langkah berikut menunjukkan cara mengakses rahasia, kunci, atau sertifikat di Azure Key Vault dari pod. Contoh di bagian ini mengonfigurasi akses ke rahasia di brankas kunci untuk identitas beban kerja, tetapi Anda dapat melakukan langkah serupa untuk mengonfigurasi akses ke kunci atau sertifikat.
Contoh berikut menunjukkan cara menggunakan model izin Azure RBAC untuk memberikan akses pod ke brankas kunci. Untuk informasi selengkapnya tentang model izin Azure RBAC untuk Azure Key Vault, lihat Memberikan izin ke aplikasi untuk mengakses Azure Key Vault menggunakan Azure RBAC.
Dapatkan ID objek pengguna yang masuk menggunakan
az ad signed-in-user showperintah dan atur sebagai variabel lingkungan:export CALLER_OBJECT_ID=$(az ad signed-in-user show --query id --output tsv)Tetapkan diri Anda peran Azure RBAC Key Vault Secrets Officer pada brankas kunci menggunakan perintah .
az role assignment create --assignee $CALLER_OBJECT_ID \ --role "Key Vault Secrets Officer" \ --scope $KEY_VAULT_RESOURCE_IDBuat rahasia di brankas kunci menggunakan
az keyvault secret setperintah .export KEY_VAULT_SECRET_NAME="my-secret" az keyvault secret set \ --vault-name $KEY_VAULT_NAME \ --name $KEY_VAULT_SECRET_NAME \ --value "Hello\!"Tetapkan peran Pengguna Rahasia Key Vault ke UAMI, menggunakan perintah
az role assignment create.az role assignment create \ --assignee-object-id $MI_PRINCIPAL_ID \ --role "Key Vault Secrets User" \ --scope $KEY_VAULT_RESOURCE_ID \ --assignee-principal-type ServicePrincipal
Menganotasi akun layanan
Tandai akun layanan dengan ID penyewa identitas terkelola menggunakan perintah
kubectl annotate.kubectl annotate sa demo -n demo azure.workload.identity/tenant-id=$MI_TENANT_IDBuat anotasi akun layanan dengan ID klien identitas terkelola
kubectl annotatemenggunakan perintah .kubectl annotate sa demo -n demo azure.workload.identity/client-id=$MI_CLIENT_ID
Sebarkan aplikasi sampel
Sebarkan pod sampel yang menggunakan pengikatan identitas untuk mendapatkan token akses bagi identitas terkelola untuk mengakses Azure Key Vault menggunakan perintah berikut
kubectl apply:kubectl apply -f - <<EOF apiVersion: v1 kind: Pod metadata: name: demo namespace: demo labels: azure.workload.identity/use: "true" annotations: azure.workload.identity/use-identity-binding: "true" spec: serviceAccount: demo containers: - name: azure-sdk # source code: https://github.com/Azure/azure-workload-identity/blob/feature/custom-token-endpoint/examples/identitybinding-msal-go/main.go image: ghcr.io/bahe-msft/azure-workload-identity/identitybinding-msal-go:latest-linux-amd64 env: - name: KEYVAULT_URL value: ${KEYVAULT_URL} - name: SECRET_NAME value: ${KEY_VAULT_SECRET_NAME} restartPolicy: Never EOF
Verifikasi akses ke Key Vault dari aplikasi sampel
Gambarkan pod dan konfirmasi variabel lingkungan serta pemasangan volume token yang diproyeksikan ada menggunakan perintah
kubectl describe pod.kubectl describe pod demo -n demoOutput yang diharapkan harus berisi nilai untuk
AZURE_CLIENT_ID,AZURE_TENANT_ID,AZURE_FEDERATED_TOKEN_FILE,AZURE_AUTHORITY_HOST,AZURE_KUBERNETES_TOKEN_PROXY.AZURE_KUBERNETES_SNI_NAME, danAZURE_KUBERNETES_CA_FILE.Verifikasi pod bisa mendapatkan token dan mengakses sumber daya menggunakan perintah
kubectl logs.kubectl logs demo -n demoJika berhasil, output harus mirip dengan contoh berikut:
I1107 20:03:42.865180 1 main.go:77] "successfully got secret" secret="Hello!"
Menskalakan pengikatan identitas di beberapa kluster
Pengikatan identitas memungkinkan pemetaan beberapa kluster AKS ke UAMI yang sama saat masih menggunakan satu FIC. Untuk menskalakan pengikatan identitas di beberapa kluster, Anda dapat mengulangi langkah-langkah dari Membuat pengikatan identitas melalui memverifikasi akses ke brankas kunci dari aplikasi sampel untuk setiap kluster tambahan yang ingin Anda petakan ke UAMI yang sama (membuat pengikatan identitas baru per kluster).
Membersihkan sumber daya
Jika Anda tidak lagi memerlukan sumber daya yang Anda buat dalam artikel ini, Anda dapat membersihkannya untuk menghindari timbulnya biaya di masa mendatang.
Hapus pod dengan menggunakan perintah
kubectl delete pod.kubectl delete pod demo -n demoHapus namespace dengan perintah
kubectl delete ns.kubectl delete ns demoHapus grup sumber daya dan semua sumber daya terkait menggunakan
az group deleteperintah .az group delete --name $RESOURCE_GROUP --yes --no-wait