Partager via


Utiliser le fournisseur Azure Key Vault pour le pilote CSI du magasin de secrets Kubernetes

S’applique à : AKS sur Windows Server

Le pilote CSI de magasin de secrets Kubernetes intègre des magasins de secrets à Kubernetes via un volume CSI (Container Stockage Interface). Si vous intégrez le pilote CSI de Stockage des secrets avec AKS sur Windows Server, vous pouvez monter des secrets, des clés et des certificats sous forme de volume. Les données sont ensuite montées dans le système de fichiers du conteneur.

Avec le pilote CSI du magasin de secrets, vous pouvez également intégrer un coffre de clés à l’un des fournisseurs pris en charge, tels qu’Azure Key Vault.

Avant de commencer

Avant de commencer, vérifiez que les conditions préalables suivantes sont remplies :

  • Un compte et un abonnement Azure.
  • Déploiement existant d’AKS sur Windows Server avec un cluster de charge de travail existant. Si vous n’avez pas de déploiement, suivez ce guide de démarrage rapide pour déployer un hôte AKS et un cluster de charge de travail.
  • Si vous exécutez des clusters Linux, ils doivent être sur la version Linux 1.16.0 ou ultérieure.
  • Si vous exécutez des clusters Windows, ils doivent se trouver sur windows 1.18.0 ou version ultérieure.
  • Vérifiez que vous avez effectué les installations suivantes :

Accéder à vos clusters à l’aide de kubectl

Exécutez la commande suivante pour accéder à votre cluster à l’aide kubectlde . Dans la commande, remplacez la valeur de votre nom de -name cluster existant. Le nom du cluster utilise le fichier du kubeconfig cluster spécifié comme fichier par défaut kubeconfig pour kubectl:

Get-AksHciCredential -name mycluster

Installer le pilote CSI du Magasin des secrets

Pour installer le pilote CSI du Magasin des secrets, exécutez la commande Helm suivante :

helm repo add csi-secrets-store-provider-azure https://azure.github.io/secrets-store-csi-driver-provider-azure/charts

La commande suivante installe à la fois le pilote CSI du magasin de secrets et le fournisseur Azure Key Vault :

helm install csi csi-secrets-store-provider-azure/csi-secrets-store-provider-azure --namespace kube-system

Remarque

Vous devez installer le pilote CSI du Magasin des secrets et le fournisseur Azure Key Vault dans l’espace kube-system de noms. Ce guide utilise l’espace kube-system de noms pour toutes les instances.

Vérifiez que le pilote CSI du magasin de secrets et le fournisseur Azure Key Vault sont correctement installés

Vérifiez vos pods en cours d’exécution pour vous assurer que le pilote CSI du Magasin des secrets et le fournisseur Azure Key Vault sont installés en exécutant les commandes suivantes :

  • Pour vérifier que le pilote CSI du magasin des secrets est installé, exécutez cette commande :

    kubectl get pods -l app=secrets-store-csi-driver -n kube-system
    

    Exemple de sortie :

    NAME                             READY   STATUS    RESTARTS   AGE
    secrets-store-csi-driver-spbfq   3/3     Running   0          3h52m
    
  • Pour vérifier que le fournisseur Azure Key Vault est installé, exécutez cette commande :

    kubectl get pods -l app=csi-secrets-store-provider-azure -n kube-system
    

    Exemple de sortie :

    NAME                                         READY   STATUS    RESTARTS   AGE
    csi-csi-secrets-store-provider-azure-tpb4j   1/1     Running   0          3h52m
    

Ajouter des secrets dans un coffre de clés Azure

Vous avez besoin d’une ressource Azure Key Vault qui contient vos données secrètes. Vous pouvez utiliser une ressource Azure Key Vault existante ou en créer une nouvelle.

Si vous devez créer une ressource Azure Key Vault, exécutez la commande suivante. Vérifiez que vous êtes connecté en exécutant az login vos informations d’identification Azure. Remplacez ensuite les valeurs suivantes par votre environnement :

az keyvault create -n <keyvault-name> -g <resourcegroup-name> -l eastus

Azure Key Vault peut stocker des clés, des secrets et des certificats. Dans l’exemple suivant, un secret de texte brut appelé ExampleSecret est configuré :

az keyvault secret set --vault-name <keyvault-name> -n ExampleSecret --value MyAKSHCIExampleSecret

Créer une identité dans Azure

Utilisez un principal de service pour accéder à l’instance Azure Key Vault que vous avez créée à l’étape précédente. Vous devez enregistrer la sortie lors de l’exécution des commandes suivantes. Vous utilisez à la fois la clé secrète client et l’ID client dans les étapes suivantes.

