Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Kubernetes Service (AKS) kümelerinizde, tek bir federasyon kimlik bilgisi (FIC) kullanarak kullanıcı tarafından atanan yönetilen kimliği (UAMI) birden fazla küme arasında eşlemek için kimlik bağlamalarını ayarlayın. Bu kurulum, FIC sınırlarına girmeden iş yükleri için Microsoft Entra kimlik doğrulamasını ölçeklendirmenize yardımcı olur.
Önkoşullar
- Kimlik bağlamalarının nasıl çalıştığını anlamak için Kimlik bağlamaları kavramlarını gözden geçirin.
- Azure CLI sürüm 2.73.0 veya üzeri. Sürümünüzü denetlemek için komutunu kullanın
az version. Azure CLI'yı yüklemek veya güncelleştirmek için bkz. Azure CLI'yi yükleme. - Kimlik ve küme kapsamında aşağıdaki Azure izinlerine ihtiyacınız vardır:
Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/writeveMicrosoft.ContainerService/managedClusters/write. - Kubernetes küme yöneticisi (veya eşdeğeri) izinlerine sahip olmanız,
ClusterRoleveClusterRoleBindingkaynaklarını oluşturmanız için gereklidir.
Sınırlamalar
- Kimlik bağlamaları henüz API sunucusu sanal ağ tümleştirmesi ile yapılandırılmış kümelerde desteklenmemektedir.
Test kaynakları oluşturma
komutunu kullanarak
az group createbir Azure kaynak grubu oluşturun.export RESOURCE_GROUP="ib-test" export LOCATION="westus2" az group create --name $RESOURCE_GROUP --location $LOCATIONaz aks createve--enable-workload-identityseçeneklerini içeren komutu--enable-oidc-issuerkullanarak iş yükü kimliği ve OIDC sağlayıcısının etkinleştirildiği bir AKS kümesi oluşturun.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-issuerkomutunu kullanarak
az identity createkullanıcı tarafından atanan bir yönetilen kimlik (UAMI) oluşturun.export MI_NAME="ib-test-mi" az identity create --resource-group $RESOURCE_GROUP --name $MI_NAME
UAMI kimliklerini alma
Aşağıdaki
az identity showkomutları kullanarak UAMI'nin kaynak, sorumlu, istemci ve kiracı kimliklerini alın ve ortam değişkenleri olarak ayarlayın: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)
Kimlik bağlantısı oluşturma
UAMI'yi kimlik bağlama ile AKS kümesine
az aks identity-binding createkomutunu kullanarak eşleyin.az aks identity-binding create --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib" --managed-identity-resource-id $MI_RESOURCE_IDUyarı
Kimlik bağlaması oluşturduğunuzda AKS otomatik olarak UAMI altında adlı
aks-identity-bindingbir federasyon kimlik bilgisi (FIC) oluşturur. Bu kimlik bilgisi AKS tarafından yönetilir. Kimlik bağlamaları kullanılırken değiştirmeyin veya silmeyin. Kimlik bağlamaları için oluşturulan FIC, aynı UAMI'ye başvuran tüm kimlik bağlamalarında paylaşılır.
OIDC sağlayıcı URL'sini UAMI için alma
UAMI ile ilişkili OIDC sağlayıcı URL'sini elde etmek için kimlik bağlamasını incelemek amacıyla
az aks identity-binding showkomutunu kullanın.az aks identity-binding show --resource-group $RESOURCE_GROUP --cluster-name $CLUSTER_NAME --name "${MI_NAME}-ib"Daraltılmış örnek çıktı:
{ "oidcIssuer": { "oidcIssuerUrl": "https://ib.oic.prod-aks.azure.com/<MI-tenant-id>/<MI-client-id>" } }
AKS kümesine bağlanma
komutunu kullanarak
az aks get-credentialsAKS kümesi kimlik bilgilerini alın ve bunları ayrı bir kubeconfig dosyasına kaydedin:az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME -a -f "${CLUSTER_NAME}.kubeconfig"Ortam değişkenini
KUBECONFIGyeni kubeconfig dosyasına işaret eden şekilde ayarlayın:export KUBECONFIG="$(pwd)/${CLUSTER_NAME}.kubeconfig"
Ad alanlarını ve hizmet hesaplarını yetkilendirme
Belirli konulara kimlik bağlama yoluyla yönetilen kimliği kullanma izni vermek için, rol tabanlı erişim denetimini (RBAC) yapılandırın ve aşağıdaki bildirimi uygulamak için
kubectl applykomutunu kullanın.Uyarı
Aşağıdaki örnek,
demoad alanındakidemohizmet hesabına açıkça başvurur. Belirli bir hizmet hesabına açıkça başvurmak bir seçenek olsa da, altındasubjectsbir hizmet hesapları koleksiyonuna başvurmak da mümkündür. Daha fazla bilgi için Kubernetes belgelerindeki Konulara başvurma konusuna bakın.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
Temizleme koruması ve Azure RBAC yetkilendirmesi ile anahtar kasası oluşturma
az keyvault createkomutunu ve--enable-purge-protectionile--enable-rbac-authorizationbayraklarını kullanarak, temizleme koruması ve Azure RBAC yetkilendirmesi etkinleştirilmiş bir anahtar kasası oluşturun. Hem temizleme koruması hem de Azure RBAC yetkilendirmesi için yapılandırılmış olan mevcut bir anahtar kasasını da kullanabilirsiniz.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
Anahtar kasasının kaynak kimliğini ve URL'sini alın
komutunu kullanarak
az keyvault showanahtar kasasının kaynak kimliğini alın ve bir ortam değişkeni olarak ayarlayın:export KEY_VAULT_RESOURCE_ID=$(az keyvault show --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query id \ --output tsv)komutunu kullanarak anahtar kasası URL'sini
az keyvault showalın ve bir ortam değişkeni olarak ayarlayın:export KEYVAULT_URL="$(az keyvault show \ --resource-group $RESOURCE_GROUP \ --name $KEY_VAULT_NAME \ --query properties.vaultUri \ --output tsv)"
Anahtar kasası erişimini yapılandırma ve sır oluşturma
Aşağıdaki adımlar, Pod'dan Azure Key Vault'taki gizli dizilere, anahtarlara veya sertifikalara nasıl erişeceğini gösterir. Bu bölümdeki örnekler, iş yükü kimlikleri için anahtar deposunda gizli bilgilere erişimi yapılandırır, ancak anahtarlara veya sertifikalara erişimi yapılandırmak için benzer adımları gerçekleştirebilirsiniz.
Aşağıdaki örnekte, pod'a anahtar kasasına erişim vermek için Azure RBAC izin modelinin nasıl kullanılacağı gösterilmektedir. Azure Key Vault için Azure RBAC izin modeli hakkında daha fazla bilgi için bkz. Uygulamalara Azure RBAC kullanarak Azure Key Vault'a erişim izni verme.
komutunu kullanarak
az ad signed-in-user showoturum açmış kullanıcının nesne kimliğini alın ve bir ortam değişkeni olarak ayarlayın:export CALLER_OBJECT_ID=$(az ad signed-in-user show --query id --output tsv)komutunu kullanarak anahtar kasasında kendinize Azure RBAC Key Vault Gizli Diziler Yetkilisi rolünü atayın.
az role assignment create --assignee $CALLER_OBJECT_ID \ --role "Key Vault Secrets Officer" \ --scope $KEY_VAULT_RESOURCE_IDaz keyvault secret setkomutunu kullanarak anahtar kasasında bir gizli dizi oluşturun.export KEY_VAULT_SECRET_NAME="my-secret" az keyvault secret set \ --vault-name $KEY_VAULT_NAME \ --name $KEY_VAULT_SECRET_NAME \ --value "Hello\!"komutunu kullanarak
az role assignment createrolünü UAMI'ye atayın.az role assignment create \ --assignee-object-id $MI_PRINCIPAL_ID \ --role "Key Vault Secrets User" \ --scope $KEY_VAULT_RESOURCE_ID \ --assignee-principal-type ServicePrincipal
Hizmet hesabına açıklama ekleme
kubectl annotatekomutunu kullanarak yönetilen kimlik kiracı kimliği ile hizmet hesabını etiketleyin.kubectl annotate sa demo -n demo azure.workload.identity/tenant-id=$MI_TENANT_IDkubectl annotatekomutunu kullanarak yönetilen kimlik istemci kimliğiyle hizmet hesabına açıklama ekleyin.kubectl annotate sa demo -n demo azure.workload.identity/client-id=$MI_CLIENT_ID
Örnek uygulamayı dağıtın
Aşağıdaki
kubectl applykomutunu kullanarak yönetilen kimliğin Azure Key Vault'a erişebilmesi için bir erişim belirteci alacak şekilde kimlik bağlama özelliğini kullanan örnek pod'u dağıtın.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
Örnek uygulamadan anahtar kasasına erişimi doğrulama
Pod'u açıklayın ve komutunu kullanarak
kubectl describe podortam değişkenlerinin ve öngörülen belirteç birimi bağlamalarının mevcut olduğunu onaylayın.kubectl describe pod demo -n demoBeklenen çıktı
AZURE_CLIENT_ID,AZURE_TENANT_ID,AZURE_FEDERATED_TOKEN_FILE,AZURE_AUTHORITY_HOSTveAZURE_KUBERNETES_TOKEN_PROXYiçin değerler içermelidir.AZURE_KUBERNETES_SNI_NAMEveAZURE_KUBERNETES_CA_FILE.Pod'un bir belirteç alıp
kubectl logskomutunu kullanarak kaynağa erişebildiğini doğrulayın.kubectl logs demo -n demoBaşarılı olursa, çıktı aşağıdaki örneğe benzer olmalıdır:
I1107 20:03:42.865180 1 main.go:77] "successfully got secret" secret="Hello!"
Kimlik bağlamalarını birden çok küme arasında ölçeklendirme
Kimlik bağlamaları, tek bir FIC kullanırken birden çok AKS kümesinin aynı UAMI'ye eşlenmesine olanak sağlar. Kimlik bağlamalarını birden çok küme arasında ölçeklendirmek için, aynı UAMI'ye eşlemek istediğiniz her ek küme için (küme başına yeni bir kimlik bağlaması oluşturma) örnek uygulamadan anahtar kasasına erişimi doğrulama yoluyla Kimlik bağlaması oluşturma adımlarını yineleyebilirsiniz.
Kaynakları temizle
Bu makalede oluşturduğunuz kaynaklara artık ihtiyacınız yoksa, gelecekteki maliyetleri önlemek için bunları temizleyebilirsiniz.
kubectl delete podkomutunu kullanarak podu silin.kubectl delete pod demo -n demokomutunu kullanarak ad alanını
kubectl delete nssilin.kubectl delete ns demokomutunu kullanarak
az group deletekaynak grubunu ve tüm ilgili kaynakları silin.az group delete --name $RESOURCE_GROUP --yes --no-wait