Share via


Fournisseur Azure Key Vault pour le pilote CSI Secrets Store pour les options de configuration et de dépannage Azure Kubernetes Service (AKS)

Suivez les étapes décrites dans Utiliser le fournisseur Azure Key Vault pour le pilote CSI Secrets Store dans un cluster AKS et Fournir une identité pour accéder au fournisseur Azure Key Vault pour le pilote CSI Secrets Store dans AKS. Une fois ces étapes terminées, vous pouvez appliquer des configurations supplémentaires ou effectuer un dépannage.

Options de configuration

Activer et désactiver la rotation automatique

Remarque

Lorsque le fournisseur Azure Key Vault pour le pilote CSI Secrets Store est activé, il met à jour le montage du cosse et le secret Kubernetes défini secretObjects dans le champ SecretProviderClass. À cet effet, il interroge régulièrement les modifications, en fonction de l’intervalle d’interrogation de rotation que vous avez défini. L’intervalle d’interrogation de rotation par défaut est de deux minutes.

Remarque

Lorsqu’un secret se met à jour dans un magasin de secrets externes après le déploiement initial du pod, le secret Kubernetes et le montage de pod se mettent régulièrement à jour en fonction de la façon dont l’application consomme les données de secret.

Montez le secret Kubernetes en tant que volume : utilisez les fonctionnalités de rotation automatique et de synchronisation des secrets K8 du pilote Secrets Store CSI. L’application doit surveiller les modifications apportées au volume de secret Kubernetes monté. Lorsque le pilote CSI met à jour le secret Kubernetes, le contenu du volume correspondant est automatiquement mis à jour également.

L'application lit les données du système de fichiers du conteneur : utilisez la fonction de rotation du pilote Secrets Store CSI. L’application doit surveiller les modifications apportées aux fichiers du volume monté par le pilote CSI.

Utilisez le secret Kubernetes pour une variable d’environnement : redémarrez le pod pour obtenir le dernier secret en tant que variable d’environnement. Utilisez un outil tel que Reloader pour surveiller les modifications apportées au secret Kubernetes synchronisé et effectuer des mises à niveau propagées sur les pods.

Activer la rotation automatique sur un nouveau cluster AKS

  • Activez la rotation automatique des secrets sur un nouveau cluster à l'aide de la commande az aks create et activez le module complémentaire enable-secret-rotation.

    az aks create --name myAKSCluster2 --resource-group myResourceGroup --enable-addons azure-keyvault-secrets-provider --enable-secret-rotation
    

Activer la rotation automatique sur un cluster AKS existant

  • Mettez à jour un cluster existant pour activer la rotation automatique des secrets à l'aide de la commande az aks addon update et du paramètre enable-secret-rotation.

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

Spécifier un intervalle de rotation personnalisé

  • Spécifier un intervalle de rotation personnalisé à l’aide de la commande az aks addon update avec le paramètre rotation-poll-interval.

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

Désactiver la rotation automatique

Pour désactiver la rotation automatique, vous devez d'abord désactiver le module complémentaire. Ensuite, vous pourrez réactiver le module complémentaire sans le paramètre enable-secret-rotation.

  1. Désactiver le module complémentaire du fournisseur de secrets à l’aide de la commande az aks addon disable.

    az aks addon disable --resource-group myResourceGroup --name myAKSCluster2 --addon azure-keyvault-secrets-provider
    
  2. Réactiver le module complémentaire du fournisseur de secrets sans le paramètre enable-secret-rotation à l’aide de la commande az aks addon enable.

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

Si vous utilisez déjà un SecretProviderClass, vous pouvez mettre à jour le module complémentaire sans le désactiver d’abord en utilisant az aks addon enable sans spécifier le paramètre enable-secret-rotation.

Synchroniser le contenu monté avec un secret Kubernetes

Remarque

Les exemples YAML de cette section sont incomplets. Vous devez les modifier pour prendre en charge la méthode d’accès à votre identité de coffre de clés que vous avez choisie. Pour plus de détails, consultez Fournir une identité pour accéder au fournisseur Azure Key Vault pour le pilote CSI Secrets Store.