Fournissez la clé secrète client en exécutant la commande suivante :

az ad sp create-for-rbac --role Contributor --scopes /subscriptions/<subscription-id> --name http://secrets-store-test --query 'password' -otsv

Fournissez l’ID client en exécutant la commande suivante :

az ad sp show --id http://secrets-store-test --query 'appId' -otsv

Fournir l’identité pour accéder au coffre de clés Azure

Utilisez les valeurs de l’étape précédente pour définir les autorisations comme indiqué dans la commande suivante :

az keyvault set-policy -n <keyvault-name> --secret-permissions get --spn <client-id>

Créer le secret Kubernetes avec des informations d’identification

Pour créer le secret Kubernetes avec les informations d’identification du principal de service, exécutez la commande suivante. Remplacez les valeurs suivantes par l’ID client approprié et la clé secrète client de l’étape précédente :

kubectl create secret generic secrets-store-creds --from-literal clientid=<client-id> --from-literal clientsecret=<client-secret>

Par défaut, le fournisseur de magasin de secrets a filtré la surveillance activée sur les secrets. Vous pouvez autoriser la commande à rechercher le secret dans la configuration par défaut en ajoutant l’étiquette secrets-store.csi.k8s.io/used=true au secret :

kubectl label secret secrets-store-creds secrets-store.csi.k8s.io/used=true

Créer et appliquer votre propre objet SecretProviderClass

Pour utiliser et configurer le pilote CSI du Magasin des secrets pour votre cluster Kubernetes, créez une SecretProviderClass ressource personnalisée. Vérifiez que le objects tableau correspond aux objets que vous avez stockés dans l’instance Azure Key Vault :

apiVersion: secrets-store.csi.x-k8s.io/v1alpha1
kind: SecretProviderClass
metadata:
  name: <keyvault-name>                  # The name of the Azure key vault
  namespace: kube-system
spec:
  provider: azure
  parameters:
    keyvaultName: "<keyvault-name>"       # The name of the Azure key vault
    useVMManagedIdentity: "false"         
    userAssignedIdentityID: "false" 
    cloudName: ""                         # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud 
    objects:  |
      array:
        - |
          objectName: <secret-name>       # In this example, 'ExampleSecret'   
          objectType: secret              # Object types: secret, key or cert
          objectVersion: ""               # [OPTIONAL] object versions, default to latest if empty
    tenantId: "<tenant-id>"               # The tenant ID containing the Azure Key Vault instance

Appliquer la SecretProviderClass à votre cluster

Pour déployer le SecretProviderClass que vous avez créé à l’étape précédente, utilisez la commande suivante :

kubectl apply -f ./new-secretproviderclass.yaml

Mise à jour et application du fichier YAML de déploiement de votre cluster

Pour vous assurer que votre cluster utilise la nouvelle ressource personnalisée, mettez à jour le fichier YAML de déploiement. Par exemple :

kind: Pod
apiVersion: v1
metadata:
  name: busybox-secrets-store-inline
spec:
  containers:
  - name: busybox
    image: k8s.gcr.io/e2e-test-images/busybox:1.29
    command:
      - "/bin/sleep"
      - "10000"
    volumeMounts:
    - name: secrets-store-inline
      mountPath: "/mnt/secrets-store"
      readOnly: true
  volumes:
    - name: secrets-store-inline
      csi:
        driver: secrets-store.csi.k8s.io
        readOnly: true
        volumeAttributes:
          secretProviderClass: "<keyvault-name>"
        nodePublishSecretRef:                       # Only required when using service principal mode
          name: secrets-store-creds                 # Only required when using service principal mode

Appliquez ensuite le fichier YAML de déploiement mis à jour au cluster :

kubectl apply -f ./my-deployment.yaml 

Valider le déploiement du magasin de secrets

Pour afficher les secrets conservés dans secrets-store, exécutez la commande suivante :

kubectl exec busybox-secrets-store-inline --namespace kube-system -- ls /mnt/secrets-store/

La sortie doit afficher le nom du secret. Dans cet exemple, il affiche la sortie suivante :

ExampleSecret

Pour afficher le secret de test conservé dans secrets-store, exécutez la commande suivante :

kubectl exec busybox-secrets-store-inline --namespace kube-system -- cat /mnt/secrets-store/ExampleSecret 

La sortie doit afficher la valeur du secret. Dans cet exemple, il affiche la sortie suivante :

MyAKSHCIExampleSecret

Étapes suivantes