Azure Kubernetes Service (AKS) kümesinde Gizli Depo CSI Sürücüsü için Azure Key Vault'u sağlayıcı olarak kullanma

Azure Key Vault sağlayıcısı, Gizli Anahtar Deposu Kapsayıcı Depolama Arabirimi (CSI) Sürücüsü için, bir Azure Key Vault'un bir CSI birimi aracılığıyla Azure Kubernetes Service (AKS) kümesiyle gizli anahtar deposu olarak bütünleştirilmesine olanak tanır.

Özellikler

  • CSI birimi kullanarak gizli bilgileri, anahtarları ve sertifikaları bir poda bağlar.
  • CSI yerleşik birimlerini destekler.
  • Birden çok gizli saklama deposu nesnesini tek bir hacim olarak bağlamayı destekler.
  • Özel Kaynak Tanımı (CRD) ile SecretProviderClass pod taşınabilirliğini destekler.
  • Windows kapsayıcılarını destekler.
  • Kubernetes sırlarıyla senkronize edilir.
  • Montelemiş içeriklerin otomatik döndürülmesini ve eşitlenmiş Kubernetes gizli dizilerini destekler.

Sınırlamalar

  • ConfigMap veya Secret'i bir subPath olarak birim bağlaması yapan bir kapsayıcı, gizli anahtar döndürüldüğünde otomatik güncellemeler almaz, bu bir Kubernetes sınırlamasıdır. Değişikliklerin etkili olması için, uygulamanın dosya sistemindeki değişiklikleri izleyerek veya podu yeniden başlatarak değiştirilen dosyayı yeniden yüklemesi gerekir. Daha fazla bilgi için Secrets Store CSI Driver bilinen sınırlamaları bölümüne bakın.
  • Eklenti, düğüm kaynak grubunda (azurekeyvaultsecretsprovider-xxxxx) adlı MC_ bir yönetilen kimlik oluşturur ve bunu otomatik olarak Sanal Makine Ölçek Kümesi'ne atar. Anahtar kasasına erişmek için bu yönetilen kimliği veya kendi yönetilen kimliğinizi kullanabilirsiniz. Kimlik oluşturmanın engellenmesi desteklenmiyor.

Önkoşullar

  • Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.
  • Azure CLI sürümünüzün 2.30.0 veya üzeri olup olmadığını denetleyin. Önceki bir sürümse en son sürümü yükleyin.

Görevler

AKS kümesi oluşturma veya güncelleştirme

Azure Key Vault sağlayıcısı ile Secrets Store CSI Sürücüsü desteğine sahip bir AKS kümesi oluşturun.

  1. AKS kümesi ve Key Vault oluşturmak için komutlarda kullanılan değişkenler oluşturun.

    export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM")
    export KEYVAULT_NAME=myKeyVault${RANDOM_STRING}
    export RESOURCE_GROUP=myResourceGroup
    export CLUSTER_NAME=myAKSCluster
    export LOCATION=eastus2
    

    Azure Key Vault adları, küresel olarak benzersiz, kısa çizgi içeren alfasayısal ve 3-24 karakter arasında olmalıdır. Anahtar kasası adı, değişkenin KEYVAULT_NAME değerini değişkenin myKeyVaultRANDOM_STRING 10 karakter dizesiyle birleştirir.

  2. komutunu kullanarak az group create bir Azure kaynak grubu oluşturun.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. az aks create komutunu ve --enable-addons azure-keyvault-secrets-provider parametresini kullanarak, Gizli Saklama CSI Sürücüsü yeteneği için Azure Key Vault sağlayıcısı olan bir AKS kümesi oluşturun.

    --enable-addons parametresi, azurekeyvaultsecretsprovider-xxxx adıyla anılan ve anahtar kasanıza kimlik doğrulamak için kullanabileceğiniz, kullanıcı tarafından atanan bir yönetilen kimlik oluşturur. Yönetilen kimlik düğüm kaynak grubunda (MC_) depolanır ve otomatik olarak Sanal Makine Ölçek Kümesine atanır. Anahtar kasasına erişmek için bu yönetilen kimliği veya kendi yönetilen kimliğinizi kullanabilirsiniz. Kimlik oluşturmanın engellenmesi desteklenmiyor.

    az aks create \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP \
      --enable-addons azure-keyvault-secrets-provider \
      --generate-ssh-keys
    

    Tip

    Microsoft Entra İş Yükü Kimliğini kullanmak istiyorsanız, az aks create komutu --enable-oidc-issuer ve --enable-workload-identity parametrelerini içermelidir.

Yönetilen kimliği doğrulayın

Yönetilen kimliğin oluşturulup kümenin Sanal Makine Ölçek Kümesine atandığını doğrulamak için aşağıdaki adımları kullanın.

  1. komutunu kullanarak az aks show yönetilen kimliğin oluşturulduğunu ve kümeye atandığını doğrulayın.

    az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query addonProfiles
    
    {
      "azureKeyvaultSecretsProvider": {
        "config": {
          "enableSecretRotation": "false",
          "rotationPollInterval": "2m"
        },
        "enabled": true,
        "identity": {
          "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
          "objectId": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
          "resourceId": "/subscriptions/<subscriptionID>/resourcegroups/MC_myResourceGroup_myAKSCluster_eastus2/providers/Microsoft.ManagedIdentity/userAssignedIdentities/azurekeyvaultsecretsprovider-myakscluster"
        }
      }
    }
    

    özelliği kaynak resourceId grubunu ve kimliğin adını azurekeyvaultsecretsprovider-myaksclustergösterir.

  2. Düğüm kaynak grubunun Sanal Makine Ölçek Kümesine manged kimliğinin atandığını doğrulayın.

    NODE_RG=$(az aks show \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP \
      --query nodeResourceGroup --output tsv)
    
    VMSS_NAME=$(az vmss list \
      --resource-group $NODE_RG \
      --query [].name --output tsv)
    
    az vmss show --name $VMSS_NAME --resource-group $NODE_RG --query '[id, identity]'
    

    Çıktı, Sanal Makine Ölçek Kümesi için Microsoft.Compute/virtualMachineScaleSets kaynak kimliğini ve kimliğin Sanal Makine Ölçek Kümesi'ne atandığını onaylayan azurekeyvaultsecretsprovider-myakscluster kaynak kimliğine sahip userAssignedIdentities özelliğini gösterir.

Gizli Anahtar Deposu CSI Sürücüsü kurulumu için Azure Key Vault sağlayıcısını doğrulayın

  1. komutunu kullanarak az aks get-credentials AKS kümesi kimlik bilgilerini alın.

    az aks get-credentials \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP
    
  2. kube-system ad alanındaki secrets-store-csi-driver ve secrets-store-provider-azure etiketlerine sahip tüm podları listeleyen kubectl get pods komutunu kullanarak yüklemenin tamamlandığını doğrulayın.

    kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver,secrets-store-provider-azure)' -o wide
    

    Çıktıda, o wide bayrağı her pod'un çalıştığı düğümü içerir.

    Çıkışınız aşağıdaki örnek çıkışa benzer olmalıdır:

    NAME                                     READY   STATUS    RESTARTS   AGE    NODE
    aks-secrets-store-csi-driver-4vpkj       3/3     Running   2          4m25s  aks-nodepool1-12345678-vmss000002
    aks-secrets-store-csi-driver-ctjq6       3/3     Running   2          4m21s  aks-nodepool1-12345678-vmss000001
    aks-secrets-store-csi-driver-tlvlq       3/3     Running   2          4m24s  aks-nodepool1-12345678-vmss000000
    aks-secrets-store-provider-azure-5p4nb   1/1     Running   0          4m21s  aks-nodepool1-12345678-vmss000000
    aks-secrets-store-provider-azure-6pqmv   1/1     Running   0          4m24s  aks-nodepool1-12345678-vmss000001
    aks-secrets-store-provider-azure-f5qlm   1/1     Running   0          4m25s  aks-nodepool1-12345678-vmss000002
    

Mevcut Azure Key Vault'u oluşturma veya kullanma

Azure rol tabanlı erişim denetimi (Azure RBAC) etkinleştirilmiş bir anahtar kasası oluşturun veya güncelleştirin; bunu, az keyvault create komutunu veya az keyvault update komutunu, --enable-rbac-authorization bayrağı ile kullanarak gerçekleştirin.

Parametresini eklemeseniz --enable-rbac-authorization bile yeni bir anahtar kasası oluşturduğunuzda Azure RBAC varsayılan olarak etkinleştirilir. Parametresi, Azure RBAC'nin devre dışı bırakılmış olduğu mevcut bir anahtar kasasını güncelleştirdiğinizde gereklidir.

