KMS-versleuteling (Key Management Service) etcd toevoegen aan een AKS-cluster (Azure Kubernetes Service)
In dit artikel wordt beschreven hoe u versleuteling at rest inschakelt voor uw Kubernetes-geheimen in etcd met behulp van Azure Key Vault met de KMS-invoegtoepassing (Key Management Service). Met de KMS-invoegtoepassing kunt u het volgende doen:
- Gebruik een sleutel in Key Vault voor etcd-versleuteling.
- Neem je eigen sleutels mee.
- Versleuteling-at-rest bieden voor geheimen die zijn opgeslagen in etcd.
- Draai de sleutels in Key Vault.
Zie Secret Data-at-Rest versleutelen voor meer informatie over het gebruik van de KMS-invoegtoepassing.
Vereisten
- Een Azure-account met een actief abonnement. Gratis een account maken
- Azure CLI versie 2.39.0 of hoger. Voer uit
az --version
om uw versie te vinden. Zie Azure CLI installeren als u de CLI wilt installeren of een upgrade wilt uitvoeren.
Waarschuwing
KMS ondersteunt Konnectivity- of API Server VNet-integratie.
U kunt gebruiken kubectl get po -n kube-system
om te controleren of de resultaten laten zien dat een pod konnectivity-agent-xxx wordt uitgevoerd. Als dat zo is, betekent dit dat het AKS-cluster Konnectivity gebruikt. Wanneer u VNet-integratie gebruikt, kunt u de opdracht az aks cluster show -g -n
uitvoeren om te controleren of de instelling enableVnetIntegration
is ingesteld op true.
Beperkingen
De volgende beperkingen zijn van toepassing wanneer u KMS etcd-versleuteling integreert met AKS:
- Het verwijderen van de sleutel, Key Vault of de bijbehorende identiteit wordt niet ondersteund.
- KMS etcd-versleuteling werkt niet met een door het systeem toegewezen beheerde identiteit. Het toegangsbeleid voor de sleutelkluis moet worden ingesteld voordat de functie wordt ingeschakeld. Bovendien is een door het systeem toegewezen beheerde identiteit niet beschikbaar totdat het cluster is gemaakt. Er is dus sprake van een cyclusafhankelijkheid.
- Azure Key Vault waarvoor firewall is ingeschakeld om openbare toegang toe te staan, wordt niet ondersteund omdat hiermee verkeer van de KMS-invoegtoepassing naar de Key Vault wordt geblokkeerd.
- Het maximum aantal geheimen dat door een cluster met KMS wordt ondersteund, is 2000.
- Bring Your Own (BYO) Azure Key Vault van een andere tenant wordt niet ondersteund.
- Als KMS is ingeschakeld, kunt u het gekoppelde Azure Key Vault-model (openbaar, privé) niet wijzigen. Als u de gekoppelde key vault-modus wilt wijzigen, moet u KMS opnieuw uitschakelen en inschakelen.
- Als voor een cluster KMS met persoonlijke sleutelkluis is ingeschakeld en de
API Server VNet integration
tunnel niet wordt gebruikt, is het stoppen/starten van het cluster niet toegestaan. - Als u de API voor virtuele-machineschaalsets (VMSS) gebruikt om knooppunten in het cluster omlaag te schalen naar nul, wordt de toewijzing van de knooppunten ongedaan gemaakt, waardoor het cluster uitvalt en niet meer kan worden hersteld.
KMS ondersteunt openbare sleutelkluis en persoonlijke sleutelkluis.
KMS inschakelen met openbare sleutelkluis
Een sleutelkluis en sleutel maken
Waarschuwing
Het verwijderen van de sleutel of de Azure Key Vault wordt niet ondersteund en zorgt ervoor dat de geheimen niet kunnen worden hersteld in het cluster.
Als u uw Key Vault of sleutel wilt herstellen, raadpleegt u Herstelbeheer van Azure Key Vault met voorlopig verwijderen en beveiliging tegen opschonen.
Voor niet-RBAC-sleutelkluis
Gebruik az keyvault create
om een sleutelkluis te maken.
az keyvault create --name MyKeyVault --resource-group MyResourceGroup
Gebruik az keyvault key create
om een sleutel te maken.
az keyvault key create --name MyKeyName --vault-name MyKeyVault
Gebruik az keyvault key show
om de sleutel-id te exporteren.
export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID
In het bovenstaande voorbeeld wordt de sleutel-id opgeslagen in KEY_ID.
Voor RBAC-sleutelkluis
Gebruik az keyvault create
om een sleutelkluis te maken met behulp van Azure Role Based Access Control.
export KEYVAULT_RESOURCE_ID=$(az keyvault create --name MyKeyVault --resource-group MyResourceGroup --enable-rbac-authorization true --query id -o tsv)
Wijs uzelf een machtiging toe om een sleutel te maken.
az role assignment create --role "Key Vault Crypto Officer" --assignee-object-id $(az ad signed-in-user show --query id --out tsv) --assignee-principal-type "User" --scope $KEYVAULT_RESOURCE_ID
Gebruik az keyvault key create
om een sleutel te maken.
az keyvault key create --name MyKeyName --vault-name MyKeyVault
Gebruik az keyvault key show
om de sleutel-id te exporteren.
export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID
In het bovenstaande voorbeeld wordt de sleutel-id opgeslagen in KEY_ID.
Een door de gebruiker toegewezen beheerde identiteit maken
Gebruik az identity create
om een door de gebruiker toegewezen beheerde identiteit te maken.
az identity create --name MyIdentity --resource-group MyResourceGroup
Gebruik az identity show
om de id van het identiteitsobject op te halen.
IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID
In het bovenstaande voorbeeld wordt de waarde van de id-object-id opgeslagen in IDENTITY_OBJECT_ID.
Gebruik az identity show
om de id van de identiteitsresource op te halen.
IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID
In het bovenstaande voorbeeld wordt de waarde van de id-resource-id opgeslagen in IDENTITY_RESOURCE_ID.
Machtigingen toewijzen (ontsleutelen en versleutelen) voor toegang tot de sleutelkluis
Voor niet-RBAC-sleutelkluis
Als uw sleutelkluis niet is ingeschakeld met --enable-rbac-authorization
, kunt u gebruiken az keyvault set-policy
om een Azure-sleutelkluisbeleid te maken.
az keyvault set-policy -n MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID
Voor RBAC-sleutelkluis
Als uw sleutelkluis is ingeschakeld met --enable-rbac-authorization
, moet u de RBAC-rol 'Key Vault Cryptogebruiker' toewijzen die de machtiging voor ontsleutelen en versleutelen heeft.
az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID
Een AKS-cluster maken met KMS etcd-versleuteling ingeschakeld
Maak een AKS-cluster met behulp van de opdracht az aks create met de --enable-azure-keyvault-kms
parameters en --azure-keyvault-kms-key-vault-network-access
--azure-keyvault-kms-key-id
om KMS etcd-versleuteling in te schakelen.
az aks create --name myAKSCluster --resource-group MyResourceGroup --assign-identity $IDENTITY_RESOURCE_ID --enable-azure-keyvault-kms --azure-keyvault-kms-key-vault-network-access "Public" --azure-keyvault-kms-key-id $KEY_ID
Een bestaand AKS-cluster bijwerken om KMS etcd-versleuteling in te schakelen
Gebruik az aks update met de --enable-azure-keyvault-kms
parameters en --azure-keyvault-kms-key-id
--azure-keyvault-kms-key-vault-network-access
om KMS etcd-versleuteling in te schakelen op een bestaand cluster.
az aks update --name myAKSCluster --resource-group MyResourceGroup --enable-azure-keyvault-kms --azure-keyvault-kms-key-vault-network-access "Public" --azure-keyvault-kms-key-id $KEY_ID
Gebruik de volgende opdracht om alle geheimen bij te werken. Anders worden oude geheimen niet versleuteld. Voor grotere clusters kunt u de geheimen onderverdelen op naamruimte of een update uitvoeren.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
De bestaande sleutels roteren
Nadat u de sleutel-id (inclusief sleutelnaam en sleutelversie) hebt gewijzigd, kunt u az aks update gebruiken met de --enable-azure-keyvault-kms
--azure-keyvault-kms-key-vault-network-access
parameters en --azure-keyvault-kms-key-id
om de bestaande sleutels van KMS te roteren.
Waarschuwing
Vergeet niet om alle geheimen bij te werken na sleutelrotatie. Anders zijn de geheimen niet toegankelijk als de oude sleutels niet bestaan of niet werken.
Nadat u de sleutel hebt geroteerd, wordt de oude sleutel (sleutel1) nog steeds in de cache opgeslagen en mag deze niet worden verwijderd. Als u de oude sleutel (sleutel1) onmiddellijk wilt verwijderen, moet u de sleutel twee keer draaien. Vervolgens worden key2 en key3 in de cache opgeslagen en kan sleutel1 worden verwijderd zonder dat dit van invloed is op het bestaande cluster.
az aks update --name myAKSCluster --resource-group MyResourceGroup --enable-azure-keyvault-kms --azure-keyvault-kms-key-vault-network-access "Public" --azure-keyvault-kms-key-id $NEW_KEY_ID
Gebruik de volgende opdracht om alle geheimen bij te werken. Anders worden oude geheimen nog steeds versleuteld met de vorige sleutel. Voor grotere clusters kunt u de geheimen onderverdelen op naamruimte of een update uitvoeren.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
KMS met persoonlijke sleutelkluis inschakelen
Als u KMS met een privésleutelkluis inschakelt, maakt AKS automatisch een privé-eindpunt en een privékoppeling in de knooppuntresourcegroep. De sleutelkluis wordt toegevoegd aan een privé-eindpuntverbinding met het AKS-cluster.
Een persoonlijke sleutelkluis en sleutel maken
Waarschuwing
Het verwijderen van de sleutel of de Azure Key Vault wordt niet ondersteund en zorgt ervoor dat de geheimen niet kunnen worden hersteld in het cluster.
Als u uw sleutelkluis of sleutel wilt herstellen, raadpleegt u Azure Key Vault herstelbeheer met beveiliging tegen voorlopig verwijderen en opschonen.
Gebruik az keyvault create
om een persoonlijke sleutelkluis te maken.
az keyvault create --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled
Het maken of bijwerken van sleutels in een privésleutelkluis zonder privé-eindpunt wordt niet ondersteund. Als u persoonlijke sleutelkluizen wilt beheren, raadpleegt u Integreren Key Vault met Azure Private Link.
Een door de gebruiker toegewezen beheerde identiteit maken
Gebruik az identity create
om een door de gebruiker toegewezen beheerde identiteit te maken.
az identity create --name MyIdentity --resource-group MyResourceGroup
Gebruik az identity show
om de id van het identiteitsobject op te halen.
IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID
In het bovenstaande voorbeeld wordt de waarde van de id-object-id opgeslagen in IDENTITY_OBJECT_ID.
Gebruik az identity show
om id-resource-id op te halen.
IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID
In het bovenstaande voorbeeld wordt de waarde van de id-resource-id opgeslagen in IDENTITY_RESOURCE_ID.
Machtigingen toewijzen (ontsleutelen en versleutelen) voor toegang tot de sleutelkluis
Voor niet-RBAC-sleutelkluis
Als uw sleutelkluis niet is ingeschakeld met --enable-rbac-authorization
, kunt u gebruiken az keyvault set-policy
om een Azure-sleutelkluisbeleid te maken.
az keyvault set-policy -n MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID
Voor RBAC-sleutelkluis
Als uw sleutelkluis is ingeschakeld met --enable-rbac-authorization
, moet u een RBAC-rol toewijzen die ontsleutelingsmachtigingen bevat.
az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID
Machtiging toewijzen voor het maken van een privékoppeling
Voor privésleutelkluizen hebt u de rol Key Vault Inzender nodig om een privékoppeling tussen de persoonlijke sleutelkluis en het cluster te maken.
az role assignment create --role "Key Vault Contributor" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID
Een AKS-cluster met een persoonlijke sleutelkluis maken en KMS etcd-versleuteling inschakelen
Maak een AKS-cluster met behulp van de opdracht az aks create met de --enable-azure-keyvault-kms
parameters , --azure-keyvault-kms-key-id
--azure-keyvault-kms-key-vault-network-access
en --azure-keyvault-kms-key-vault-resource-id
om KMS etcd-versleuteling met persoonlijke sleutelkluis in te schakelen.
az aks create --name myAKSCluster --resource-group MyResourceGroup --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 $KEYVAULT_RESOURCE_ID
Een bestaand AKS-cluster bijwerken om KMS etcd-versleuteling met persoonlijke sleutelkluis in te schakelen
Gebruik az aks update met de --enable-azure-keyvault-kms
parameters , --azure-keyvault-kms-key-vault-network-access
--azure-keyvault-kms-key-id
en --azure-keyvault-kms-key-vault-resource-id
om KMS etcd-versleuteling in te schakelen voor een bestaand cluster met persoonlijke sleutelkluis.
az aks update --name myAKSCluster --resource-group MyResourceGroup --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 $KEYVAULT_RESOURCE_ID
Gebruik de volgende opdracht om alle geheimen bij te werken. Anders worden oude geheimen niet versleuteld. Voor grotere clusters kunt u de geheimen onderverdelen op naamruimte of een update uitvoeren.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
De bestaande sleutels roteren
Nadat u de sleutel-id (inclusief sleutelnaam en sleutelversie) hebt gewijzigd, kunt u az aks update gebruiken met de --enable-azure-keyvault-kms
parameters , --azure-keyvault-kms-key-id
--azure-keyvault-kms-key-vault-network-access
en --azure-keyvault-kms-key-vault-resource-id
om de bestaande sleutels van KMS te roteren.
Waarschuwing
Vergeet niet om alle geheimen bij te werken na sleutelrotatie. Anders zijn de geheimen niet toegankelijk als de oude sleutels niet bestaan of niet werken.
Nadat u de sleutel hebt geroteerd, wordt de oude sleutel (sleutel1) nog steeds in de cache opgeslagen en mag deze niet worden verwijderd. Als u de oude sleutel (sleutel1) onmiddellijk wilt verwijderen, moet u de sleutel twee keer draaien. Vervolgens worden key2 en key3 in de cache opgeslagen en kan sleutel1 worden verwijderd zonder dat dit van invloed is op het bestaande cluster.
az aks update --name myAKSCluster --resource-group MyResourceGroup --enable-azure-keyvault-kms --azure-keyvault-kms-key-id $NewKEY_ID --azure-keyvault-kms-key-vault-network-access "Private" --azure-keyvault-kms-key-vault-resource-id $KEYVAULT_RESOURCE_ID
Gebruik de volgende opdracht om alle geheimen bij te werken. Anders worden oude geheimen nog steeds versleuteld met de vorige sleutel. Voor grotere clusters kunt u de geheimen onderverdelen op naamruimte of een update uitvoeren.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Key Vault-modus bijwerken
Notitie
Als u een andere sleutelkluis wilt wijzigen met een andere modus (openbaar, privé), kunt u rechtstreeks uitvoeren az aks update
. Als u de modus van de gekoppelde sleutelkluis wilt wijzigen, moet u KMS uitschakelen en opnieuw inschakelen met de nieuwe sleutelkluis-id's.
Hieronder vindt u de stappen voor het migreren van de gekoppelde openbare sleutelkluis naar de privémodus.
KMS uitschakelen in het cluster
Schakel de KMS uit op een bestaand cluster en laat de sleutelkluis los.
az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms
Key Vault-modus wijzigen
Werk de sleutelkluis bij van openbaar naar privé.
az keyvault update --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled
KMS inschakelen op het cluster met bijgewerkte sleutelkluis
Schakel kms opnieuw in met bijgewerkte persoonlijke sleutelkluis.
az aks update --name myAKSCluster --resource-group MyResourceGroup --enable-azure-keyvault-kms --azure-keyvault-kms-key-id $NewKEY_ID --azure-keyvault-kms-key-vault-network-access "Private" --azure-keyvault-kms-key-vault-resource-id $KEYVAULT_RESOURCE_ID
Nadat u KMS hebt geconfigureerd, kunt u diagnostische instellingen voor de sleutelkluis inschakelen om de versleutelingslogboeken te controleren.
KMS uitschakelen
Gebruik de volgende opdracht om KMS uit te schakelen op een bestaand cluster.
az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms
Gebruik de volgende opdracht om alle geheimen bij te werken. Anders worden de oude geheimen nog steeds versleuteld met de vorige sleutel en is de machtiging versleutelen/ontsleutelen voor de sleutelkluis nog steeds vereist. Voor grotere clusters kunt u de geheimen onderverdelen op naamruimte of een update uitvoeren.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -