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.
Belangrijk
In dit artikel wordt de verouderde KMS-ervaring voor AKS beschreven. Voor nieuwe clusters met Kubernetes versie 1.33 of hoger raden we u aan de nieuwe ervaring voor KMS-gegevensversleuteling te gebruiken, die door het platform beheerde sleutels, door de klant beheerde sleutels met automatische sleutelrotatie en een vereenvoudigde configuratie-ervaring biedt.
Zie Concepten voor gegevensversleuteling in rusttoestand voor AKS voor conceptuele informatie over opties voor gegevensversleuteling.
In dit artikel leest u hoe u versleuteling at-rest inschakelt voor een openbare of persoonlijke sleutelkluis met behulp van Azure Key Vault en de KMS-invoegtoepassing (Key Management Service) op AKS. U kunt de KMS-invoegtoepassing gebruiken voor het volgende:
- Gebruik een sleutel in een sleutelkluis voor etcd-versleuteling.
- Breng je eigen sleutels mee.
- Versleuteling in rust bieden voor geheimen die zijn opgeslagen in etcd.
- Draai de sleutels in een sleutelkluis.
Zie Een KMS-provider gebruiken voor gegevensversleuteling voor meer informatie over het gebruik van KMS.
Vereisten
- Een Azure-account met een actief abonnement. Gratis een account maken
- Azure CLI versie 2.39.0 of hoger. Zoek uw versie met behulp van de
az --versionopdracht. Als u uw CLI wilt installeren of upgraden, raadpleegt u De Azure CLI installeren.
Waarschuwing
Vanaf 15 september 2024 wordt Konnectivity niet meer ondersteund voor persoonlijke sleutelkluizen voor nieuwe abonnementen of abonnementen die deze configuratie niet eerder hebben gebruikt. Voor abonnementen die momenteel deze configuratie gebruiken of deze in de afgelopen 60 dagen hebben gebruikt, wordt de ondersteuning voortgezet totdat AKS versie 1.30 het einde van de levensduur bereikt voor ondersteuning van de community.
KMS biedt ondersteuning voor Konnectivity of API Server VNet-integratie voor openbare-sleutelkluizen.
KMS biedt ondersteuning voor API Server VNet-integratie voor zowel privé- als openbare sleutelkluizen.
U kunt kubectl get pods -n kube-system gebruiken om de resultaten te verifiëren en te bevestigen dat een konnectivity-agent pod actief is. Als er een pod actief is, gebruikt het AKS-cluster Konnectivity. Wanneer u de API Server VNet-integratie gebruikt, kunt u de opdracht az aks show --resource-group <resource-group-name> --name <cluster-name> uitvoeren om te verifiëren of de instelling enableVnetIntegration is ingesteld op true.
Beperkingen
De volgende beperkingen gelden wanneer u KMS etcd-versleuteling integreert met AKS:
- Het verwijderen van de sleutel, de sleutelkluis of de bijbehorende identiteit wordt niet ondersteund.
- KMS etcd-versleuteling werkt niet met door het systeem toegewezen beheerde identiteit. Het toegangsbeleid voor de sleutelkluis moet worden ingesteld voordat de functie is ingeschakeld. Een systeemtoegewezen beheerde identiteit is pas beschikbaar zodra het cluster is gemaakt. Houd rekening met de cyclusafhankelijkheid.
- Omdat de firewall verkeer van de KMS-invoegtoepassing naar Key Vault blokkeert, worden twee scenario's niet ondersteund. Ten eerste kan Azure Key Vault niet worden geconfigureerd met de firewalloptie Openbare toegang vanuit specifieke virtuele netwerken en IP-adressen toestaan. Ten tweede kan Azure Key Vault niet worden geconfigureerd met Openbare toegang uitschakelen , tenzij VNet-integratie van API Server is ingeschakeld.
- Het maximum aantal geheimen dat wordt ondersteund door een cluster waarvoor KMS is ingeschakeld, is 2000. Het is echter belangrijk om te weten dat KMS v2 niet wordt beperkt door deze beperking en een hoger aantal geheimen kan verwerken.
- Bring Your Own (BYO) Azure Key Vault van een andere tenant wordt niet ondersteund.
- Als KMS is ingeschakeld, kunt u de gekoppelde sleutelkluismodus (openbaar versus privé) niet wijzigen. Als u een sleutelkluismodus wilt bijwerken, moet u eerst KMS uitschakelen en deze vervolgens weer inschakelen.
- Als KMS is ingeschakeld voor een cluster en een persoonlijke sleutelkluis heeft, moet het de VNet-integratietunnel van de API Server gebruiken. Konnectivity wordt niet ondersteund.
- Als u de API voor virtuele-machineschaalsets gebruikt om de knooppunten in het cluster omlaag te schalen tot nul wordt de toewijzing van de knooppunten ongedaan gemaakt. Het cluster valt vervolgens uit en wordt onherstelbaar.
- Nadat u KMS hebt uitgeschakeld, kunt u de sleutels niet verwijderen of laten verlopen. Dit gedrag zorgt ervoor dat de API-server niet meer werkt.
- Voor een privécluster waarvoor KMS is ingeschakeld en virtuele netwerkintegratie die gebruikmaakt van een privésleutelkluis, moet de netwerkbeveiligingsgroep (NSG) TCP-poort 443 van de API-server naar het IP-adres van het privé-eindpunt van de privésleutelkluis toestaan. Deze beperking moet worden overwogen bij het gebruik van andere regels in de NSG van het API-subnet of de NSG van het clustersubnet.
Maak een sleutelkluis en een sleutel voor een openbare sleutelkluis.
In de volgende secties wordt beschreven hoe u KMS inschakelt voor een openbare-sleutelkluis. U kunt een openbare sleutelkluis gebruiken met of zonder op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC).
Waarschuwing
Het verwijderen van de sleutel of de sleutelkluis wordt niet ondersteund en zorgt ervoor dat de geheimen in het cluster onherstelbaar zijn.
Als u uw sleutelkluis of uw sleutel wilt herstellen, raadpleegt u het document over herstelbeheer van Azure Key Vault met soft delete en bescherming tegen opschonen.
- Een Key Vault en sleutel creëren met Azure RBAC
- Een Key Vault en sleutel maken zonder Azure RBAC
Maak een sleutelkluis met Azure RBAC met behulp van de
az keyvault createopdracht. Met deze voorbeeldopdracht wordt ook de resource-id van de sleutelkluis geëxporteerd naar een omgevingsvariabele.export KEY_VAULT_RESOURCE_ID=$(az keyvault create --name $KEY_VAULT --resource-group $RESOURCE_GROUP --enable-rbac-authorization true --query id -o tsv)Wijs uzelf machtigingen toe om een sleutel te maken met behulp van de
az role assignment createopdracht. In dit voorbeeld wordt de rol Crypto Officer van Key Vault toegewezen aan de aangemelde gebruiker.az role assignment create --role "Key Vault Crypto Officer" --assignee-object-id $(az ad signed-in-user show --query id -o tsv) --assignee-principal-type "User" --scope $KEY_VAULT_RESOURCE_IDMaak een sleutel met behulp van de
az keyvault key createopdracht.az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULTHaal de sleutel-id op en sla deze op als een omgevingsvariabele met behulp van de
az keyvault key showopdracht.export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT --query 'key.kid' -o tsv) echo $KEY_ID
Een door de gebruiker toegewezen beheerde identiteit maken voor een openbare sleutelkluis
Maak een door de gebruiker toegewezen beheerde identiteit met behulp van de
az identity createopdracht.az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUPHaal de id van het identiteitsobject op en sla deze op als een omgevingsvariabele met behulp van de
az identity showopdracht.export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv) echo $IDENTITY_OBJECT_IDHaal de id van de identiteitsresource op en sla deze op als een omgevingsvariabele met behulp van de
az identity showopdracht.export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv) echo $IDENTITY_RESOURCE_ID
Machtigingen toewijzen om een openbare sleutelkluis te ontsleutelen en te versleutelen
In de volgende secties wordt beschreven hoe u ontsleutelings- en versleutelingsmachtigingen toewijst voor een openbare-sleutelkluis met of zonder Azure RBAC.
- Machtigingen toewijzen voor een openbare sleutelkluis met Azure RBAC
- Machtigingen toewijzen voor een openbare sleutelkluis zonder Azure RBAC
Wijs de cryptogebruikersrol Key Vault toe om ontsleuteling en versleutelingsmachtigingen te verlenen met behulp van de
az role assignment createopdracht.az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
KMS inschakelen voor een public key-vault in een AKS-cluster
In de volgende secties wordt beschreven hoe u KMS inschakelt voor een openbare sleutelkluis in een nieuw of bestaand AKS-cluster.
Een AKS-cluster maken met een openbare sleutelkluis en KMS
Maak een AKS-cluster met een openbare sleutelkluis en KMS door de
az aks createopdracht met de--enable-azure-keyvault-kms--azure-keyvault-kms-key-vault-network-access, en--azure-keyvault-kms-key-idparameters te gebruiken.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --assign-identity $IDENTITY_RESOURCE_ID \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-vault-network-access "Public" \ --azure-keyvault-kms-key-id $KEY_ID \ --generate-ssh-keys
Een openbare sleutelkluis en KMS inschakelen op een bestaand AKS-cluster
Schakel KMS in op een openbare sleutelkluis op een bestaand cluster met behulp van de
az aks updateopdracht met de--enable-azure-keyvault-kms,--azure-keyvault-kms-key-vault-network-accessen--azure-keyvault-kms-key-idparameters.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-vault-network-access "Public" \ --azure-keyvault-kms-key-id $KEY_IDWerk alle geheimen bij met behulp van de
kubectl get secretsopdracht om ervoor te zorgen dat de eerder gemaakte geheimen niet meer worden versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken. Als de vorige opdracht voor het bijwerken van KMS mislukt, voert u nog steeds de volgende opdracht uit om onverwachte status voor de KMS-invoegtoepassing te voorkomen.kubectl get secrets --all-namespaces -o json | kubectl replace -f -Wanneer u de opdracht uitvoert, is de volgende fout veilig te negeren:
The object has been modified; please apply your changes to the latest version and try again.
Bestaande sleutels roteren in een publieke sleutelkluis
Nadat u de sleutel-id hebt gewijzigd (inclusief het wijzigen van de sleutelnaam of de sleutelversie), kunt u de bestaande sleutels in de openbare sleutelkluis roteren.
Waarschuwing
Vergeet niet om alle geheimen bij te werken na sleutelrotatie. Als u niet alle geheimen bijwerkt, zijn de geheimen niet toegankelijk als de sleutels die eerder zijn gemaakt, niet bestaan of niet meer werken.
KMS gebruikt twee sleutels tegelijk. Na de eerste sleutelrotatie moet u ervoor zorgen dat zowel de oude als de nieuwe sleutels geldig zijn (niet verlopen) tot de volgende sleutelrotatie. Na de tweede sleutelrotatie kan de oudste sleutel veilig worden verwijderd/verlopen.
Nadat u de KMS-sleutelversie hebt vervangen met de nieuwe keyId, controleer securityProfile.azureKeyVaultKms.keyId in de JSON van de AKS-resource. Zorg ervoor dat de nieuwe sleutelversie wordt gebruikt.
Bestaande sleutels draaien met behulp van de
az aks updateopdracht met de--enable-azure-keyvault-kms,--azure-keyvault-kms-key-vault-network-accessen--azure-keyvault-kms-key-idparameters.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-vault-network-access "Public" \ --azure-keyvault-kms-key-id $NEW_KEY_IDWerk alle geheimen bij met behulp van de
kubectl get secretsopdracht om ervoor te zorgen dat de eerder gemaakte geheimen niet meer worden versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken. Als de vorige opdracht voor het bijwerken van KMS mislukt, voert u nog steeds de volgende opdracht uit om onverwachte status voor de KMS-invoegtoepassing te voorkomen.kubectl get secrets --all-namespaces -o json | kubectl replace -f -Wanneer u de opdracht uitvoert, is de volgende fout veilig te negeren:
The object has been modified; please apply your changes to the latest version and try again.
Een sleutelkluis en sleutel maken voor een persoonlijke sleutelkluis
Als u KMS inschakelt voor een persoonlijke sleutelkluis, maakt AKS automatisch een privé-eindpunt en een privékoppeling in de knooppuntresourcegroep. De sleutelkluis heeft een privé-eindpuntverbinding met het AKS-cluster.
Waarschuwing
Houd rekening met de volgende informatie bij het gebruik van een persoonlijke sleutelkluis:
- KMS biedt alleen ondersteuning voor API Server VNet-integratie voor een persoonlijke sleutelkluis.
- Het maken of bijwerken van sleutels in een persoonlijke sleutelkluis die geen privé-eindpunt heeft, wordt niet ondersteund. Zie Een sleutelkluis integreren met behulp van Azure Private Link voor meer informatie over het beheren van persoonlijke sleutelkluizen.
- Het verwijderen van de sleutel of de sleutelkluis wordt niet ondersteund en zorgt ervoor dat de geheimen in het cluster onherstelbaar zijn. Als u uw sleutelkluis of uw sleutel wilt herstellen, raadpleegt u het document over herstelbeheer van Azure Key Vault met soft delete en bescherming tegen opschonen.
Maak een persoonlijke sleutelkluis met behulp van de
az keyvault createopdracht met de--public-network-access Disabledparameter.az keyvault create --name $KEY_VAULT --resource-group $RESOURCE_GROUP --public-network-access DisabledMaak een sleutel met behulp van de
az keyvault key createopdracht.az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT
Een door de gebruiker toegewezen beheerde identiteit maken voor een privé Key Vault.
Maak een door de gebruiker toegewezen beheerde identiteit met behulp van de
az identity createopdracht.az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUPHaal de id van het identiteitsobject op en sla deze op als een omgevingsvariabele met behulp van de
az identity showopdracht.export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv) echo $IDENTITY_OBJECT_IDHaal de id van de identiteitsresource op en sla deze op als een omgevingsvariabele met behulp van de
az identity showopdracht.export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv) echo $IDENTITY_RESOURCE_ID
Machtigingen toewijzen voor het ontsleutelen en versleutelen van een privé sleutelopslag
In de volgende secties wordt beschreven hoe u machtigingen voor ontsleuteling en versleuteling toewijst voor een persoonlijke sleutelkluis met of zonder Azure RBAC.
- Machtigingen toewijzen voor een persoonlijke sleutelkluis met Azure RBAC
- Machtigingen toewijzen voor een persoonlijke sleutelkluis zonder Azure RBAC
Wijs de cryptogebruikersrol Key Vault toe om ontsleuteling en versleutelingsmachtigingen te verlenen met behulp van de
az role assignment createopdracht.az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
Machtigingen toewijzen om een privékoppeling te maken
Voor private key vaults is de rol Key Vault Contributor vereist om een privékoppeling te maken tussen de private key vault en het cluster.
Wijs de rol Inzender voor Key Vault toe met behulp van de
az role assignment createopdracht.az role assignment create --role "Key Vault Contributor" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
KMS inschakelen voor een privésleutelkluis op een AKS-cluster
In de volgende secties wordt beschreven hoe u KMS inschakelt voor een persoonlijke sleutelkluis op een nieuw of bestaand AKS-cluster.
Een AKS-cluster maken met een persoonlijke sleutelkluis en KMS
Maak een AKS-cluster met een persoonlijke sleutelkluis en KMS met behulp van de opdracht met de
az aks create--enable-azure-keyvault-kms,--azure-keyvault-kms-key-iden--azure-keyvault-kms-key-vault-network-access--azure-keyvault-kms-key-vault-resource-idparameters.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --assign-identity $IDENTITY_RESOURCE_ID \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-id $KEY_ID \ --azure-keyvault-kms-key-vault-network-access "Private" \ --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \ --generate-ssh-keys
Een bestaand AKS-cluster bijwerken om KMS etcd-versleuteling in te schakelen voor een persoonlijke sleutelkluis
Schakel KMS in op een private sleutelkluis op een bestaand cluster met behulp van de
az aks updateopdracht met de--enable-azure-keyvault-kms,--azure-keyvault-kms-key-id,--azure-keyvault-kms-key-vault-network-accessen--azure-keyvault-kms-key-vault-resource-idparameters.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-id $KEY_ID \ --azure-keyvault-kms-key-vault-network-access "Private" \ --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_IDWerk alle geheimen bij met behulp van de
kubectl get secretsopdracht om ervoor te zorgen dat de eerder gemaakte geheimen niet meer worden versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken. Als de vorige opdracht voor het bijwerken van KMS mislukt, voert u nog steeds de volgende opdracht uit om onverwachte status voor de KMS-invoegtoepassing te voorkomen.kubectl get secrets --all-namespaces -o json | kubectl replace -f -Wanneer u de opdracht uitvoert, is de volgende fout veilig te negeren:
The object has been modified; please apply your changes to the latest version and try again.
Bestaande sleutels rouleren in een privé sleutelkluis
Nadat u de sleutel-id hebt gewijzigd (inclusief het wijzigen van de sleutelnaam of de sleutelversie), kunt u de bestaande sleutels in de persoonlijke sleutelkluis draaien.
Waarschuwing
Vergeet niet om alle geheimen bij te werken na sleutelrotatie. Als u niet alle geheimen bijwerkt, zijn de geheimen niet toegankelijk als de sleutels die eerder zijn gemaakt, niet bestaan of niet meer werken.
Nadat u de sleutel hebt gedraaid, wordt de vorige sleutel (key1) nog steeds in de cache opgeslagen en mag deze niet worden verwijderd. Als u de vorige sleutel (sleutel1) onmiddellijk wilt verwijderen, moet u de sleutel twee keer draaien. Vervolgens worden sleutel2 en sleutel3 in de cache opgeslagen en kan sleutel1 worden verwijderd zonder dat dit van invloed is op het bestaande cluster.
Nadat u de KMS-sleutelversie hebt vervangen met de nieuwe keyId, controleer securityProfile.azureKeyVaultKms.keyId in de JSON van de AKS-resource. Zorg ervoor dat de nieuwe sleutelversie wordt gebruikt.
Rooteer bestaande sleutels in een privé sleutelkluis met behulp van de
az aks updateopdracht, samen met de parameters--enable-azure-keyvault-kms,--azure-keyvault-kms-key-id,--azure-keyvault-kms-key-vault-network-accessen--azure-keyvault-kms-key-vault-resource-id.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-id $NEW_KEY_ID \ --azure-keyvault-kms-key-vault-network-access "Private" \ --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_IDWerk alle geheimen bij met behulp van de
kubectl get secretsopdracht om ervoor te zorgen dat de eerder gemaakte geheimen niet meer worden versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken. Als de vorige opdracht voor het bijwerken van KMS mislukt, voert u nog steeds de volgende opdracht uit om onverwachte status voor de KMS-invoegtoepassing te voorkomen.kubectl get secrets --all-namespaces -o json | kubectl replace -f -Wanneer u de opdracht uitvoert, is de volgende fout veilig te negeren:
The object has been modified; please apply your changes to the latest version and try again.
KMS uitschakelen op een AKS-cluster
Voordat u KMS uitschakelt, controleert u of KMS is ingeschakeld op het cluster met behulp van de
az aks listopdracht.az aks list --query "[].{Name:name, KmsEnabled:securityProfile.azureKeyVaultKms.enabled, KeyId:securityProfile.azureKeyVaultKms.keyId}" -o tableZodra dit is bevestigd, kunt u KMS uitschakelen met behulp van de
az aks updateopdracht met de--disable-azure-keyvault-kmsparameter.az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --disable-azure-keyvault-kmsWerk alle geheimen bij met behulp van de
kubectl get secretsopdracht om ervoor te zorgen dat de eerder gemaakte geheimen niet meer worden versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken. Als de vorige opdracht voor het bijwerken van KMS mislukt, voert u nog steeds de volgende opdracht uit om onverwachte status voor de KMS-invoegtoepassing te voorkomen.kubectl get secrets --all-namespaces -o json | kubectl replace -f -Wanneer u de opdracht uitvoert, is de volgende fout veilig te negeren:
The object has been modified; please apply your changes to the latest version and try again.
Volgende stappen
Zie de volgende artikelen voor meer informatie over het gebruik van KMS met AKS:
- KMS-gegevensversleuteling inschakelen in AKS - De nieuwe KMS-ervaring met door het platform beheerde sleutels en automatische sleutelrotatie
- Concepten voor data-encryptie in rusttoestand voor AKS
- De sleutelkluismodus voor een AKS-cluster (Azure Kubernetes Service) bijwerken met KMS etcd-versleuteling
- Migreren naar KMS v2 voor etcd-versleuteling in Azure Kubernetes Service (AKS)
- Waarneembaarheid voor KMS etcd-versleuteling in Azure Kubernetes Service (AKS)