Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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
SecretProviderClassCustom Resource Definition (CRD). - Ondersteunt Windows-containers.
- Synchroniseert met Kubernetes-geheimen.
- Ondersteunt automatischerotatie van gekoppelde inhoud en gesynchroniseerde Kubernetes-geheimen.
Beperkingen
- Een container die een
ConfigMapofSecretgebruikt als volume-mountsubPath, 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-xxxxxin 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.
- Controleer of uw versie van de Azure CLI 2.30.0 of hoger is. Als het een eerdere versie is, installeert u de nieuwste versie.
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
- Als u geïsoleerde netwerkclusters gebruikt, wordt aanbevolen om een privé-eindpunt in te stellen voor toegang tot Azure Key Vault.
- Als het cluster een uitgaand type
userDefinedRoutingheeft en een firewallapparaat gebruikt dat uitgaand verkeer kan beheren op basis van domeinnamen, zoals Azure Firewall, moet u ervoor zorgen dat de vereiste uitgaande netwerkregels en FQDN's zijn toegestaan. - Als u inkomend verkeer beperkt tot het cluster, controleert u of de poorten 9808 en 8095 zijn geopend.
Rollen
- In dit artikel wordt de rol Key Vault Secrets Officer gebruikt om uw account toestemming te geven om een geheim aan te maken in de sleutelkluis.
- In het artikel om Azure Key Vault-toegang te bieden, heeft de identiteit die wordt gebruikt met de
SecretProviderClassde rol van Vault-certificaatgebruiker nodig voor toegang totkeyofcertificateobjecttypen en de rol van Key Vault Secrets Gebruiker voor toegang totsecreteen objecttype.
Een AKS-cluster maken
Maak een AKS-cluster met de Azure Key Vault-provider voor ondersteuning voor Secrets Store CSI-stuurprogramma's.
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=eastus2Azure 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 demyKeyVault-variabele.Maak een Azure-resourcegroep met behulp van de
az group createopdracht.az group create --name $RESOURCE_GROUP --location $LOCATIONMaak een AKS-cluster met de Azure Key Vault-provider voor het stuurprogramma Secrets Store CSI met behulp van de
az aks createopdracht met de--enable-addons azure-keyvault-secrets-providerparameter.Met
--enable-addonsde parameter maakt u een door de gebruiker toegewezen beheerde identiteit met de naamazurekeyvaultsecretsprovider-xxxxdie 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-keysAanbeveling
Als u de Workload-id van Microsoft Entra wilt gebruiken, moet de
az aks createopdracht de--enable-oidc-issueren--enable-workload-identityparameters 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.
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" }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 } }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.
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_NAMEvariabele zonder deRANDOM_STRINGvariabele 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 demyKeyVault-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=eastus2Werk een bestaand AKS-cluster bij met de Azure Key Vault-provider voor het stuurprogramma Secrets Store CSI met behulp van de
az aks enable-addonsopdracht en schakel deazure-keyvault-secrets-providerinvoegtoepassing 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_GROUPNadat u de geheime provider van Azure Key Vault hebt ingeschakeld, maakt AKS een beheerde identiteit met de naam
azurekeyvaultsecretsprovider-xxxxdie 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.
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 } }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.
Controleer of de beheerde identiteit is gemaakt en toegewezen aan het cluster met behulp van de
az aks showopdracht.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
resourceIdeigenschap toont de resourcegroep en de naamazurekeyvaultsecretsprovider-myaksclustervan de identiteit.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/virtualMachineScaleSetsen deuserAssignedIdentitieseigenschap met een resource-ID voorazurekeyvaultsecretsprovider-myaksclusterdie 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
Haal de AKS-clusterreferenties op met behulp van de
az aks get-credentialsopdracht.az aks get-credentials \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUPControleer of de installatie is voltooid met behulp van de
kubectl get podsopdracht, waarin alle pods worden vermeld met desecrets-store-csi-driverensecrets-store-provider-azurelabels in dekube-systemnaamruimte.kubectl get pods -n kube-system -l 'app in (secrets-store-csi-driver,secrets-store-provider-azure)' -o wideDe
o widevlag 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
Voer de
az keyvault showopdracht 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.enableRbacAuthorizationDe uitvoer moet
truezijn.Voeg een roltoewijzing voor uw gebruikersaccount toe aan het sleutelkluisbereik met behulp van de
az role assignment createopdracht, zodat u in de volgende stap een sleutelkluisgeheim kunt toevoegen.De rol Key Vault Secrets Officer met unieke id
b86a8fe4-44ce-4948-aee5-eccb2c155cd7wordt 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 UserHet 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 tableMaak een geheim zonder opmaak met de naam
ExampleSecretin de sleutelkluis met behulp van deaz keyvault secret setopdracht.Uw sleutelkluis kan sleutels, geheimen en certificaten opslaan. De
valueparameter gebruikt deRANDOM_STRINGvariabele om een unieke waarde voor het geheim te maken.az keyvault secret set \ --vault-name $KEYVAULT_NAME \ --name ExampleSecret \ --value MyAKSExampleSecret${RANDOM_STRING}Controleer of het geheim is toegevoegd aan de sleutelkluis met behulp van de
az keyvault secret showopdracht.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.
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 }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 }Maak ExampleSecret in de sleutelkluis.
resource "azurerm_key_vault_secret" "example" { name = "ExampleSecret" value = "MyAKSExampleSecret" key_vault_id = azurerm_key_vault.kv.id }Implementeer de configuratie. Open een Bash-sessie en voer de volgende commando's uit om de bijgewerkte configuratie te implementeren:
terraform plan terraform applyControleer of ExampleSecret is toegevoegd aan de sleutelkluis met behulp van de
az keyvault secret showopdracht. 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.
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 }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 }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.
Verwijder de referenties van uw cluster uit uw lokale .kube/config-bestand .
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTVerwijder de resourcegroep en alle resources erin, inclusief resources in de knooppuntresourcegroep (
MC_) met behulp van deaz group deleteopdracht.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.
Verwijder de referenties van uw cluster uit uw lokale .kube/config-bestand .
KUBE_CONTEXT=$(kubectl config current-context) kubectl config delete-context $KUBE_CONTEXTVoer 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.