KMS enzovoort-versleuteling toevoegen aan een AKS-cluster (Azure Kubernetes Service)

In dit artikel wordt beschreven hoe u versleuteling-at-rest inschakelt voor uw Kubernetes-gegevens in enzovoort met behulp van azure Key Vault met de KMS-invoegtoepassing (Key Management Service). Met de KMS-invoegtoepassing kunt u het volgende doen:

  • Een sleutel gebruiken in Key Vault voor etcd-versleuteling
  • Uw eigen sleutels meenemen
  • Versleuteling-at-rest opgeven voor geheimen die zijn opgeslagen in etcd
  • De sleutels draaien in Key Vault

Zie Secret Data at Rest versleutelen voor meer informatie over het gebruik van de KMS-invoegtoepassing.

Voordat u begint

  • Een Azure-abonnement. Als u geen Azure-abonnement hebt, kunt u een gratis account maken.
  • Azure CLI versie 2.39.0 of hoger. Voer az --version uit om de versie te bekijken. Zie Azure CLI installeren als u de CLI wilt installeren of een upgrade wilt uitvoeren.

Waarschuwing

KMS ondersteunt alleen Konnectivity. U kunt gebruiken kubectl get po -n kube-system om te controleren of er 'konnectivity-agent-xxx' pod wordt uitgevoerd.

Beperkingen

De volgende beperkingen gelden wanneer u KMS enzovoort-versleuteling integreert met AKS:

  • Verwijdering van de sleutel, Key Vault of de bijbehorende identiteit.
  • KMS etcd-versleuteling werkt niet met System-Assigned beheerde identiteit. Het toegangsbeleid voor keyvault moet worden ingesteld voordat de functie wordt ingeschakeld. Bovendien is System-Assigned Beheerde identiteit pas beschikbaar als het cluster is gemaakt, dus er is een cyclusafhankelijkheid.
  • Meer dan 2000 geheimen gebruiken in een cluster.
  • Bring Your Own (BYO) Azure Key Vault van een andere tenant.
  • Wijzig het gekoppelde Azure Key Vault-model (openbaar, privé) als KMS is ingeschakeld. Als u de gekoppelde sleutelkluismodus wilt wijzigen, moet u KMS opnieuw uitschakelen en inschakelen.
  • Cluster stoppen/starten waarvoor KMS is ingeschakeld met een persoonlijke sleutelkluis.

KMS ondersteunt nu openbare sleutelkluis en persoonlijke sleutelkluis .

KMS met openbare-sleutelkluis inschakelen

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 onherstelbaar zijn in het cluster.

Als u uw Key Vault of sleutel wilt herstellen, raadpleegt u het Azure Key Vault-herstelbeheer met documentatie voor voorlopig verwijderen en beveiliging opschonen.

Voor niet-RBAC-sleutelkluis

Hiermee az keyvault create maakt u een KeyVault.

az keyvault create --name MyKeyVault --resource-group MyResourceGroup

Hiermee az keyvault key create maakt u een sleutel.

az keyvault key create --name MyKeyName --vault-name MyKeyVault

Gebruik az keyvault key show deze optie 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 dit om een KeyVault te maken met behulp van azure-Access Control op basis van rollen.

export KEYVAULT_RESOURCE_ID=$(az keyvault create --name MyKeyVault --resource-group MyResourceGroup  --enable-rbac-authorization true --query id -o tsv)

Wijs uzelf toestemming 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

Hiermee az keyvault key create maakt u een sleutel.

az keyvault key create --name MyKeyName --vault-name MyKeyVault

Gebruik az keyvault key show deze optie 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

Hiermee az identity create maakt u een door de gebruiker toegewezen beheerde identiteit.

az identity create --name MyIdentity --resource-group MyResourceGroup

Gebruik az identity show dit om id van 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 dit 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, --enable-rbac-authorizationkunt az keyvault set-policy u een Azure KeyVault-beleid 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 Crypto-gebruiker' toewijzen met ontsleuteling, versleutelingsmachtiging.

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 waarvoor KMS enzovoort-versleuteling is ingeschakeld

Maak een AKS-cluster met behulp van de opdracht az aks create met de --enable-azure-keyvault-kms--azure-keyvault-kms-key-vault-network-access en --azure-keyvault-kms-key-id parameters 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 enzovoort-versleuteling in te schakelen

Gebruik az aks update with the --enable-azure-keyvault-kms--azure-keyvault-kms-key-vault-network-access , and --azure-keyvault-kms-key-id parameters to enable KMS etcd encryption on an existing 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 onderstaande opdracht om alle geheimen bij te werken. Anders worden de oude geheimen niet versleuteld.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Notitie

Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of script een update uitvoeren.

