Freigeben über


Verwenden des Azure Key Vault Provider for Secrets Store CSI-Treibers in einem Azure Kubernetes Service (AKS)-Cluster

Der Azure Key Vault-Anbieter für Secrets Store Container Storage Interface (CSI)-Treiber ermöglicht die Integration eines Azure Key Vault als geheimen Speicher mit einem Azure Kubernetes Service (AKS)-Cluster über ein CSI-Volume.

Features

  • Einbinden von Geheimnissen, Schlüsseln und Zertifikaten in einen Pod mithilfe eines CSI-Volumes.
  • Unterstützung von CSI-Inlinevolumes.
  • Unterstützung für das Einbinden mehrerer Geheimnisspeicherobjekte als einzelnes Volume.
  • Unterstützt die Pod-Portabilität mit der SecretProviderClass benutzerdefinierten Ressourcendefinition (Custom Resource Definition, CRD).
  • Unterstützung von Windows-Containern.
  • Synchronisieren mit Kubernetes-Geheimnissen.
  • Unterstützung für die automatische Rotation eingebundener Inhalte und synchronisierter Kubernetes-Geheimnisse.

Einschränkungen

  • Ein Container, der ein ConfigMap oder Secret als subPath Volume-Mount verwendet, erhält keine automatisierten Updates, wenn das Secret rotiert wird, was eine Limitierung von Kubernetes ist. Damit die Änderungen wirksam werden, muss die Anwendung die geänderte Datei neu laden, indem sie entweder nach Änderungen im Dateisystem sucht oder indem sie den Pod neu starten. Weitere Informationen finden Sie unter Bekannte Einschränkungen des Secrets Store CSI-Treibers.
  • Das Add-On erstellt in der Knotenressourcengruppe (MC_) eine verwaltete Identität mit dem Namen azurekeyvaultsecretsprovider-xxxxx und weist sie dem Skalierungssatz für virtuelle Computer automatisch zu. Sie können diese verwaltete Identität oder Ihre eigene verwaltete Identität verwenden, um auf den Schlüsseltresor zuzugreifen. Es wird nicht unterstützt, um die Erstellung der Identität zu verhindern.

Voraussetzungen

Netzwerk

Rollen

Erstellen oder Aktualisieren eines AKS-Clusters

Erstellen Sie einen AKS-Cluster mit dem Azure Key Vault-Anbieter zur Unterstützung des Secrets Store CSI Driver.

  1. Erstellen Sie Variablen, die in den Befehlen zum Erstellen eines AKS-Clusters und eines Key Vault verwendet werden.

    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-Namen müssen global eindeutig, alphanumerisch einschließlich Bindestrichen und 3-24 Zeichen sein. Der Name des Schlüsseltresors verkettet den Wert der KEYVAULT_NAME-Variablen mit der 10-stelligen Zeichenfolge der myKeyVault-VariablenRANDOM_STRING.

  2. Erstellen Sie mithilfe des Befehls az group create eine Azure-Ressourcengruppe.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Verwenden Sie den Befehl az aks create mit dem Parameter --enable-addons azure-keyvault-secrets-provider, um einen AKS-Cluster mit Azure Key Vault Provider for Secrets Store CSI-Treiber zu erstellen.

    Der --enable-addons-Parameter erstellt eine vom Benutzer zugewiesene verwaltete Identität namens azurekeyvaultsecretsprovider-xxxx, die Sie zum Authentifizieren bei Ihrem Schlüsseltresor verwenden können. Die verwaltete Identität wird in der Knotenressourcengruppe (MC_) gespeichert und automatisch dem Skalierungssatz für virtuelle Computer zugewiesen. Sie können diese verwaltete Identität oder Ihre eigene verwaltete Identität verwenden, um auf den Schlüsseltresor zuzugreifen. Es wird nicht unterstützt, um die Erstellung der Identität zu verhindern.

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

    Tipp

    Wenn Sie Microsoft Entra Workload ID verwenden möchten, muss der az aks create-Befehl die Parameter --enable-oidc-issuer und --enable-workload-identity enthalten.

Überprüfen der verwalteten Identität

Führen Sie die folgenden Schritte aus, um zu überprüfen, ob die verwaltete Identität erstellt und dem Virtual Machine Scale Set des Clusters zugewiesen wurde.

  1. Überprüfen Sie, ob die verwaltete Identität erstellt und dem Cluster mithilfe des az aks show Befehls zugewiesen wurde.

    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"
        }
      }
    }
    

    Die resourceId Eigenschaft zeigt die Ressourcengruppe und den Namen der Identität azurekeyvaultsecretsprovider-myakscluster an.

  2. Vergewissern Sie sich, dass die manged-Identität dem Virtual Machine Scale Set der Knotenressourcengruppe zugewiesen ist.

    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]'
    

    Die Ausgabe zeigt die Microsoft.Compute/virtualMachineScaleSets Ressourcen-ID des Virtual Machines Scale Set und die Eigenschaft userAssignedIdentities mit einer Ressourcen-ID für azurekeyvaultsecretsprovider-myakscluster, die bestätigt, dass die Identität des Virtual Machine Scale Set zugewiesen ist.

