De Azure Key Vault-provider gebruiken voor het CSI-stuurprogramma Secrets Store in een AKS-cluster (Azure Kubernetes Service)

Met de Azure Key Vault-provider voor het CSI-stuurprogramma (Secrets Store Container Storage Interface) kan een Azure Key Vault worden geïntegreerd als een geheim archief met een AKS-cluster (Azure Kubernetes Service) via een CSI-volume.

Functies

  • Hiermee koppelt u geheimen, sleutels en certificaten aan een pod met behulp van een CSI-volume.
  • Ondersteunt inline CSI-volumes.
  • Ondersteunt het monteren van meerdere geheimenopslagobjecten als één volume.
  • Ondersteunt portabiliteit van pods met de SecretProviderClass Custom Resource Definition (CRD).
  • Ondersteunt Windows-containers.
  • Synchroniseert met Kubernetes-geheimen.
  • Ondersteunt automatischerotatie van gekoppelde inhoud en gesynchroniseerde Kubernetes-geheimen.

Beperkingen

  • Een container die een ConfigMap of Secret gebruikt als volume-mount subPath, ontvangt geen geautomatiseerde updates wanneer het secret wordt bijgewerkt. Dit is een Kubernetes-beperking. Om de wijzigingen van kracht te laten worden, moet de toepassing het gewijzigde bestand opnieuw laden door te kijken naar wijzigingen in het bestandssysteem of door de pod opnieuw te starten. Raadpleeg Secrets Store CSI Driver bekende beperkingen voor meer informatie.
  • De invoegtoepassing maakt een beheerde identiteit met de naam azurekeyvaultsecretsprovider-xxxxx in de knooppuntresourcegroep (MC_) en wijst deze automatisch toe aan de virtuele-machineschaalset. U kunt deze beheerde identiteit of uw eigen beheerde identiteit gebruiken voor toegang tot de sleutelkluis. Het wordt niet ondersteund om te voorkomen dat een identiteit gecreëerd wordt.

Vereisten

  • Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.

  • Terraform versie 1.6 of hoger.

  • Azure CLI geïnstalleerd en aangemeld. installeer de nieuwste versie.

  • Machtigingen voor het maken van AKS- en Key Vault-resources.

  • Stel uw Azure-abonnement in de Azure CLI in met de volgende opdracht. Vervang <subscriptionId> door uw abonnements-id.

    az account set --subscription <subscriptionId>
    

Netwerk

Rollen

Een AKS-cluster maken

Maak een AKS-cluster met de Azure Key Vault-provider voor ondersteuning voor Secrets Store CSI-stuurprogramma's.

  1. Maak variabelen die worden gebruikt in de opdrachten om een AKS-cluster en Key Vault te maken.

    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 moeten globaal uniek zijn, alfanumerieke tekens, inclusief afbreekstreepjes en 3-24 tekens. De naam van de sleutelkluis voegt de waarde van de KEYVAULT_NAME-variabele samen met de tekenreeks van 10 tekens van de myKeyVault-variabele.

  2. Maak een Azure-resourcegroep met behulp van de az group create opdracht.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  3. Maak een AKS-cluster met de Azure Key Vault-provider voor het stuurprogramma Secrets Store CSI met behulp van de az aks create opdracht met de --enable-addons azure-keyvault-secrets-provider parameter.

    Met --enable-addons de parameter maakt u een door de gebruiker toegewezen beheerde identiteit met de naam azurekeyvaultsecretsprovider-xxxx die u kunt gebruiken om te verifiëren bij uw sleutelkluis. De beheerde identiteit wordt opgeslagen in de resourcegroep van het knooppunt (MC_) en wordt automatisch toegewezen aan de virtuele machineschaalset. U kunt deze beheerde identiteit of uw eigen beheerde identiteit gebruiken voor toegang tot de sleutelkluis. Het wordt niet ondersteund om te voorkomen dat een identiteit gecreëerd wordt.

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

    Aanbeveling

    Als u de Workload-id van Microsoft Entra wilt gebruiken, moet de az aks create opdracht de --enable-oidc-issuer en --enable-workload-identity parameters bevatten.

Een AKS-cluster maken