De bestaande sleutels draaien

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 en --azure-keyvault-kms-key-id parameters om de afsluitsleutels van KMS te draaien.

Waarschuwing

Vergeet niet om alle geheimen bij te werken na sleutelrotatie. Anders zijn de geheimen niet toegankelijk als de oude sleutels niet bestaan of werken.

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 onderstaande opdracht om alle geheimen bij te werken. Anders worden de oude geheimen nog steeds versleuteld met de vorige sleutel.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Notitie

Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of script een update uitvoeren.

KMS met persoonlijke sleutelkluis inschakelen

Als u KMS inschakelt met een persoonlijke sleutelkluis, maakt AKS automatisch een privé-eindpunt en een privékoppeling in de knooppuntresourcegroep. De sleutelkluis wordt een privé-eindpuntverbinding met het AKS-cluster toegevoegd.

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 onherstelbaar zijn in het cluster.

Als u uw Key Vault of sleutel wilt herstellen, raadpleegt u het Azure Key Vault-herstelbeheer met documentatie voor voorlopig verwijderen en beveiliging opschonen.

Hiermee az keyvault create maakt u een persoonlijke sleutelkluis.

az keyvault create --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled

Zonder privé-eindpunt wordt het niet ondersteund om sleutels te maken of bij te werken in een persoonlijke sleutelkluis. Als u een persoonlijke sleutelkluis wilt beheren, kunt u verwijzen naar Key Vault integreren met Azure Private Link.

Een door de gebruiker toegewezen beheerde identiteit maken

Hiermee az identity create maakt u een door de gebruiker toegewezen beheerde identiteit.

az identity create --name MyIdentity --resource-group MyResourceGroup

Gebruik az identity show dit om id van 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 dit 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, --enable-rbac-authorizationkunt az keyvault set-policy u een Azure KeyVault-beleid maken.

az keyvault set-policy -n MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID

Voor RBAC-sleutelkluis

Als uw sleutelkluis is ingeschakeld, --enable-rbac-authorizationmoet u een RBAC-rol toewijzen die ten minste ontsleuteling bevat, machtiging versleutelen.

az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID

Voor een persoonlijke sleutelkluis heeft de AKS Key Vault rol Inzender nodig om een privékoppeling te maken tussen de persoonlijke sleutelkluis en het cluster.

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 maken met een persoonlijke sleutelkluis en KMS enzovoort-versleuteling inschakelen

Maak een AKS-cluster met behulp van de opdracht az aks create met de --enable-azure-keyvault-kms--azure-keyvault-kms-key-id--azure-keyvault-kms-key-vault-network-access , en --azure-keyvault-kms-key-vault-resource-id parameters om KMS etcd-versleuteling in te schakelen met persoonlijke sleutelkluis.

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 enzovoort-versleuteling in te schakelen met een persoonlijke sleutelkluis

Gebruik az aks update with the --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id--azure-keyvault-kms-key-vault-network-access and --azure-keyvault-kms-key-vault-resource-id parameters to enable KMS etcd encryption on an existing cluster with private key vault.

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 onderstaande opdracht om alle geheimen bij te werken. Anders worden de oude geheimen niet versleuteld.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Notitie

Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of script een update uitvoeren.

De bestaande sleutels draaien

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-id--azure-keyvault-kms-key-vault-network-access , en --azure-keyvault-kms-key-vault-resource-id parameters 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 werken.

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 onderstaande opdracht om alle geheimen bij te werken. Anders worden de oude geheimen nog steeds versleuteld met de vorige sleutel.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Notitie

Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of script een update uitvoeren.

Sleutelkluismodus bijwerken

Notitie

Als u een andere sleutelkluis met een andere modus (openbaar, privé) wilt wijzigen, kunt u rechtstreeks worden uitgevoerd az aks update . Als u de modus van gekoppelde sleutelkluis wilt wijzigen, moet u KMS diable maken en deze opnieuw inschakelen met 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

Gebruik de onderstaande opdracht om de KMS op het bestaande cluster uit te schakelen en de sleutelkluis vrij te geven.

az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms

Sleutelkluismodus 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

Gebruik de onderstaande opdracht om de KMS opnieuw in te schakelen 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 onderstaande opdracht om KMS uit te schakelen op een bestaand cluster.

az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms

Gebruik de onderstaande opdracht om alle geheimen bij te werken. Anders worden de oude geheimen nog steeds versleuteld met de vorige sleutel.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -

Notitie

Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of script een update uitvoeren.