Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
SecretProviderClassdefinizione 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
ConfigMapoSecretcome montaggio del volumesubPathnon 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-xxxxxnel 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.
Se non si ha una sottoscrizione di Azure, creare un account gratuito prima di iniziare.
Terraform versione 1.6 o successiva.
interfaccia della riga di comando di Azure installato e connesso. installare la versione più recente.
Autorizzazioni per creare risorse AKS e le risorse Key Vault.
Impostare la sottoscrizione Azure nel interfaccia della riga di comando di Azure con il comando seguente. Sostituire
<subscriptionId>con l'ID della sottoscrizione.az account set --subscription <subscriptionId>
Rete
- Se si usano cluster isolati di rete, è consigliabile configurare l'endpoint privato per accedere ad Azure Key Vault.
- Se il cluster ha un tipo in uscita
userDefinedRoutinge usa un dispositivo firewall in grado di controllare il traffico in uscita in base ai nomi di dominio, ad esempio Firewall di Azure, verificare che le regole di rete in uscita e i nomi di dominio completi richiesti siano consentiti. - Se si limita l'ingresso al cluster, assicurarsi che le porte 9808 e 8095 siano aperte.
Ruoli
- Questo articolo utilizza il ruolo Key Vault Secrets Officer per consentire al tuo account di creare un segreto nella key vault.
- Nell'articolo per fornire l'accesso ad Azure Key Vault, l'identità utilizzata con
SecretProviderClassnecessita di Key Vault Certificate User per accedere akeyo aicertificatetipi di oggetto e di Key Vault Secrets User per accedere asecrettipo di oggetto.
Crea un cluster AKS
Creare un cluster AKS con il provider di Azure Key Vault per il supporto del Secrets Store CSI Driver.
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=eastus2I 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_NAMEcon la stringa di 10 caratteri della variabilemyKeyVault.Creare un gruppo di risorse di Azure usando il comando
az group create.az group create --name $RESOURCE_GROUP --location $LOCATIONCreare un cluster AKS con il provider di Azure Key Vault per la funzionalità del Secrets Store CSI Driver usando il comando
az aks createcon il parametro--enable-addons azure-keyvault-secrets-provider.Il
--enable-addonsparametro crea un'identità gestita assegnata dall'utente chiamataazurekeyvaultsecretsprovider-xxxxche è 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-keysSuggerimento
Se si intende utilizzare l'ID del carico di lavoro Microsoft Entra, il comando
az aks createdeve includere i parametri--enable-oidc-issuere--enable-workload-identity.
Crea un cluster AKS
Creare un file main.tf con la seguente configurazione per creare un cluster AKS con provider Azure Key Vault per il supporto del Secrets Store CSI Driver.
Creare la configurazione di Terraform.
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" }Creare il cluster AKS.
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 } }Eseguire la configurazione. Formare una sessione Bash, eseguire i comandi seguenti per distribuire le risorse:
terraform init terraform validate terraform plan terraform apply
Aggiornare un cluster AKS esistente
Aggiorna un cluster AKS esistente con il provider di Azure Key Vault per il supporto del Secrets Store CSI Driver.
Creare variabili usate nei comandi. Sostituire i valori necessari per aggiornare il cluster AKS esistente o Key Vault.
Ad esempio, se si usa un key vault esistente, sostituire il valore della variabile
KEYVAULT_NAMEsenza usare la variabileRANDOM_STRING.Se non si ha un insieme di credenziali, i nomi di Azure Key Vault devono essere univoci a livello globale, composti da caratteri alfanumerici, inclusi i trattini, e devono avere una lunghezza compresa tra 3 e 24 caratteri. Il nome del Key Vault concatena il valore della variabile
KEYVAULT_NAMEcon la stringa di 10 caratteri della variabilemyKeyVault. Sarà possibile creare l'insieme di credenziali delle chiavi più avanti in questo articolo.export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM") export KEYVAULT_NAME=myKeyVault${RANDOM_STRING} export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastus2Aggiornare un cluster del servizio Azure Kubernetes esistente con il provider Azure Key Vault per la funzionalità del driver CSI dell'archivio segreti usando il comando
az aks enable-addonse abilitare il componente aggiuntivoazure-keyvault-secrets-provider. Il componente aggiuntivo crea un'identità gestita assegnata dall'utente che puoi utilizzare per autenticarti nel Key Vault.az aks enable-addons \ --addons azure-keyvault-secrets-provider \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPDopo aver abilitato il provider di segreti di Azure Key Vault, AKS crea un'identità gestita denominata
azurekeyvaultsecretsprovider-xxxxche è possibile usare per l'autenticazione 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à.
Aggiornare un cluster AKS esistente
Creare un file main.tf con la configurazione seguente per aggiornare un cluster AKS esistente con il provider Azure Key Vault per il supporto del Secrets Store CSI Driver.
Aggiornare un cluster AKS esistente.
resource "azurerm_kubernetes_cluster" "aks" { name = "<existing-cluster>" resource_group_name = "<resource-group>" key_vault_secrets_provider { secret_rotation_enabled = false } }Eseguire la configurazione. Formare una sessione Bash, eseguire i comandi seguenti per distribuire la configurazione:
Run the following commands to apply the updates: terraform init terraform validate terraform plan terraform apply
Verificare l'installazione dell'identità gestita e del provider dell'insieme di credenziali delle chiavi
Se Terraform è stato usato per creare un nuovo cluster o aggiornare un cluster esistente, è necessario sostituire le variabili come $CLUSTER_NAME nei comandi seguenti con i valori usati nella configurazione di Terraform.
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.
Verificare che l'identità gestita sia stata creata e assegnata al cluster usando il
az aks showcomando .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à
resourceIdmostra il gruppo di risorse e il nome dell'identitàazurekeyvaultsecretsprovider-myakscluster.Verifica 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/virtualMachineScaleSetse la proprietàuserAssignedIdentitiescon un ID risorsa perazurekeyvaultsecretsprovider-myaksclusterche 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.
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_GROUPVerificare che l'installazione sia terminata usando il comando
kubectl get pods, che elenca tutti i pod con le etichettesecrets-store-csi-driveresecrets-store-provider-azurenello spazio dei nomikube-system.kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver,secrets-store-provider-azure)' -o wideIl flag
-o wideinclude 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 un nuovo key vault
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
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.
Per ulteriori informazioni sui modelli di autorizzazione di Key Vault e sul controllo degli accessi in base ai ruoli di Azure, vedere Concedere l'accesso a chiavi, certificati e segreti di Key Vault con un controllo degli accessi in base ai ruoli di Azure.
Aggiornare l'insieme di credenziali delle chiavi esistente
Eseguire il comando az keyvault update per aggiornare una cassaforte delle chiavi esistente con il controllo degli accessi in base al ruolo di Azure (Azure RBAC). Il parametro --enable-rbac-authorization è necessario per abilitare Azure RBAC quando si aggiorna un insieme di credenziali esistente con Azure RBAC disabilitato.
az keyvault update \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--enable-rbac-authorization
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
Aggiungere un'assegnazione di ruolo e un segreto a Key Vault
Eseguire il comando
az keyvault showper verificare che il Key Vault abbia Azure RBAC abilitato.az keyvault show \ --name $KEYVAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query properties.enableRbacAuthorizationL'output deve essere
true.Aggiungi un'assegnazione di ruolo per l'account utente all'ambito del Key Vault usando il comando
az role assignment createin 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-eccb2c155cd7viene 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 UserL'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 tableCreare un segreto di testo in chiaro denominato
ExampleSecretnell'archivio delle chiavi usando il comandoaz keyvault secret set.Il tuo archivio di chiavi può conservare chiavi, segreti e certificati. Il
valueparametro usa laRANDOM_STRINGvariabile per creare un valore univoco per il segreto.az keyvault secret set \ --vault-name $KEYVAULT_NAME \ --name ExampleSecret \ --value MyAKSExampleSecret${RANDOM_STRING}Verifica che il segreto sia stato aggiunto nell'insieme di credenziali delle chiavi tramite il comando [
az keyvault secret show][az-keyvault-secret-show].az keyvault secret show --vault-name $KEYVAULT_NAME --name ExampleSecret
Creare un nuovo key vault
Aggiorna il file main.tf per creare un nuovo Key Vault con il controllo degli accessi in base ai ruoli di Azure (Azure RBAC) abilitato.
Creare un insieme di credenziali delle chiavi con RBAC di Azure abilitato.
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 }Assegnare il ruolo di Responsabile dei segreti di Key Vault.
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 }Creare ExampleSecret nel key vault.
resource "azurerm_key_vault_secret" "example" { name = "ExampleSecret" value = "MyAKSExampleSecret" key_vault_id = azurerm_key_vault.kv.id }Eseguire la configurazione. Formare una sessione Bash, eseguire i comandi seguenti per distribuire la configurazione aggiornata:
terraform plan terraform applyVerificare che ExampleSecret sia stato aggiunto al Key Vault usando il comando [
az keyvault secret show][az-keyvault-secret-show]. Sostituire<keyvault-name>con il nome dell'insieme di credenziali creato nella configurazione di Terraform.az keyvault secret show \ --vault-name <keyvault-name> \ --name ExampleSecret
Aggiornare l'insieme di credenziali delle chiavi esistente
Aggiorna il file main.tf per aggiornare un Key Vault esistente con il controllo degli accessi basato sui ruoli di Azure (Azure RBAC) abilitato.
Aggiornare l'insieme di credenziali esistente per abilitare Azure RBAC.
resource "azurerm_key_vault" "kv" { name = "<existing-kv>" resource_group_name = "<resource-group>" enable_rbac_authorization = true }Assegna un ruolo e aggiungi un segreto.
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 }Eseguire la configurazione. Formare una sessione Bash, eseguire i comandi seguenti per distribuire la configurazione aggiornata:
terraform plan terraform apply
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.
Rimuovi le credenziali del tuo cluster dal file locale .kube/config.
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTEliminare il gruppo di risorse e tutte le risorse al suo interno, incluse le risorse nel gruppo di risorse del nodo (
MC_) usando ilaz group deletecomando .az group delete --name $RESOURCE_GROUP --yes --no-wait
Il terraform destroy comando rimuove tutte le risorse definite nella configurazione di Terraform corrente e nel file di stato. Eseguire questo comando solo dalla directory di lavoro usata per questo articolo.
Avvertimento
Se si lavora con risorse esistenti o di produzione, esaminare attentamente il piano di esecuzione prima di eseguire:
terraform plan -destroy
Evitare l'esecuzione terraform destroy su un'infrastruttura condivisa o importata, a meno che non si sia certi che sia sicuro rimuoverlo. Per altre informazioni, vedere la documentazione di Terraform per il comando terraform destroy .
Rimuovi le credenziali del tuo cluster dal file locale .kube/config.
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTEseguire il comando seguente per rimuovere le risorse create in questo articolo:
terraform destroy
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.