Anahtar kasası izin modelleri ve Azure RBAC hakkında daha fazla bilgi için bkz. Azure rol tabanlı erişim denetimiyle Key Vault anahtarlarına, sertifikalarına ve gizli dizilerine erişim sağlama

  1. Yeni bir anahtar kasası için Azure RBAC yetkilendirmesini etkinleştirin veya mevcut bir anahtar kasasını güncelleştirin.

    az keyvault create komutunu çalıştırarak Azure RBAC'nin etkin olduğu yeni bir anahtar kasası oluşturun.

    az keyvault create \
      --name $KEYVAULT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --enable-rbac-authorization
    
  2. Anahtar kasasında az keyvault show Azure RBAC'nin etkinleştirildiğini doğrulamak için komutunu çalıştırın.

    az keyvault show \
      --name $KEYVAULT_NAME \
      --resource-group $RESOURCE_GROUP \
      --query properties.enableRbacAuthorization
    

    Çıkış olmalıdır true.

  3. Bir sonraki adımda bir anahtar kasası sırrı ekleyebilmeniz için az role assignment create komutunu kullanarak anahtar kasası kapsamına kullanıcı hesabınız için bir rol ataması ekleyin.

    Benzersiz tanımlayıcısıyla Key Vault Gizli Anahtar Sorumlusu rolü eklenmiştir ve bu rolü adı veya benzersiz tanımlayıcısı ile kullanabilirsiniz. Rolün benzersiz tanımlayıcısını kullanmak, rol adı değişirse sorunları önlemek için en iyi yöntemdir.

    KEYVAULT_ID=$(az keyvault show \
      --name $KEYVAULT_NAME \
      --resource-group $RESOURCE_GROUP \
      --query id -o tsv)
    
    MYID=$(az ad signed-in-user show --query id --output tsv)
    
    az role assignment create \
      --assignee-object-id $MYID \
      --role "b86a8fe4-44ce-4948-aee5-eccb2c155cd7" \
      --scope $KEYVAULT_ID \
      --assignee-principal-type User
    

    Rol atamasının geçerlilik kazanması birkaç dakika sürebilir. Rol atamasının oluşturulduğunu aşağıdaki komutla doğrulayabilirsiniz:

    az role assignment list \
      --assignee-object-id $MYID \
      --scope $KEYVAULT_ID \
      --query '[].{Role:roleDefinitionName, Scope:scope}' \
      --output table
    
  4. az keyvault secret set komutunu kullanarak, anahtar kasasında ExampleSecret adlı bir düz metin secret oluşturun.

    Anahtar kasanız anahtarları, gizli bilgileri ve sertifikaları depolayabilir. value parametresi, gizli için benzersiz bir değer oluşturmak üzere RANDOM_STRING değişkenini kullanır.

    az keyvault secret set \
      --vault-name $KEYVAULT_NAME \
      --name ExampleSecret \
      --value MyAKSExampleSecret${RANDOM_STRING}
    
  5. az keyvault secret show komutunu kullanarak gizlinin anahtar kasasına eklendiğini doğrulayın.

    az keyvault secret show --vault-name $KEYVAULT_NAME --name ExampleSecret
    

Kaynakları temizle

Sonraki makaleye gidiyorsanız veya bu kaynaklara ihtiyacınız varsa, aşağıdaki adımları yoksayın. Aksi takdirde, işiniz bittiyse ve sonraki makaleye devam etmek istemiyorsanız, gereksiz maliyetlerden kaçınmak için bu makalede oluşturulan kaynakları silmeniz gerekir.

  1. Kümenizin kimlik bilgilerini yerel .kube/config dosyanızdan kaldırın.

    KUBE_CONTEXT=$(kubectl config current-context)
    kubectl config delete-context $KUBE_CONTEXT
    
  2. komutunu kullanarak MC_ düğüm kaynak grubundaki (az group delete) kaynaklar dahil olmak üzere kaynak grubunu ve içindeki tüm kaynakları silin.

    az group delete --name $RESOURCE_GROUP --yes --no-wait
    

Sonraki adımlar

Bu makalede, AKS kümesinde Secrets Store CSI Driver için Azure Key Vault sağlayıcısını kullanmayı öğrendiniz. Şimdi Azure Key Vault'a erişmek için bir kimlik sağlamanız gerekir. Nasıl yapılacağını öğrenmek için sonraki makaleye geçin.