Il peut vous arriver de vouloir créer un secret Kubernetes pour mettre en miroir le contenu de secrets. Vos secrets se synchronisent après que vous avez démarré un pod pour les monter. Lorsque vous supprimez les pods qui consomment les secrets, votre secret Kubernetes est également supprimé.

  • Synchroniser le contenu monté avec un secret Kubernetes à l’aide du champ secretObjects lors de la création d’une SecretProviderClass pour définir l’état souhaité du secret Kubernetes, comme illustré dans l’exemple YAML suivant.

    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)
    

    Remarque

    Vérifiez que objectName dans le champsecretObjects correspond au nom de fichier du contenu monté. Si objectAlias est utilisé à la place, il doit correspondre à l’alias de l’objet.

Définir des variables d’environnement pour référencer des secrets Kubernetes

Remarque

L’exemple YAML illustre l’accès à un secret par le biais de variables d’environnement et de volume/volumeMount. Cet exemple est fourni à titre indicatif. Une application classique utilisera l’une ou l’autre des méthodes. Toutefois, sachez que pour qu’un secret soit disponible via des variables env, il doit d’abord être monté par au moins un pod.

  • Référencer votre secret Kubernetes nouvellement créé en définissant une variable d’environnement dans votre pod, comme illustré dans l’exemple YAML suivant.

    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"
    

Accéder aux mesures

Le fournisseur Azure Key Vault

Les métriques sont fournies via Prometheus à partir du port 8898, mais ce port n’est pas exposé par défaut en dehors du pod.

  • Accédez aux métriques sur localhost en utilisant kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-provider-azure 8898:8898 & curl localhost:8898/metrics
    
Indicateurs de performance fournies par le fournisseur Azure Key Vault pour le pilote CSI Secrets Store
Métrique Description Étiquettes
keyvault_request Répartition du temps nécessaire à l’obtention depuis le coffre de clés. os_type=<runtime os>, provider=azure, object_name=<keyvault object name>, object_type=<keyvault object type>, error=<error if failed>
grpc_request Répartition du temps nécessaire aux requêtes gRPC. os_type=<runtime os>, provider=azure, grpc_method=<rpc full method>, grpc_code=<grpc status code>, grpc_message=<grpc status message>

Pilote CSI Secrets Store

Les métriques sont fournies à partir du port 8095, mais ce port n’est pas exposé par défaut en dehors du pod.

  • Accédez aux métriques sur localhost en utilisant kubectl port-forward.

    kubectl port-forward -n kube-system ds/aks-secrets-store-csi-driver 8095:8095 &
    curl localhost:8095/metrics
    
Métriques fournies par le pilote CSI du magasin de secrets
Métrique Description Étiquettes
total_node_publish Nombre total de demandes de montage de volume réussies. os_type=<runtime os>, provider=<provider name>
total_node_unpublish Nombre total de demandes de démontage de volume réussies. os_type=<runtime os>
total_node_publish_error Nombre total d’erreurs avec les demandes de montage de volume. os_type=<runtime os>, provider=<provider name>, error_type=<error code>
total_node_unpublish_error Nombre total d’erreurs avec les demandes de démontage de volume. os_type=<runtime os>
total_sync_k8s_secret Nombre total de secrets Kubernetes synchronisés. os_type=<runtime os, provider=<provider name>
sync_k8s_secret_duration_sec Répartition du temps nécessaire pour synchroniser le secret Kubernetes. os_type=<runtime os>
total_rotation_reconcile Nombre total de rapprochements par rotation. os_type=<runtime os>, rotated=<true or false>
total_rotation_reconcile_error Le nombre total de rotations se rapproche des erreurs. os_type=<runtime os>, rotated=<true or false>, error_type=<error code>
total_rotation_reconcile_error Répartition du temps nécessaire pour la rotation du contenu secret-store pour les pods. os_type=<runtime os>

Effectuer une migration de l’open source vers le pilote CSI du magasin de secrets géré par AKS

  1. Désinstallez le pilote CSI du magasin de secrets open source au moyen de la commande helm delete suivante.

    helm delete <release name>
    

    Remarque

    Si vous avez installé le pilote et le fournisseur à l’aide des YAML de déploiement, vous pouvez supprimer les composants à l’aide de la commande kubectl delete suivante.

    # 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. Mettez à niveau votre cluster AKS existant avec la fonctionnalité à l’aide de la commande az aks enable-addons.

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

Dépannage

Pour connaître les étapes de dépannage, consultez Résoudre les problèmes du fournisseur Azure Key Vault pour le pilote CSI du magasin de secrets.

Étapes suivantes

Pour en savoir plus sur le fournisseur Azure Key Vault pour le pilote CSI Secrets Store, consultez les ressources suivantes :