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 Local üzerinde AKS için geçerlidir
İş 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: Kümedeki bir pod'a Azure anahtar kasasındaki gizli verilere erişim izni 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 tarafından, mümkün olan en iyi çaba temelinde kısmi olarak kapsam altına alınmaktadır.
Not
Genel önizlemede, Azure Yerel üzerinde AKS, 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.
- Azure CLI'nın 1.4.23 veya sonraki bir sürümü. 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ştirmek için aşağıdaki komutları çalıştırarak ortam değişkenlerini tanımlayın. Bu makaledeki örnekler bu değişkenlere başvurur. 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 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 almak için$customlocation_ID = $(az customlocation show --name "<your-custom-location-name>" --resource-group $resource_group_name --query "id" -o tsv)komutunu çalıştırabilirsiniz. -
$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. Ayrıca, altyapı yöneticisi bir mantıksal ağ adı ve kaynak grubu adı sağlıyorsa, komutunu çalıştırarak$logicnet_Id = $(az stack-hci-vm network lnet show --name "<your-lnet-name>" --resource-group $resource_group_name --query "id" -o tsv)Resource Manager kimliğini de 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. İ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şturuyor ve bunu, önceki adımda oluşturduğunuz yönetilen kimliğin istemci kimliğiyle ek açıklamalarla etiketliyorsunuz.
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 sağlayıcısına güvenmek için yönetilen kimlikte federe kimlik bilgisi oluşturma
Öncelikle, bir federe kimlik bilgisi oluşturun. Yönetilen kimlik, hizmet hesabı veren kimliğini ve konu ile birleşik kimlik kimlik bilgilerini oluşturmak için az identity federated-credential create komutunu kullanı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 sonrasında yapılan belirteç istekleri, önbellek yenilenene kadar başarısız olabilir. Bu sorunu önlemek için, federasyon kimlik bilgilerini oluşturduktan sonra kısa bir gecikme eklemeyi düşünün.
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, hesaba nasıl başvurulacağını, özellikle metadata\namespace ve spec\serviceAccountName özelliklerini gösterir. `image` için bir görüntü ve `containerName` için bir konteyner adı belirlemeniz gerektiğinden 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, pod belirtiminde azure.workload.identity/use: "true" etiketinin bulunduğundan emin olun. Aksi takdirde, podlar yeniden başlatıldıktan sonra çalışmaz.
Örnek: Azure Key Vault'a erişim izinleri verme
Bu adımdaki yönergeler, Azure anahtar kasasındaki gizli bilgiler, anahtarlar veya sertifikalara poddan nasıl erişileceğini açıklamaktadır. 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 örnek, pod'un anahtar kasasına erişimini sağlamak için Azure rol tabanlı erişim denetimi (Azure RBAC) izin modelinin nasıl kullanılacağını göstermektedir. 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 ServicePrincipalAnahtar kasasında bir gizli oluşturun:
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 bilgileri 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 ServicePrincipalAnahtar 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ını ve anahtar kasası URL'sini kullanan 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 bir AKS Arc kümesini sildiğinizde, 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 uygulama iş yüklerinin kimlik doğrulaması yapabilmesi için bu kümeyi bir iş yükü kimliği kullanacak şekilde yapılandırdını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.
Azure Arc tarafından etkinleştirilen AKS güvenlik kitabındaki yönergeleri izleyerek kümenizin korunmasına başka yollarla da yardımcı olabilirsiniz.