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-kmsparameters 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-kmsparameters 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

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-kmsparameters , --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-kmsparameters , --azure-keyvault-kms-key-vault-network-access--azure-keyvault-kms-key-iden --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-kmsparameters , --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 -