Condividi tramite


Usa il provider Azure Key Vault per il driver CSI di Secrets Store in un cluster di Azure Kubernetes Service (AKS)

Il provider Azure Key Vault per il driver CSI (Archiviazione di Container Azure) dell'archivio segreti consente l'integrazione di Azure Key Vault come archivio segreti con un cluster del servizio Azure Kubernetes tramite un volume CSI.

Funzionalità

  • Monta segreti, chiavi e certificati in un pod usando un volume CSI.
  • Supporta volumi inline CSI.
  • Supporta il montaggio di più oggetti dell'archivio segreti come un singolo volume.
  • Supporta la portabilità dei pod con la SecretProviderClass definizione di risorsa personalizzata (CRD).
  • Supporta i contenitori di Windows.
  • Esegue la sincronizzazione con i segreti kubernetes.
  • Supporta l'autorotazione dei contenuti montati e i segreti Kubernetes sincronizzati.

Limiti

  • Un contenitore che usa ConfigMap o Secret come montaggio del volume subPath non riceve aggiornamenti automatici quando il segreto viene ruotato (un limite di Kubernetes). Per rendere effettive le modifiche, l'applicazione deve ricaricare il file modificato controllando le modifiche nel file system o riavviando il pod. Per ulteriori informazioni, vedere Limitazioni note di Secrets Store CSI Driver.
  • Il componente aggiuntivo crea un'identità gestita denominata azurekeyvaultsecretsprovider-xxxxx nel gruppo di risorse del nodo (MC_) e la assegna automaticamente al set di scalabilità di macchine virtuali. È possibile usare questa identità gestita o la propria identità gestita per accedere all'insieme di credenziali delle chiavi. Non è supportato per impedire la creazione dell'identità.

Prerequisiti

  • Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
  • Verificare che la versione dell'interfaccia della riga di comando di Azure sia 2.30.0 o successiva. Se si tratta di una versione precedente, installare la versione più recente.

Rete

Ruoli

Creare o aggiornare un cluster AKS

Creare un cluster AKS con il provider di Azure Key Vault per il supporto del Secrets Store CSI Driver.

  1. Creare variabili usate nei comandi per creare un cluster del servizio Azure Kubernetes e Key Vault.

    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
    

    I nomi di Azure Key Vault devono essere univoci a livello globale, alfanumerici, inclusi trattini e 3-24 caratteri. Il nome del Key Vault concatena il valore della variabile KEYVAULT_NAME con la stringa di 10 caratteri della variabile RANDOM_STRING.

  2. Creare un gruppo di risorse di Azure usando il comando az group create.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Creare un cluster AKS con il provider di Azure Key Vault per la funzionalità del Secrets Store CSI Driver usando il comando az aks create con il parametro --enable-addons azure-keyvault-secrets-provider.

    Il --enable-addons parametro crea un'identità gestita assegnata dall'utente chiamata azurekeyvaultsecretsprovider-xxxx che è possibile usare per autenticarsi al Key Vault. L'identità gestita viene archiviata nel gruppo di risorse del nodo (MC_) e viene assegnata automaticamente al set di scalabilità di macchine virtuali. È possibile usare questa identità gestita o la propria identità gestita per accedere all'insieme di credenziali delle chiavi. Non è supportato per impedire la creazione dell'identità.

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

    Suggerimento

    Se si intende utilizzare l'ID del carico di lavoro Microsoft Entra, il comando az aks create deve includere i parametri --enable-oidc-issuer e --enable-workload-identity.

Verificare l'identità gestita

Usare la procedura seguente per verificare che l'identità gestita sia stata creata e assegnata al set di scalabilità di macchine virtuali del cluster.

  1. Verificare che l'identità gestita sia stata creata e assegnata al cluster usando il az aks show comando .

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

    La proprietà resourceId mostra il gruppo di risorse e il nome dell'identità azurekeyvaultsecretsprovider-myakscluster.

  2. Verificare che l'identità gestita sia assegnata al set di scalabilità di macchine virtuali del gruppo di risorse del nodo.

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

    L'output mostra l'ID risorsa del set di scalabilità delle macchine virtuali Microsoft.Compute/virtualMachineScaleSets e la proprietà userAssignedIdentities con un ID risorsa per azurekeyvaultsecretsprovider-myakscluster che conferma l'assegnazione dell'identità al set di scalabilità delle macchine virtuali.