Maak een bestand main.tf met de volgende configuratie om een AKS-cluster te maken met Azure Key Vault provider voor ondersteuning van het stuurprogramma Secrets Store CSI.

  1. Maak de Terraform-configuratie.

    terraform {
     required_version = ">= 1.6.0"
     required_providers {
       azurerm = {
         source  = "hashicorp/azurerm"
         version = "~> 4.0"
       }
     }
    }
    provider "azurerm" {
     features {}
    }
    data "azurerm_client_config" "current" {}
    resource "azurerm_resource_group" "rg" {
     name     = "aks-rg"
     location = "East US"
    }
    
  2. Maak het AKS-cluster.

    resource "azurerm_kubernetes_cluster" "aks" {
     name                = "aks-cluster"
     location            = azurerm_resource_group.rg.location
     resource_group_name = azurerm_resource_group.rg.name
     dns_prefix          = "akscsi"
     default_node_pool {
       name       = "system"
       node_count = 1
       vm_size    = "Standard_DS2_v2"
     }
     identity {
       type = "SystemAssigned"
     }
     key_vault_secrets_provider {
       secret_rotation_enabled = false
     }
    }
    
  3. Implementeer de configuratie. Voer een Bash-sessie uit met de volgende opdrachten om de resources te implementeren:

    terraform init
    terraform validate
    terraform plan
    terraform apply
    

Een bestaand AKS-cluster bijwerken

Werk een bestaand AKS-cluster bij met de Azure Key Vault-provider voor ondersteuning van het stuurprogramma Secrets Store CSI.

  1. Maak variabelen die worden gebruikt in de opdrachten. Vervang indien nodig de waarden om uw bestaande AKS-cluster of Key Vault bij te werken.

    Als u bijvoorbeeld een bestaande sleutelkluis gebruikt, vervangt u de waarde van de KEYVAULT_NAME variabele zonder de RANDOM_STRING variabele te gebruiken.

    Als u geen sleutelkluis hebt, moeten Azure Key Vault-namen wereldwijd uniek zijn, alfanumeriek, inclusief afbreekstreepjes en 3-24 tekens. De naam van de sleutelkluis voegt de waarde van de KEYVAULT_NAME-variabele samen met de tekenreeks van 10 tekens van de myKeyVault-variabele. U kunt de sleutelkluis verderop in dit artikel maken.

    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
    
  2. Werk een bestaand AKS-cluster bij met de Azure Key Vault-provider voor het stuurprogramma Secrets Store CSI met behulp van de az aks enable-addons opdracht en schakel de azure-keyvault-secrets-provider invoegtoepassing in. De invoegtoepassing maakt een door de gebruiker toegewezen beheerde identiteit die u kunt gebruiken om te authenticeren bij uw sleutelkluis.

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

    Nadat u de geheime provider van Azure Key Vault hebt ingeschakeld, maakt AKS een beheerde identiteit met de naam azurekeyvaultsecretsprovider-xxxx die u kunt gebruiken om te verifiëren bij uw sleutelkluis. De beheerde identiteit wordt opgeslagen in de resourcegroep van het knooppunt (MC_) en wordt automatisch toegewezen aan de virtuele machineschaalset. U kunt deze beheerde identiteit of uw eigen beheerde identiteit gebruiken voor toegang tot de sleutelkluis. Het wordt niet ondersteund om te voorkomen dat een identiteit gecreëerd wordt.

Een bestaand AKS-cluster bijwerken

Maak een bestand main.tf met de volgende configuratie om een bestaand AKS-cluster bij te werken met Azure Key Vault provider voor ondersteuning van het stuurprogramma Secrets Store CSI.

  1. Update een bestaand AKS-cluster.

    resource "azurerm_kubernetes_cluster" "aks" {
     name                = "<existing-cluster>"
     resource_group_name = "<resource-group>"
     key_vault_secrets_provider {
       secret_rotation_enabled = false
     }
    }
    
  2. Implementeer de configuratie. Voer een Bash-sessie uit met de volgende opdrachten om de configuratie te implementeren:

    Run the following commands to apply the updates:
    
    terraform init
    terraform validate
    terraform plan
    terraform apply
    

Controleer of de beheerde identiteit en de sleutelkluisprovider zijn geïnstalleerd

Als u Terraform hebt gebruikt om een nieuw cluster te maken of een bestaand cluster bij te werken, moet u de variabelen, zoals $CLUSTER_NAME in de volgende opdrachten, vervangen door de waarden die u in de Terraform-configuratie hebt gebruikt.

De beheerde identiteit verifiëren

Gebruik de volgende stappen om te controleren of de beheerde identiteit is aangemaakt en toegewezen aan de virtuele schaalset voor machines van het cluster.

  1. Controleer of de beheerde identiteit is gemaakt en toegewezen aan het cluster met behulp van de az aks show opdracht.

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

    De resourceId eigenschap toont de resourcegroep en de naam azurekeyvaultsecretsprovider-myaksclustervan de identiteit.

  2. Controleer of de beheerde identiteit is toegewezen aan de virtuele-machineschaalset van de knooppunt-resourcegroep.

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

    In de uitvoer ziet u de resource-ID van Virtuele-machineschaalsets Microsoft.Compute/virtualMachineScaleSets en de userAssignedIdentities eigenschap met een resource-ID voor azurekeyvaultsecretsprovider-myakscluster die bevestigt dat de identiteit is toegewezen aan de virtuele machineschaalset.

