Azure Arc kümesi tarafından etkinleştirilen bir AKS'de İş Yükü Kimliğini dağıtma ve yapılandırma (önizleme)
Şunlar için geçerlidir: Azure Yerel, sürüm 23H2
İş yükü kimliği federasyonu, Kubernetes gibi bir dış kimlik sağlayıcısından (IdP) gelen belirteçlere güvenmek için Microsoft Entra Kimliği'nde kullanıcı tarafından atanan yönetilen kimliği veya uygulama kaydını yapılandırmanıza olanak tanır ve Azure Key Vault veya Azure Blob depolama gibi Microsoft Entra tarafından korunan kaynaklara erişim sağlar.
Azure Arc tarafından etkinleştirilen Azure Kubernetes Service (AKS), iş yükü kimliği etkinleştirilmiş Kubernetes kümelerini kolayca dağıtmanıza olanak tanıyan yönetilen bir Kubernetes hizmetidir. Bu makalede aşağıdaki görevlerin nasıl gerçekleştirildiği açıklanmaktadır:
- İş yükü kimliği etkinleştirilmiş (önizleme) bir AKS Arc kümesi oluşturun.
- Bir Kubernetes hizmet hesabı oluşturun ve bunu Azure Yönetilen Kimliği'ne bağlayın.
- OIDC verene güvenmek için yönetilen kimlikte bir federasyon kimlik bilgisi oluşturun.
- Uygulamanızı dağıtın.
- Örnek: Azure anahtar kasasındaki gizli dizilere kümedeki bir pod erişimi verin.
İş yükü kimlik federasyonuna kavramsal genel bakış için bkz. Azure Arc özellikli Kubernetes'te İş yükü kimliği federasyonu (önizleme).
Önemli
Bu önizleme özellikleri self servis ve kabul temelinde kullanılabilir. Önizlemeler "olduğu gibi" ve "kullanılabilir" olarak sağlanır ve hizmet düzeyi sözleşmelerinin ve sınırlı garantinin dışında tutulur. Azure Arc önizlemeleri tarafından etkinleştirilen Azure Kubernetes Service, müşteri desteği kapsamındadır.
Not
Genel önizlemede, Azure Yerel'de AKS sürüm 23H2, AKS kümesi oluşturma sırasında iş yükü kimliğini etkinleştirmeyi destekler. Ancak, küme oluşturulduktan sonra iş yükü kimliğini etkinleştirme veya daha sonra devre dışı bırakma şu anda desteklenmiyor.
Önkoşullar
Azure Arc etkin bir Kubernetes kümesi dağıtmadan önce aşağıdaki önkoşullara sahip olmanız gerekir:
- Azure aboneliğiniz yoksa başlamadan önce ücretsiz hesap oluşturun.
- Bu makale, Azure CLI'nın 1.4.23 veya sonraki bir sürümünü gerektirir. Azure Cloud Shell kullanıyorsanız en son sürüm zaten yüklüdür.
Ortam değişkenlerini dışarı aktarma
Gerekli kimlikleri yapılandırma adımlarını basitleştirmeye yardımcı olmak için, aşağıdaki komutlar bu makaledeki örneklerde başvuruda bulunan ortam değişkenlerini tanımlar. Aşağıdaki değerleri kendi değerlerinizle değiştirin:
$AZSubscriptionID = "00000000-0000-0000-0000-000000000000"
$Location = "westeurope"
$resource_group_name = "myResourceGroup"
$aks_cluster_name = "myAKSCluster"
$SERVICE_ACCOUNT_NAMESPACE = "default"
$SERVICE_ACCOUNT_NAME = "workload-identity-sa"
$FedIdCredentialName = "myFedIdentity"
$MSIName = "myIdentity"
# To access key vault secrets from a pod in the cluster, include these variables:
$KVName = "KV-workload-id"
$KVSecretName= "KV-secret"
Etkin aboneliği ayarlama
İlk olarak aboneliğinizi geçerli etkin abonelik olarak ayarlayın. az account set komutunu abonelik kimliğiniz ile çalıştırın:
az login
az account set -s $AZSubscriptionID
Kaynak grubu oluşturma
Azure kaynak grubu, Azure kaynaklarının dağıtıldığı ve yönetildiği mantıksal bir grupdur. Bir kaynak grubu oluşturduğunuzda, bir konum belirtmeniz istenir. Bu konum, kaynak grubu meta verilerinizin depolama konumudur ve kaynak oluşturma sırasında başka bir bölge belirtmezseniz kaynaklarınızın Azure'da çalıştırıldığı konumdur.
Kaynak grubu oluşturmak için az group create komutunu çalıştırın:
az group create --name $resource_group_name --location $Location
Aşağıdaki örnek çıktıda bir kaynak grubunun başarıyla oluşturulması gösterilmektedir:
{
"id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
"location": "westeurope",
"managedBy": null,
"name": "$resource_group_name",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
1. Adım: İş yükü kimliği etkin bir AKS Arc kümesi oluşturma
AKS Arc kümesi oluşturmak için hem hem de $customlocation_ID
$logicnet_Id
değerlerine ihtiyacınız vardır.
-
$customlocation_ID
: Özel konumun Azure Resource Manager kimliği. Özel konum, Azure Yerel, sürüm 23H2 küme dağıtımı sırasında yapılandırılır. Altyapı yöneticiniz size özel konumun Resource Manager kimliğini vermelidir. Ayrıca, altyapı yöneticisi özel bir konum adı ve kaynak grubu adı sağlıyorsa Resource Manager kimliğini kullanarak$customlocation_ID = $(az customlocation show --name "<your-custom-location-name>" --resource-group $resource_group_name --query "id" -o tsv)
da alabilirsiniz. -
$logicnet_Id
: Aşağıdaki adımları izleyerek oluşturulan Azure Yerel mantıksal ağının Azure Resource Manager kimliği. Altyapı yöneticiniz size mantıksal ağın Resource Manager kimliğini vermelidir. Altyapı yöneticisi bir mantıksal ağ adı ve kaynak grubu adı sağlıyorsa resource Manager kimliğini kullanarak$logicnet_Id = $(az stack-hci-vm network lnet show --name "<your-lnet-name>" --resource-group $resource_group_name --query "id" -o tsv)
da alabilirsiniz.
az aksarc create komutunu parametresiyle --enable-oidc-issuer --enable-workload-identity
çalıştırın. entra-admin-group-object-ids bilgilerinizi sağlayın ve ara sunucu modu erişimi için Microsoft Entra ID yönetici grubunun üyesi olduğunuzdan emin olun:
az aksarc create
-n $aks_cluster_name -g $resource_group_name
--custom-location $customlocation_ID --vnet-ids $logicnet_Id
--aad-admin-group-object-ids <entra-admin-group-object-ids>
--generate-ssh-keys
--enable-oidc-issuer --enable-workload-identity
Birkaç dakika sonra komut tamamlanıp kümeyle ilgili JSON biçimli bilgileri döndürür.
Sağlanan küme başarıyla oluşturulduktan sonra iş yükü kimlik uzantısının dağıtılması biraz zaman alabilir. İş yükü kimlik uzantısı durumunu denetlemek için aşağıdaki komutu kullanın:
az connectedk8s show -n $aks_cluster_name -g $resource_group_name
# agentState = "Succeeded"
"agentPublicKeyCertificate": "",
"agentVersion": "1.21.10",
"arcAgentProfile": {
"agentAutoUpgrade": "Enabled",
"agentErrors": [],
"agentState": "Succeeded",
"desiredAgentVersion": "",
"systemComponents": null
# oidcIssuerProfile "enabled": true and "issuerUrl" present
"oidcIssuerProfile": {
"enabled": true,
"issuerUrl": "https://oidcdiscovery-{location}-endpoint-1111111111111111.000.azurefd.net/00000000-0000-0000-0000-000000000000/11111111-1111-1111-1111-111111111111/"}
Azure portalında, Kubernetes kümenizin Özellikler bölümünde wiextension uzantısını görüntüleyebilirsiniz.
Önemli
AKS Arc kümelerine yönelik güvenlik geliştirmesinin bir parçası olarak, iş yükü kimliği etkinleştirme iki değişiklik tetikler. İlk olarak, Kubernetes hizmet hesabı imzalama anahtarı her 45 günde bir otomatik olarak döndürülür ve 90 gün boyunca geçerli kalır. İkincisi, --service-account-extend-token-expiration
bayrak devre dışı bırakılarak belirteç geçerliliği bir yıldan en fazla 24 saate indirilir.
OIDC veren URL'sini bir ortam değişkenine kaydetme
AKS kümesi başarıyla oluşturulduktan sonra OIDC veren URL'sini alabilir ve bir ortam değişkenine kaydedebilirsiniz. Şu komutu çalıştırın:
$SERVICE_ACCOUNT_ISSUER =$(az connectedk8s show --n $aks_cluster_name --resource-group $resource_group_name --query "oidcIssuerProfile.issuerUrl" --output tsv)
2. Adım: Kubernetes hizmet hesabı oluşturma ve bunu Azure Yönetilen Kimliği'ne bağlama
İlk olarak yönetilen kimlik oluşturun. az identity create komutunu çalıştırın:
az identity create --name $MSIName --resource-group $resource_group_name --location $Location --subscription $AZSubscriptionID
Ardından yönetilen kimliğin istemci kimliği için değişkenler oluşturun:
$MSIId=$(az identity show --resource-group $resource_group_name --name $MSIName --query 'clientId' --output tsv)
$MSIPrincipalId=$(az identity show --resource-group $resource_group_name --name $MSIName --query 'principalId' --output tsv)
Kubernetes hizmet hesabı oluşturma
Bu adımda bir Kubernetes hizmet hesabı oluşturacak ve önceki adımda oluşturduğunuz yönetilen kimliğin istemci kimliğiyle buna ek açıklama ekleyebilirsiniz.
Kümenize bir istemci cihazından erişmek için küme bağlantısı kullanın. Daha fazla bilgi için bkz. İstemci cihazından kümenize erişme:
az connectedk8s proxy -n $aks_cluster_name -g $resource_group_name
Yeni bir CLI komut penceresi açın. Aşağıdaki komutları kopyalayıp yapıştırın:
$yaml = @"
apiVersion: v1
kind: ServiceAccount
metadata:
annotations:
azure.workload.identity/client-id: $MSIId
name: $SERVICE_ACCOUNT_NAME
namespace: $SERVICE_ACCOUNT_NAMESPACE
"@
$yaml = $yaml -replace '\$MSIId', $MSIId `
-replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME `
-replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE
$yaml | kubectl apply -f -
Aşağıdaki çıkışta hizmet hesabının başarıyla oluşturulduğu gösterilmektedir:
serviceaccount/workload-identity-sa created
3. Adım: OIDC verene güvenmek için yönetilen kimlikte federasyon kimlik bilgisi oluşturma
İlk olarak, bir federasyon kimliği kimlik bilgisi oluşturun. Yönetilen kimlik, hizmet hesabı veren ve konu arasında federasyon kimliği kimlik bilgilerini oluşturmak için az identity federated-credential create komutunu çağırın. Microsoft Entra'daki federasyon kimlik bilgileri hakkında daha fazla bilgi için bkz . Microsoft Entra Id'de federasyon kimlik bilgilerine genel bakış.
# Create a federated credential
az identity federated-credential create --name $FedIdCredentialName --identity-name $MSIName --resource-group $resource_group_name --issuer $SERVICE_ACCOUNT_ISSUER --subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}"
# Show the federated credential
az identity federated-credential show --name $FedIdCredentialName --resource-group $resource_group_name --identity-name $MSIName
Not
Federasyon kimlik bilgilerini ekledikten sonra yayılması birkaç saniye sürer. Hemen ardından yapılan belirteç istekleri önbellek yenilenene kadar başarısız olabilir. Bu sorunu önlemek için, federasyon kimliği kimlik bilgilerini oluşturduktan sonra kısa bir gecikme eklemeyi göz önünde bulundurun.
4. Adım: Uygulamanızı dağıtma
Uygulama podlarınızı dağıttığınızda bildirim, Kubernetes hizmet hesabı oluşturma adımında oluşturulan hizmet hesabına başvurmalıdır. Aşağıdaki bildirim, özellikle ve metadata\namespace
özellikleri olmak üzere hesaba nasıl başvuracaklarını spec\serviceAccountName
gösterir. için bir görüntü ve için image
containerName
kapsayıcı adı belirttiğinizden emin olun:
$image = "<image>" # Replace <image> with the actual image name
$containerName = "<containerName>" # Replace <containerName> with the actual container name
$yaml = @"
apiVersion: v1
kind: Pod
metadata:
name: sample-quick-start
namespace: $SERVICE_ACCOUNT_NAMESPACE
labels:
azure.workload.identity/use: "true" # Required. Only pods with this label can use workload identity.
spec:
serviceAccountName: $SERVICE_ACCOUNT_NAME
containers:
- image: $image
name: $containerName
"@
# Replace variables within the YAML content
$yaml = $yaml -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE `
-replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME
# Apply the YAML configuration
$yaml | kubectl apply -f -
Önemli
İş yükü kimliği kullanan uygulama podlarının etiketi azure.workload.identity/use: "true"
pod belirtiminde içerdiğinden emin olun. Aksi takdirde podlar yeniden başlatıldıktan sonra başarısız olur.
Örnek: Azure Key Vault'a erişim izinleri verme
Bu adımdaki yönergelerde, Pod'dan Azure anahtar kasasında gizli dizilere, anahtarlara veya sertifikalara erişme açıklanmaktadır. Bu bölümdeki örnekler, iş yükü kimliği için anahtar kasasında gizli dizilere erişimi yapılandırabilir, ancak anahtarlara veya sertifikalara erişimi yapılandırmak için benzer adımları gerçekleştirebilirsiniz.
Aşağıdaki örnekte, anahtar kasasına pod erişimi vermek için Azure rol tabanlı erişim denetimi (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 . Azure RBAC kullanarak uygulamalara Azure anahtar kasasına erişim izni verme.
Temizleme koruması ve RBAC yetkilendirmesi etkinleştirilmiş bir anahtar kasası oluşturun. Hem temizleme koruması hem de RBAC yetkilendirmesi için yapılandırılmışsa mevcut bir anahtar kasasını da kullanabilirsiniz:
az keyvault create --name $KVName --resource-group $resource_group_name --location $Location --enable-purge-protection --enable-rbac-authorization # retrieve the key vault ID for role assignment $KVId=$(az keyvault show --resource-group $resource_group_name --name $KVName --query id --output tsv)
Yeni anahtar kasasında gizli dizi oluşturabilmek için RBAC Anahtar Kasası Gizli DiziLeri Yetkilisi rolünü kendinize atayın. Yeni rol atamalarının yayılması beş dakika kadar sürebilir ve yetkilendirme sunucusu tarafından güncelleştirilebilir.
$CALLER_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv) az role assignment create --assignee-object-id $CALLER_OBJECT_ID --role "Key Vault Secrets Officer" --scope $KVId --assignee-principal-type ServicePrincipal
Anahtar kasasında gizli dizi oluşturma:
az keyvault secret set --vault-name $KVName --name $KVSecretName --value "Hello!"
Key Vault Gizli Dizileri Kullanıcı rolünü daha önce oluşturduğunuz kullanıcı tarafından atanan yönetilen kimliğe atayın. Bu adım, yönetilen kimliğe anahtar kasasından gizli dizileri okuma izni verir:
$IDENTITY_PRINCIPAL_ID=$(az identity show --name "$USER_ASSIGNED_IDENTITY_NAME" --resource-group "$resource_group_name" --query principalId --output tsv) az role assignment create --assignee-object-id $IDENTITY_PRINCIPAL_ID --role "Key Vault Secrets User" --scope $KVId --assignee-principal-type ServicePrincipal
Anahtar kasası URL'si için bir ortam değişkeni oluşturun:
$KVUrl=$(az keyvault show --resource-group $resource_group_name --name $KVName --query properties.vaultUri --output tsv)
Hizmet hesabına ve anahtar kasası URL'sine başvuran bir pod dağıtın:
$yaml = @" apiVersion: v1 kind: Pod metadata: name: sample-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: $KVUrl - name: SECRET_NAME value: $KVSecretName nodeSelector: kubernetes.io/os: linux "@ # Replace variables within the YAML content $yaml = $yaml -replace '\$SERVICE_ACCOUNT_NAMESPACE', $SERVICE_ACCOUNT_NAMESPACE ` -replace '\$SERVICE_ACCOUNT_NAME', $SERVICE_ACCOUNT_NAME ` -replace '\$KVUrl', $KVUrl ` -replace '\$KVSecretName', $KVSecretName # Apply the YAML configuration $yaml | kubectl --kubeconfig <path-to-aks-cluster-kubeconfig> apply -f -
AKS Arc kümesini silme
AKS Arc kümesini silmek için az aksarc delete komutunu
az aksarc delete -n $aks_cluster_name -g $resource_group_name
Not
PodDisruptionBudget (PDB) kaynaklarıyla AKS Arc kümesini silerken bilinen bir sorun vardır: silme işlemi bu PDB kaynaklarını kaldıramayabilir. Microsoft sorunun farkındadır ve bir düzeltme üzerinde çalışmaktadır.
PDB, iş yükü kimliği etkin AKS Arc kümelerinde varsayılan olarak yüklenir. İş yükü kimliğinin etkinleştirildiği AKS Arc kümesini silmek için
Sonraki adımlar
Bu makalede bir Kubernetes kümesi dağıttınız ve bu kümeyi uygulama iş yüklerinin bu kimlik bilgileriyle kimlik doğrulaması için hazırlığında bir iş yükü kimliği kullanacak şekilde yapılandırdıysanız. Artık uygulamanızı dağıtmaya ve Azure Identity istemci kitaplığının en son sürümüyle iş yükü kimliğini kullanacak şekilde yapılandırmaya hazırsınız.