Verificare il provider di Azure Key Vault per l'installazione del Secrets Store CSI Driver.

  1. Ottenere le credenziali del cluster del servizio Azure Kubernetes usando il comando az aks get-credentials.

    az aks get-credentials \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP
    
  2. Verificare che l'installazione sia terminata usando il comando kubectl get pods, che elenca tutti i pod con le etichette secrets-store-csi-driver e secrets-store-provider-azure nello spazio dei nomi kube-system.

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

    Il flag o wide include il nodo in cui è in esecuzione ogni pod nell'output.

    L'output dovrebbe essere simile all'esempio di output seguente:

    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
    

Creare o usare un Azure Key Vault esistente

Creare o aggiornare un insieme di credenziali delle chiavi con il controllo degli accessi in base al ruolo di Azure abilitato usando il comando az keyvault create o il comando az keyvault update con il flag --enable-rbac-authorization.

Il controllo degli accessi in base al ruolo di Azure è abilitato per impostazione predefinita quando si crea un nuovo insieme di credenziali anche se non si include il parametro --enable-rbac-authorization. Il parametro è necessario quando si aggiorna un insieme di credenziali delle chiavi esistente con il controllo degli accessi in base al ruolo di Azure disabilitato.

Per ulteriori informazioni sui modelli di autorizzazione di Key Vault e sul controllo degli accessi in base al ruolo di Azure, vedere Fornire l'accesso a chiavi, certificati e segreti di Key Vault con un controllo degli accessi in base al ruolo di Azure

  1. Abilitare l'autorizzazione a livello di Azure RBAC per un nuovo insieme di credenziali o aggiornare un insieme di credenziali esistente.

    Eseguire il comando az keyvault create per creare un nuovo insieme di credenziali delle chiavi con il controllo degli accessi in base al ruolo di Azure abilitato.

    az keyvault create \
      --name $KEYVAULT_NAME \
      --resource-group $RESOURCE_GROUP \
      --location $LOCATION \
      --enable-rbac-authorization
    
  2. Eseguire il comando az keyvault show per verificare che il Key Vault abbia Azure RBAC abilitato.

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

    L'output deve essere true.

  3. Aggiungi un'assegnazione di ruolo per l'account utente all'ambito del Key Vault usando il comando az role assignment create in modo da poter aggiungere un segreto del Key Vault nel passaggio successivo.

    Il ruolo Responsabile dei Segreti di Key Vault con identificatore univoco b86a8fe4-44ce-4948-aee5-eccb2c155cd7 viene aggiunto ed è possibile utilizzare il nome o l'identificatore univoco. L'uso dell'identificatore univoco del ruolo è una procedura consigliata per evitare problemi se il nome dei ruoli cambia.

    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
    

    L'applicazione dell'assegnazione di ruolo può richiedere alcuni minuti. È possibile verificare che l'assegnazione di ruolo sia stata creata con il comando seguente:

    az role assignment list \
      --assignee-object-id $MYID \
      --scope $KEYVAULT_ID \
      --query '[].{Role:roleDefinitionName, Scope:scope}' \
      --output table
    
  4. Creare un segreto di testo in chiaro denominato ExampleSecret nell'archivio delle chiavi usando il comando az keyvault secret set.

    Il tuo archivio di chiavi può conservare chiavi, segreti e certificati. Il value parametro usa la RANDOM_STRING variabile per creare un valore univoco per il segreto.

    az keyvault secret set \
      --vault-name $KEYVAULT_NAME \
      --name ExampleSecret \
      --value MyAKSExampleSecret${RANDOM_STRING}
    
  5. Verificare che il segreto sia stato aggiunto al Key Vault usando il comando az keyvault secret show.

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

Pulire le risorse

Se si intende passare all'articolo successivo e sono necessarie queste risorse, ignorare i passaggi seguenti. In caso contrario, se non si prevede di continuare con l'articolo successivo, è necessario eliminare le risorse create in questo articolo per evitare costi non necessari.

  1. Rimuovi le credenziali del tuo cluster dal file locale .kube/config.

    KUBE_CONTEXT=$(kubectl config current-context)
    kubectl config delete-context $KUBE_CONTEXT
    
  2. Eliminare il gruppo di risorse e tutte le risorse al suo interno, incluse le risorse nel gruppo di risorse del nodo (MC_) usando il az group delete comando .

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

Passaggi successivi

In questo articolo, hai imparato come usare il provider di Azure Key Vault per Secrets Store CSI Driver in un cluster AKS (Azure Kubernetes Service). È ora necessario fornire un'identità per accedere ad Azure Key Vault. Per informazioni su come, continuare con l'articolo successivo.