Aracılığıyla paylaş


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 imagecontainerNamekapsayı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.

  1. 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)
    
  2. 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
    
  3. Anahtar kasasında gizli dizi oluşturma:

    az keyvault secret set --vault-name $KVName --name $KVSecretName --value "Hello!"
    
  4. 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
    
  5. 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)
    
  6. 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 kullanın:

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çinsorun giderme kılavuzuna bakın.

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.