Freigeben über


Azure Key Vault-Anbieter für Secrets Store CSI-Treiber für AKS-Konfigurations- und Fehlerbehebungsoptionen

Der Azure Key Vault-Anbieter für Secrets Store Container Storage Interface (CSI)-Treiber ermöglicht die sichere und automatisierte Verwaltung von geheimen Schlüsseln in Azure Kubernetes Service (AKS). Dieser Artikel enthält Anleitungen zum Konfigurieren des Anbieters, zur Problembehandlung der häufigen Probleme und zum Optimieren der Verwaltung von Geheimnissen in Ihrer AKS-Umgebung.

Voraussetzungen

Führen Sie die Schritte in den folgenden Artikeln aus, bevor Sie mit diesem Leitfaden fortfahren. Nachdem Sie diese Schritte ausgeführt haben, können Sie zusätzliche Konfigurationen anwenden oder eine Problembehandlung auf Ihrem AKS-Cluster ausführen.

Konfigurationsoptionen

Automatische Drehung verwalten

Sobald Sie die automatische Rotation für Azure Key Vault Secrets-Anbieter aktivieren, werden die Pod-Einbindung und das Kubernetes-Geheimnis, das im secretObjects Feld von SecretProviderClass definiert ist, aktualisiert. Dies erfolgt durch regelmäßiges Abfragen von Änderungen basierend auf dem definierten Rotationsabrufintervall. Das standardmäßige Rotationsabrufintervall beträgt zwei Minuten. Wenn ein Geheimnis nach der ersten Pod-Deployment im externen Geheimnisspeicher aktualisiert wird, werden sowohl das Kubernetes-Geheimnis als auch das Pod-Mount regelmäßig erneuert. Die Aktualisierungshäufigkeit und -methode hängt davon ab, wie Ihre Anwendung auf die geheimen Daten zugreift.

  • Mounten Sie das Kubernetes-Geheimnis als Volume: Verwenden Sie die Funktionen zur automatischen Rotation und Synchronisierung von K8s-Geheimnissen des Secrets Store CSI-Treibers. Die Anwendung muss auf Änderungen aus dem eingebundenen Kubernetes-Geheimnisvolume achten. Wenn der CSI-Treiber das Kubernetes-Geheimnis aktualisiert, werden die entsprechenden Volumeinhalte automatisch ebenfalls aktualisiert.

  • Die Anwendung liest die Daten aus dem Container-Dateisystem: Verwenden Sie die Rotationsfunktion des Secrets Store CSI-Treibers. Die Anwendung muss die Dateiänderung des vom CSI-Treiber eingebundenen Volumes beachten.

  • Verwenden Sie den Kubernetes-Schlüssel für eine Umgebungsvariable: Starten Sie den Pod neu, um den neuesten geheimen Schlüssel als Umgebungsvariable abzurufen. Verwenden Sie ein Tool, wie etwa Reloader, um Änderungen des synchronisierten Kubernetes-Geheimnisses zu beobachten und rollierende Upgrades auf Pods auszuführen.

  1. Um die automatische Rotation von Geheimnissen auf einem neuen AKS-Cluster mit dem Befehl az aks create zu aktivieren und das Add-on enable-secret-rotation zu aktivieren, führen Sie den folgenden Befehl aus:

    az aks create \
        --name myAKSCluster2 \
        --resource-group myResourceGroup \
        --enable-addons azure-keyvault-secrets-provider \
        --enable-secret-rotation \
        --generate-ssh-keys
    
  2. Um einen vorhandenen AKS-Cluster zu aktualisieren, um die automatische Rotation von Geheimnissen mithilfe des az aks addon update Befehls und des enable-secret-rotation Parameters zu aktivieren, führen Sie den folgenden Befehl aus:

    az aks addon update --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider --enable-secret-rotation
    

Synchronisieren von bereitgestelltem Inhalt mit einem Kubernetes-Geheimnis

Hinweis

Die YAML-Beispiele in diesem Abschnitt sind unvollständig. Sie müssen sie so ändern, dass die ausgewählte Methode zum Zugreifen auf Ihre Schlüsseltresoridentität unterstützt wird. Weitere Informationen finden Sie unter Bereitstellen einer Identität für den Zugriff auf den Azure Key Vault-Anbieter für den Secrets Store CSI-Treiber.

Sie können ein Kubernetes-Geheimnis erstellen, um den bereitgestellten Inhalt zu spiegeln. Ihre Geheimnisse werden synchronisiert, nachdem Sie einen Pod zum Einbinden gestartet haben. Wenn Sie die Pods löschen, die die Geheimnisse nutzen, wird auch Ihr Kubernetes-Geheimnis gelöscht.

Synchronisieren Sie eingebundene Inhalte mit einem Kubernetes-Geheimnis über das Feld secretObjects beim Erstellen einer SecretProviderClass, sodass der gewünschte Status des Kubernetes-Geheimnisses definiert wird, wie im folgenden Beispiel gezeigt. Stellen Sie sicher, dass der objectName im Feld secretObjects mit dem Dateinamen des eingebundenen Inhalts übereinstimmt. Wenn Sie stattdessen objectAlias verwenden, sollte Übereinstimmung mit dem Objektalias bestehen.

apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: azure-sync
spec:
  provider: azure
  secretObjects:             # [OPTIONAL] SecretObjects defines the desired state of synced Kubernetes secret objects
  - data:
    - key: username          # data field to populate
      objectName: foo1       # name of the mounted content to sync; this could be the object name or the object alias
    secretName: foosecret    # name of the Kubernetes secret object
    type: Opaque             # type of Kubernetes secret object (for example, Opaque, kubernetes.io/tls)

Festlegen einer Umgebungsvariable zum Verweisen auf Kubernetes-Geheimnisse

Hinweis

Das YAML-Beispiel zeigt, wie man über Umgebungsvariablen oder volume/volumeMount auf ein Geheimnis zugreifen kann. In der Regel verwendet eine Anwendung eine oder die andere Methode. Um jedoch ein Geheimnis über Umgebungsvariablen verfügbar zu machen, muss mindestens ein Pod das Geheimnis einbinden.

Verweisen Sie auf das neu erstellte Kubernetes-Geheimnis, indem Sie eine Umgebungsvariable in Ihrem Pod festlegen, wie im folgenden Beispielcode gezeigt.

kind: Pod
apiVersion: v1
metadata:
  name: busybox-secrets-store-inline
spec:
  containers:
    - name: busybox
      image: registry.k8s.io/e2e-test-images/busybox:1.29-1
      command:
        - "/bin/sleep"
        - "10000"
      volumeMounts:
      - name: secrets-store01-inline
        mountPath: "/mnt/secrets-store"
        readOnly: true
      env:
      - name: SECRET_USERNAME
        valueFrom:
          secretKeyRef:
            name: foosecret
            key: username
  volumes:
    - name: secrets-store01-inline
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: true
        volumeAttributes:
          secretProviderClass: "azure-sync"

Migrieren von Open-Source zu AKS-verwaltetem Secrets Store CSI-Treiber

  1. Deinstallieren Sie den open-source Secrets Store CSI-Treiber mit dem folgenden helm delete Befehl:

    helm delete <release name>
    

    Tipp

    Wenn Sie den Treiber und den Provider mithilfe von Bereitstellungs-YAML-Dateien installiert haben, können Sie die Komponenten mithilfe des folgenden kubectl delete Befehls löschen:

    # Delete AKV provider pods from Linux nodes
    kubectl delete -f https://raw.githubusercontent.com/Azure/secrets-store-csi-driver-provider-azure/master/deployment/provider-azure-installer.yaml
    
    # Delete AKV provider pods from Windows nodes
    kubectl delete -f https://raw.githubusercontent.com/Azure/secrets-store-csi-driver-provider-azure/master/deployment/provider-azure-installer-windows.yaml
    
  2. Aktualisieren Sie Ihren vorhandenen AKS-Cluster mit dem Feature mithilfe des az aks enable-addons Befehls:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name myAKSCluster --resource-group myResourceGroup
    

Zugreifen auf Metriken

Sie können den Status und die Leistung des Azure Key Vault-Anbieters für den Secrets Store CSI Driver überwachen, indem Sie Metriken sammeln, die verfügbar gemacht werden. Diese Metriken bieten Einblicke in Anforderungsdauern, Fehlerraten und den Gesamtbetrieb der Anbieter- und Treiberkomponenten, die Ihnen bei der Behandlung von Problemen helfen und die geheime Verwaltung Ihres AKS-Clusters optimieren.

Metriken werden über Prometheus von Port 8898 aus bereitgestellt, doch ist dieser Port nicht standardmäßig außerhalb des Pods zugänglich. Greifen Sie mithilfe des kubectl port-forward Befehls auf die Metriken über "localhost" zu:

kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics

Diese Metriken helfen Ihnen, die Leistung und Zuverlässigkeit des Azure Key Vault-Anbieters zu überwachen, einschließlich Anforderungslatenz und Fehlernachverfolgung für Key Vault- und gRPC-Vorgänge.

Metrik BESCHREIBUNG Tags
keyvault_request Die Verteilung der für das Abrufen vom Schlüsseltresor benötigten Zeit. os_type=<runtime os>, , provider=azureobject_name=<keyvault object name>, , object_type=<keyvault object type>error=<error if failed>
grpc_request Die Verteilung der für die gRPC-Anforderungen benötigten Zeit os_type=<runtime os>, , provider=azuregrpc_method=<rpc full method>, , grpc_code=<grpc status code>grpc_message=<grpc status message>

Problembehandlung

Schritte zur Problembehandlung finden Sie unter Problembehandlung für Azure Key Vault-Anbieter für Secrets Store CSI-Treiber.

Nächste Schritte

Weitere Informationen zum Azure Key Vault-Anbieter für den Secrets Store CSI-Treiber finden Sie in den folgenden Ressourcen: