Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Azure Key Vault-providern för CSI-drivrutinen (Secrets Store Container Storage Interface) möjliggör integrering av ett Azure Key Vault som ett hemligt arkiv med ett AKS-kluster (Azure Kubernetes Service) via en CSI-volym.
Funktioner
- Monterar hemligheter, nycklar och certifikat till en podd med hjälp av en CSI-volym.
- Stöder interna CSI-volymer.
- Stöder montering av flera secrets store-objekt som en enda volym.
- Stöder poddportabilitet med CRD
SecretProviderClass(Custom Resource Definition). - Stöder Windows-containrar.
- Synkroniserar med Kubernetes-hemligheter.
- Stöder autorotation av monterat innehåll och synkroniserade Kubernetes-hemligheter.
Begränsningar
- En container som använder en
ConfigMapellerSecretsom ensubPathvolymmontering får inte automatiska uppdateringar när hemligheten roteras, vilket är en Kubernetes-begränsning. För att ändringarna ska börja gälla måste programmet läsa in den ändrade filen igen genom att antingen söka efter ändringar i filsystemet eller genom att starta om podden. Mer information finns i Secrets Store CSI Driver: kända begränsningar. - Tillägget skapar en hanterad identitet med namnet
azurekeyvaultsecretsprovider-xxxxxi nodresursgruppen (MC_) och tilldelar den till vm-skalningsuppsättningen automatiskt. Du kan använda den här hanterade identiteten eller din egen hanterade identitet för att få åtkomst till nyckelvalvet. Det är inte möjligt att förhindra skapandet av identiteten.
Förutsättningar
- Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
- Kontrollera att din version av Azure CLI är 2.30.0 eller senare. Om det är en tidigare version installerar du den senaste versionen.
Om du inte har någon Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
Terraform som är version 1.6 eller senare.
Azure CLI installerat och loggat in. installera den senaste versionen.
Behörigheter för att skapa AKS och Key Vault resurser.
Ange din Azure-prenumeration i Azure CLI med följande kommando. Ersätt
<subscriptionId>med ditt prenumerations-ID.az account set --subscription <subscriptionId>
Nätverk
- Om du använder isolerade nätverkskluster rekommenderar vi att du konfigurerar en privat slutpunkt för åtkomst till Azure Key Vault.
- Om klustret har utgående typ
userDefinedRoutingoch använder en brandväggsenhet som kan styra utgående trafik baserat på domännamn, till exempel Azure Firewall, kontrollerar du att nödvändiga regler för utgående nätverk och FQDN tillåts. - Om du begränsar Ingress till klustret kontrollerar du att portarna 9808 och 8095 är öppna.
Roller
- Den här artikeln använder rollen Key Vault Secrets Officer för att ge ditt användarkonto behörighet att skapa en hemlighet i nyckelvalvet.
- I artikeln för att ge åtkomst till Azure Key Vault, behöver den identitet som används med
SecretProviderClassKey Vault-certifikatanvändare åtkomstkeytillcertificateeller och Key Vault-hemlighetsanvändare för att få åtkomstsecrettill objekttypen.
Skapa ett AKS-kluster
Skapa ett AKS-kluster med Azure Key Vault-leverantören för stöd av Secrets Store CSI Driver.
Skapa variabler som används i kommandona för att skapa ett AKS-kluster och 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=eastus2Azure Key Vault-namn måste vara globalt unika, alfanumeriska, inklusive bindestreck och 3–24 tecken. Namnet på nyckelvalvet sammanfogar
KEYVAULT_NAMEvariabelnsmyKeyVaultvärde medRANDOM_STRINGvariabelns sträng på 10 tecken.Skapa en Azure-resursgrupp med kommandot
az group create.az group create --name $RESOURCE_GROUP --location $LOCATIONSkapa ett AKS-kluster med Azure Key Vault-providern för CSI-drivrutinsfunktionen i Secrets Store med hjälp av
az aks createkommandot med parametern--enable-addons azure-keyvault-secrets-provider.Parametern
--enable-addonsskapar en användartilldelad hanterad identitet med namnetazurekeyvaultsecretsprovider-xxxxsom du kan använda för att autentisera till ditt nyckelvalv. Den hanterade identiteten lagras i nodens resursgrupp (MC_) och tilldelas automatiskt till skaleringsuppsättningen för virtuella maskiner. Du kan använda den här hanterade identiteten eller din egen hanterade identitet för att få åtkomst till nyckelvalvet. Det är inte möjligt att förhindra skapandet av identiteten.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-addons azure-keyvault-secrets-provider \ --generate-ssh-keysTips/Råd
Om du vill använda Microsoft Entra-arbetsbelastnings-ID
az aks createmåste kommandot innehålla parametrarna--enable-oidc-issueroch--enable-workload-identity.
Skapa ett AKS-kluster
Skapa en main.tf fil med följande konfiguration för att skapa ett AKS-kluster med Azure Key Vault provider för CSI-drivrutinsstöd för Secrets Store.
Skapa Terraform-konfigurationen.
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" }Skapa AKS-klustret.
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 } }Distribuera konfigurationen. Skapa en Bash-session och kör följande kommandon för att distribuera resurserna:
terraform init terraform validate terraform plan terraform apply
Uppdatera ett befintligt AKS-kluster
Uppdatera ett befintligt AKS-kluster med Azure Key Vault-providern för CSI-drivrutinsstöd för Secrets Store.
Skapa variabler som används i kommandona. Ersätt värdena efter behov för att uppdatera ditt befintliga AKS-kluster eller Key Vault.
Om du till exempel använder ett befintligt nyckelvalv ersätter
KEYVAULT_NAMEdu variabelns värde utan att använda variabelnRANDOM_STRING.Om du inte har något nyckelvalv måste Azure Key Vault-namn vara globalt unika, alfanumeriska, inklusive bindestreck och 3–24 tecken. Namnet på nyckelvalvet sammanfogar
KEYVAULT_NAMEvariabelnsmyKeyVaultvärde medRANDOM_STRINGvariabelns sträng på 10 tecken. Du kan skapa nyckelvalvet senare i den här artikeln.export RANDOM_STRING=$(printf '%05d%05d' "$RANDOM" "$RANDOM") export KEYVAULT_NAME=myKeyVault${RANDOM_STRING} export RESOURCE_GROUP=myResourceGroup export CLUSTER_NAME=myAKSCluster export LOCATION=eastus2Uppdatera ett befintligt AKS-kluster med Azure Key Vault-providern för CSI-drivrutinsfunktionen i Secrets Store med hjälp av
az aks enable-addonskommandot och aktiveraazure-keyvault-secrets-providertillägget. Tillägget skapar en användartilldelad hanterad identitet som du kan använda för att autentisera till ditt nyckelvalv.az aks enable-addons \ --addons azure-keyvault-secrets-provider \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPNär du har aktiverat Azure Key Vault-hemlighetsprovidern skapar AKS en hanterad identitet med namnet
azurekeyvaultsecretsprovider-xxxxsom du kan använda för att autentisera till ditt nyckelvalv. Den hanterade identiteten lagras i nodens resursgrupp (MC_) och tilldelas automatiskt till skaleringsuppsättningen för virtuella maskiner. Du kan använda den här hanterade identiteten eller din egen hanterade identitet för att få åtkomst till nyckelvalvet. Det är inte möjligt att förhindra skapandet av identiteten.
Uppdatera ett befintligt AKS-kluster
Skapa en main.tf fil med följande konfiguration för att uppdatera ett befintligt AKS-kluster med Azure Key Vault provider för CSI-drivrutinsstöd för Secrets Store.
Uppdatera ett befintligt AKS-kluster.
resource "azurerm_kubernetes_cluster" "aks" { name = "<existing-cluster>" resource_group_name = "<resource-group>" key_vault_secrets_provider { secret_rotation_enabled = false } }Distribuera konfigurationen. Skapa en Bash-session och kör följande kommandon för att distribuera konfigurationen:
Run the following commands to apply the updates: terraform init terraform validate terraform plan terraform apply
Verifiera installationen av den hanterade identiteten och nyckelvalvsprovidern
Om du använde Terraform för att skapa ett nytt kluster eller uppdatera ett befintligt kluster måste du ersätta variablerna som $CLUSTER_NAME i följande kommandon med de värden som du använde i Terraform-konfigurationen.
Verifiera den hanterade identiteten
Använd följande steg för att verifiera att en hanterad identitet skapades och tilldelades skalningsuppsättningen för klustrets virtuella maskiner.
Kontrollera att den hanterade identiteten skapades och tilldelades klustret med hjälp av
az aks showkommandot .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" } } }Egenskapen
resourceIdvisar resursgruppen och identitetens namnazurekeyvaultsecretsprovider-myakscluster.Kontrollera att den hanterade identiteten har tilldelats nodresursgruppens VM-skalningsuppsättning.
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]'Utdata visar resurs-ID för Virtuella Maskinskalningsuppsättningar
Microsoft.Compute/virtualMachineScaleSetsoch egenskapenuserAssignedIdentitiesmed ett resurs-ID förazurekeyvaultsecretsprovider-myaksclustersom bekräftar att identiteten har tilldelats den Virtuella Maskinskalningsuppsättningen.
Verifiera installationen av Azure Key Vault-providern för Secrets Store CSI-drivrutinen
Hämta autentiseringsuppgifterna för AKS-klustret med hjälp av
az aks get-credentialskommandot .az aks get-credentials \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPKontrollera att installationen är klar med
kubectl get podskommandot som visar alla poddar medsecrets-store-csi-driveretiketterna ochsecrets-store-provider-azureikube-systemnamnområdet.kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver,secrets-store-provider-azure)' -o wideFlaggan
o wideinnehåller den nod som varje podd körs på i utdata.Dina utdata bör se ut ungefär som följande exempelutdata:
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
Skapa nytt nyckelvalv
az keyvault create Kör kommandot för att skapa ett nytt nyckelvalv med Azure RBAC aktiverat.
az keyvault create \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--location $LOCATION \
--enable-rbac-authorization
Azure RBAC är aktiverat som standard när du skapar ett nytt nyckelvalv även om du inte inkluderar parametern --enable-rbac-authorization .
För mer information om behörighetsmodeller för Key Vault och Azure RBAC, se Ge åtkomst till Key Vault-nycklar, certifikat och hemligheter med Azure rollbaserad åtkomstkontroll.
Uppdatera befintligt nyckelvalv
Kör kommandot az keyvault update för att uppdatera ett befintligt nyckelvalv med Azure rollbaserad åtkomstkontroll (Azure RBAC). Parametern --enable-rbac-authorization krävs för att aktivera Azure RBAC när du uppdaterar ett befintligt nyckelvalv som har Azure RBAC inaktiverat.
az keyvault update \
--name $KEYVAULT_NAME \
--resource-group $RESOURCE_GROUP \
--enable-rbac-authorization
Mer information om nyckelvalvsbehörighetsmodeller och Azure RBAC finns i Ge åtkomst till Key Vault-nycklar, certifikat och hemligheter med en rollbaserad åtkomstkontroll i Azure
Lägg till rolltilldelning och hemlighet i nyckelvalvet
Kör kommandot
az keyvault showför att kontrollera att nyckelvalvet har Azure RBAC aktiverat.az keyvault show \ --name $KEYVAULT_NAME \ --resource-group $RESOURCE_GROUP \ --query properties.enableRbacAuthorizationUtdata ska vara
true.Lägg till en rolltilldelning för ditt användarkonto i nyckelvalvets omfång med
az role assignment createkommandot så att du kan lägga till en hemlighet i nyckelvalvet i nästa steg.Rollen Key Vault Secrets Officer med unik identifierare
b86a8fe4-44ce-4948-aee5-eccb2c155cd7läggs till och du kan använda antingen namnet eller den unika identifieraren. Det är bra att använda rollens unika identifierare för att förhindra problem om rollnamnet ändras.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 UserDet kan ta flera minuter innan rolltilldelningen börjar gälla. Du kan kontrollera att rolltilldelningen skapades med följande kommando:
az role assignment list \ --assignee-object-id $MYID \ --scope $KEYVAULT_ID \ --query '[].{Role:roleDefinitionName, Scope:scope}' \ --output tableSkapa en oformaterad hemlighet med namnet
ExampleSecreti nyckelvalvet med kommandotaz keyvault secret set.Ditt nyckelvalv kan lagra nycklar, hemligheter och certifikat. Parametern
valueanvänder variabelnRANDOM_STRINGför att skapa ett unikt värde för hemligheten.az keyvault secret set \ --vault-name $KEYVAULT_NAME \ --name ExampleSecret \ --value MyAKSExampleSecret${RANDOM_STRING}Kontrollera att hemligheten har lagts till i nyckelvalvet med kommandot
az keyvault secret show.az keyvault secret show --vault-name $KEYVAULT_NAME --name ExampleSecret
Skapa nytt nyckelvalv
Uppdatera filen main.tf för att skapa ett nytt nyckelvalv med Azure rollbaserad åtkomstkontroll (Azure RBAC) aktiverad.
Skapa ett nytt nyckelvalv med Azure RBAC aktiverat.
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 }Tilldela rollen Key Vault Secrets Officer.
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 }Skapa ExampleSecret i nyckelvalvet.
resource "azurerm_key_vault_secret" "example" { name = "ExampleSecret" value = "MyAKSExampleSecret" key_vault_id = azurerm_key_vault.kv.id }Distribuera konfigurationen. Skapa en Bash-session och kör följande kommandon för att distribuera den uppdaterade konfigurationen:
terraform plan terraform applyKontrollera att ExampleSecret har lagts till i nyckelvalvet med kommandot
az keyvault secret show. Ersätt<keyvault-name>med namnet på nyckelvalvet som du skapade i Terraform-konfigurationen.az keyvault secret show \ --vault-name <keyvault-name> \ --name ExampleSecret
Uppdatera befintligt nyckelvalv
Uppdatera filen main.tf för att uppdatera ett befintligt nyckelvalv med Azure rollbaserad åtkomstkontroll (Azure RBAC) aktiverad.
Uppdatera befintligt nyckelvalv för att aktivera Azure RBAC.
resource "azurerm_key_vault" "kv" { name = "<existing-kv>" resource_group_name = "<resource-group>" enable_rbac_authorization = true }Tilldela roll och lägg till hemlighet.
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 }Distribuera konfigurationen. Skapa en Bash-session och kör följande kommandon för att distribuera den uppdaterade konfigurationen:
terraform plan terraform apply
Rensa resurser
Om du ska gå till nästa artikel och behöver dessa resurser ignorerar du följande steg. Om du är klar och inte planerar att fortsätta till nästa artikel bör du ta bort resurserna som skapas i den här artikeln för att undvika onödiga kostnader.
Ta bort klustrets autentiseringsuppgifter från din lokala .kube/config-fil .
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTTa bort resursgruppen och alla resurser i den, inklusive resurser i nodresursgruppen (
MC_) med kommandotaz group delete.az group delete --name $RESOURCE_GROUP --yes --no-wait
Kommandot terraform destroy tar bort alla resurser som definierats i den aktuella Terraform-konfigurations- och tillståndsfilen. Kör endast det här kommandot från arbetskatalogen som används för den här artikeln.
Varning
Om du arbetar med befintliga eller produktionsresurser, granskar du utförandeplanen noggrant innan du kör:
terraform plan -destroy
Undvik att köra terraform destroy mot delad eller importerad infrastruktur om du inte är säker på att det är säkert att ta bort den. Mer information finns i Terraform-dokumentationen för terraform destroy-kommandot .
Ta bort klustrets autentiseringsuppgifter från din lokala .kube/config-fil .
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTKör följande kommando för att ta bort resurserna som skapats i den här artikeln:
terraform destroy
Nästa steg
I den här artikeln har du lärt dig hur du använder Azure Key Vault-providern för Secrets Store CSI-drivrutinen i ett AKS-kluster. Nu måste du ange en identitet för att få åtkomst till Azure Key Vault. Fortsätt till nästa artikel om du vill veta mer.