Controleer de Azure Key Vault-provider voor de installatie van het stuurprogramma Secrets Store CSI

  1. Haal de AKS-clusterreferenties op met behulp van de az aks get-credentials opdracht.

    az aks get-credentials \
      --name $CLUSTER_NAME \
      --resource-group $RESOURCE_GROUP
    
  2. Controleer of de installatie is voltooid met behulp van de kubectl get pods opdracht, waarin alle pods worden vermeld met de secrets-store-csi-driver en secrets-store-provider-azure labels in de kube-system naamruimte.

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

    De o wide vlag bevat het knooppunt waarop elke pod wordt uitgevoerd in de uitvoer.

    De uitvoer moet er ongeveer uitzien als in de volgende voorbeelduitvoer:

    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
    

Nieuwe sleutelkluis maken

Voer de az keyvault create opdracht uit om een nieuwe sleutelkluis te maken waarvoor Azure RBAC is ingeschakeld.

az keyvault create \
  --name $KEYVAULT_NAME \
  --resource-group $RESOURCE_GROUP \
  --location $LOCATION \
  --enable-rbac-authorization

Azure RBAC is standaard ingeschakeld wanneer u een nieuwe sleutelkluis maakt, zelfs als u de --enable-rbac-authorization parameter niet opneemt.

Zie Toegang tot Key Vault sleutels, certificaten en geheimen met een Azure op rollen gebaseerd toegangsbeheer voor meer informatie over key vault machtigingsmodellen en Azure RBAC.

Bestaande sleutelkluis bijwerken

Voer de opdracht az keyvault update uit om een bestaande sleutelkluis bij te werken met Azure op rollen gebaseerd toegangsbeheer (Azure RBAC). De parameter --enable-rbac-authorization is nodig om Azure RBAC in te schakelen wanneer u een bestaande sleutelkluis bijwerkt waarvoor Azure RBAC is uitgeschakeld.

az keyvault update \
  --name $KEYVAULT_NAME \
  --resource-group $RESOURCE_GROUP \
  --enable-rbac-authorization

Zie Toegang bieden tot Key Vault-sleutels, -certificaten en -geheimen met een op rollen gebaseerd toegangsbeheer van Azure voor meer informatie over sleutelkluismachtigingsmodellen en Azure RBAC

Roltoewijzing en geheim toevoegen aan sleutelkluis

  1. Voer de az keyvault show opdracht uit om te verifiëren dat Azure RBAC is ingeschakeld voor de key vault.

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

    De uitvoer moet true zijn.

  2. Voeg een roltoewijzing voor uw gebruikersaccount toe aan het sleutelkluisbereik met behulp van de az role assignment create opdracht, zodat u in de volgende stap een sleutelkluisgeheim kunt toevoegen.

    De rol Key Vault Secrets Officer met unieke id b86a8fe4-44ce-4948-aee5-eccb2c155cd7 wordt toegevoegd en u kunt de naam of unieke id gebruiken. Het gebruik van de unieke id van de rol is een best practice om problemen te voorkomen als de naam van de rol verandert.

    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
    

    Het kan enkele minuten duren voordat de roltoewijzing van kracht wordt. U kunt controleren of de roltoewijzing is gemaakt met de volgende opdracht:

    az role assignment list \
      --assignee-object-id $MYID \
      --scope $KEYVAULT_ID \
      --query '[].{Role:roleDefinitionName, Scope:scope}' \
      --output table
    
  3. Maak een geheim zonder opmaak met de naam ExampleSecret in de sleutelkluis met behulp van de az keyvault secret set opdracht.

    Uw sleutelkluis kan sleutels, geheimen en certificaten opslaan. De value parameter gebruikt de RANDOM_STRING variabele om een unieke waarde voor het geheim te maken.

    az keyvault secret set \
      --vault-name $KEYVAULT_NAME \
      --name ExampleSecret \
      --value MyAKSExampleSecret${RANDOM_STRING}
    
  4. Controleer of het geheim is toegevoegd aan de sleutelkluis met behulp van de az keyvault secret show opdracht.

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

Nieuwe sleutelkluis maken