Überprüfen der Installation des Azure Key Vault Provider for Secrets Store CSI-Treibers

  1. Rufen Sie die Anmeldeinformationen des AKS-Clusters mit dem Befehl az aks get-credentials ab.

    az aks get-credentials \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP
    
  2. Verifizieren Sie, ob die Installation mittels des kubectl get pods-Befehls abgeschlossen ist, der alle Pods mit den secrets-store-csi-driver- und secrets-store-provider-azure-Labels im kube-system-Namespace auflistet.

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

    Das o wide-Flag nimmt den Knoten, auf dem jeder Pod ausgeführt wird, in die Ausgabe auf.

    Ihre Ausgabe sollte in etwa dem folgendem Beispiel entsprechen:

    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
    

Erstellen einer Azure Key Vault-Instanz oder Verwenden einer vorhandenen

Erstellen oder aktualisieren Sie einen Schlüsseltresor mit Azure rollenbasierter Zugriffssteuerung (Azure RBAC), aktiviert mit dem Befehl az keyvault create oder az keyvault update mit der Kennzeichnung --enable-rbac-authorization.

Azure RBAC ist standardmäßig aktiviert, wenn Sie einen neuen Schlüsseltresor erstellen, auch wenn Sie den --enable-rbac-authorization Parameter nicht einschließen. Der Parameter wird benötigt, wenn Sie einen vorhandenen Schlüsseltresor aktualisieren, der Azure RBAC deaktiviert hat.

Weitere Informationen zu Schlüsseltresor-Berechtigungsmodellen und Azure RBAC finden Sie unter Bereitstellen des Zugriffs auf Schlüsseltresorschlüssel, Zertifikate und geheime Schlüssel mit einer rollenbasierten Azure-Zugriffssteuerung

  1. Aktivieren Sie die Azure RBAC-Autorisierung für einen neuen Schlüsseltresor, oder aktualisieren Sie einen vorhandenen Schlüsseltresor.

    Führen Sie den az keyvault create Befehl aus, um einen neuen Schlüsseltresor mit aktiviertem Azure RBAC zu erstellen.

    az keyvault create \
      --name $KEYVAULT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --enable-rbac-authorization
    
  2. Führen Sie den Befehl az keyvault show aus, um zu überprüfen, ob Azure RBAC für den Schlüsseltresor aktiviert ist.

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

    Die Ausgabe sollte sein true.

  3. Fügen Sie mithilfe des Befehls az role assignment create eine Rollenzuweisung für Ihr Benutzerkonto für den Schlüsseltresorbereich hinzu, um im nächsten Schritt ein Schlüsseltresor-Secret hinzufügen zu können.

    Die Rolle "Key Vault Secrets Officer" mit eindeutiger ID b86a8fe4-44ce-4948-aee5-eccb2c155cd7 wird hinzugefügt, und Sie können den Namen oder den eindeutigen Bezeichner verwenden. Die Verwendung des eindeutigen Bezeichners der Rolle ist eine bewährte Methode, um Probleme zu vermeiden, wenn sich der Rollenname ändert.

    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
    

    Es kann mehrere Minuten dauern, bis die Rollenzuweisung wirksam wird. Sie können überprüfen, ob die Rollenzuweisung mit dem folgenden Befehl erstellt wurde:

    az role assignment list \
      --assignee-object-id $MYID \
      --scope $KEYVAULT_ID \
      --query '[].{Role:roleDefinitionName, Scope:scope}' \
      --output table
    
  4. Erstellen Sie mit dem Befehl az keyvault secret set in dem Schlüsseltresor ein Nur-Text-Secret in dem Schlüsseltresor mit dem Namen ExampleSecret.

    Ihr Key Vault kann Schlüssel, Geheimnisse und Zertifikate speichern. Der value Parameter verwendet die RANDOM_STRING Variable, um einen eindeutigen Wert für den geheimen Schlüssel zu erstellen.

    az keyvault secret set \
      --vault-name $KEYVAULT_NAME \
      --name ExampleSecret \
      --value MyAKSExampleSecret${RANDOM_STRING}
    
  5. Überprüfen Sie mit dem Befehl az keyvault secret show, ob das Secret dem Schlüsseltresor hinzugefügt wurde.

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

Bereinigen von Ressourcen

Wenn Sie zum nächsten Artikel wechseln und diese Ressourcen benötigen, ignorieren Sie die folgenden Schritte. Andernfalls sollten Sie die in diesem Artikel erstellten Ressourcen löschen, wenn Sie fertig sind und nicht beabsichtigen, den nächsten Artikel fortzusetzen, um unnötige Kosten zu vermeiden.

  1. Entfernen Sie die Anmeldeinformationen Ihres Clusters aus Ihrer lokalen .kube/config-Datei.

    KUBE_CONTEXT=$(kubectl config current-context)
    kubectl config delete-context $KUBE_CONTEXT
    
  2. Löschen Sie die Ressourcengruppe und alle darin enthaltenen Ressourcen, einschließlich Ressourcen in der Knotenressourcengruppe (MC_) mithilfe des az group delete Befehls.

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

Nächste Schritte

In diesem Artikel haben Sie erfahren, wie Sie den Azure Key Vault Provider for Secrets Store CSI-Treiber in einem AKS-Cluster verwenden. Bereitstellen einer Identität für den Zugriff auf den Azure-Schlüsseltresor. Um zu erfahren, wie das geht, fahren Sie mit dem nächsten Artikel fort.