Werk uw bestand main.tf bij om een nieuwe sleutelkluis te maken met Azure op rollen gebaseerd toegangsbeheer (Azure RBAC) ingeschakeld.

  1. Maak een nieuwe sleutelkluis met Azure RBAC ingeschakeld.

    data "azurerm_client_config" "current" {}
    resource "random_string" "suffix" {
     length  = 5
     special = false
     upper   = false
    }
    resource "azurerm_key_vault" "kv" {
     name                = "akskv${random_string.suffix.result}"
     location            = azurerm_resource_group.rg.location
     resource_group_name = azurerm_resource_group.rg.name
     tenant_id           = data.azurerm_client_config.current.tenant_id
     sku_name            = "standard"
     enable_rbac_authorization = true
    }
    
  2. Wijs de rol van Key Vault Secrets Officer toe.

    resource "azurerm_role_assignment" "kv_role" {
     scope                = azurerm_key_vault.kv.id
     role_definition_name = "Key Vault Secrets Officer"
     principal_id         = data.azurerm_client_config.current.object_id
    }
    
  3. Maak ExampleSecret in de sleutelkluis.

    resource "azurerm_key_vault_secret" "example" {
     name         = "ExampleSecret"
     value        = "MyAKSExampleSecret"
     key_vault_id = azurerm_key_vault.kv.id
    }
    
  4. Implementeer de configuratie. Open een Bash-sessie en voer de volgende commando's uit om de bijgewerkte configuratie te implementeren:

    terraform plan
    terraform apply
    
  5. Controleer of ExampleSecret is toegevoegd aan de sleutelkluis met behulp van de az keyvault secret show opdracht. Vervang door <keyvault-name> de naam van de sleutelkluis die u hebt gemaakt in uw Terraform-configuratie.

    az keyvault secret show \
     --vault-name <keyvault-name> \
     --name ExampleSecret
    

Bestaande sleutelkluis bijwerken

Werk het bestand main.tf bij om een bestaande sleutelkluis bij te werken met Azure op rollen gebaseerd toegangsbeheer (Azure RBAC) ingeschakeld.

  1. Werk bestaande sleutelkluis bij om Azure RBAC in te schakelen.

    resource "azurerm_key_vault" "kv" {
     name                = "<existing-kv>"
     resource_group_name = "<resource-group>"
     enable_rbac_authorization = true
    }
    
  2. Wijs een rol toe en voeg geheim toe.

    resource "azurerm_role_assignment" "kv_role" {
     scope                = azurerm_key_vault.kv.id
     role_definition_name = "Key Vault Secrets Officer"
     principal_id         = data.azurerm_client_config.current.object_id
    }
    resource "azurerm_key_vault_secret" "example" {
     name         = "ExampleSecret"
     value        = "MyAKSExampleSecret"
     key_vault_id = azurerm_key_vault.kv.id
    }
    
  3. Implementeer de configuratie. Start een Bash-sessie en voer vervolgens de volgende opdrachten uit om de bijgewerkte configuratie te implementeren:

    terraform plan
    terraform apply
    

De hulpbronnen opschonen

Als u naar het volgende artikel gaat en deze resources nodig hebt, negeert u de volgende stappen. Als u klaar bent en niet van plan bent om door te gaan naar het volgende artikel, moet u de resources die in dit artikel zijn gemaakt, verwijderen om onnodige kosten te voorkomen.

  1. Verwijder de referenties van uw cluster uit uw lokale .kube/config-bestand .

    KUBE_CONTEXT=$(kubectl config current-context)
    kubectl config delete-context $KUBE_CONTEXT
    
  2. Verwijder de resourcegroep en alle resources erin, inclusief resources in de knooppuntresourcegroep (MC_) met behulp van de az group delete opdracht.

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

Met de terraform destroy opdracht worden alle resources verwijderd die zijn gedefinieerd in de huidige Terraform-configuratie en -statusbestand. Voer deze opdracht alleen uit vanuit de werkmap die voor dit artikel wordt gebruikt.

Warning

Als u met bestaande of productieresources werkt, controleert u het uitvoeringsplan zorgvuldig voordat u het volgende uitvoert:

terraform plan -destroy

Vermijd om terraform destroy tegen gedeelde of geïmporteerde infrastructuur uit te voeren, tenzij u zeker weet dat het veilig is om terraform destroy te verwijderen. Zie de Terraform-documentatie voor de opdracht terraform destroy voor meer informatie.

  1. Verwijder de referenties van uw cluster uit uw lokale .kube/config-bestand .

    KUBE_CONTEXT=$(kubectl config current-context)
    kubectl config delete-context $KUBE_CONTEXT
    
  2. Voer de volgende opdracht uit om de resources te verwijderen die in dit artikel zijn gemaakt:

    terraform destroy
    

Volgende stappen

In dit artikel hebt u geleerd hoe u de Azure Key Vault-provider voor het CSI-stuurprogramma Secrets Store gebruikt in een AKS-cluster. U moet nu een identiteit opgeven voor toegang tot Azure Key Vault. Als u wilt weten hoe u dit kunt doen, gaat u verder met het volgende artikel.