Sleutelbeheerservice enzovoort toevoegen aan een Azure Kubernetes Service-cluster

In dit artikel leest u hoe u versleuteling at-rest inschakelt voor uw AKS-geheimen (Azure Kubernetes Service) in een etcd-sleutel-waardearchief met behulp van de invoegtoepassing Azure Key Vault en de KMS-invoegtoepassing (Key Management Service). U kunt de KMS-invoegtoepassing gebruiken voor het volgende:

  • Gebruik een sleutel in een sleutelkluis voor etcd-versleuteling.
  • Breng je eigen sleutels mee.
  • Versleuteling-at-rest opgeven voor geheimen die zijn opgeslagen in etcd.
  • Draai de sleutels in een sleutelkluis.

Zie Secret Data at Rest versleutelen 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. Voer de opdracht uit az --version om uw versie te vinden. Als u uw CLI wilt installeren of upgraden, raadpleegt u De Azure CLI installeren.

Waarschuwing

KMS ondersteunt Konnectivity of API Server VNet Integration (preview).

U kunt kubectl get po -n kube-system de resultaten controleren en laten zien dat een konnectivity-agent-pod wordt uitgevoerd. Als een pod wordt uitgevoerd, gebruikt het AKS-cluster Konnectivity. Wanneer u VNet-integratie van API Server gebruikt, kunt u de az aks show -g -n opdracht uitvoeren om te controleren of de enableVnetIntegration instelling is ingesteld trueop .

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. Door het systeem toegewezen beheerde identiteit is pas beschikbaar nadat het cluster is gemaakt. Houd rekening met de cyclusafhankelijkheid.
  • Azure Key Vault met een firewall om openbare toegang toe te staan wordt niet ondersteund omdat verkeer van de KMS-invoegtoepassing naar de sleutelkluis wordt geblokkeerd.
  • 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, een persoonlijke sleutelkluis heeft en de VNet-integratietunnel van de API Server niet gebruikt, kunt u het cluster niet stoppen en vervolgens starten.
  • 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 gaat vervolgens uit en wordt onherstelbaar.
  • Nadat u KMS hebt uitgeschakeld, kunt u de sleutels niet vernietigen. Door de sleutels te vernietigen, werkt de API-server niet meer.

KMS ondersteunt een openbare sleutelkluis of een persoonlijke sleutelkluis.

KMS inschakelen voor een openbare sleutelkluis

In de volgende secties wordt beschreven hoe u KMS inschakelt voor een openbare-sleutelkluis.

Een openbare sleutelkluis en sleutel maken

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 Herstelbeheer van Azure Key Vault met voorlopig verwijderen en beveiliging tegen opschonen.

Een sleutelkluis en sleutel maken voor een niet-RBAC-openbare sleutelkluis

Gebruik az keyvault create dit om een sleutelkluis te maken zonder op rollen gebaseerd toegangsbeheer van Azure te gebruiken (Azure RBAC):

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

Gebruik az keyvault key create dit om een sleutel te maken:

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

Gebruik az keyvault key show dit 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 dit voorbeeld wordt de sleutel-id opgeslagen in KEY_ID.

Een sleutelkluis en sleutel maken voor een openbare RBAC-sleutelkluis

Gebruik az keyvault create dit om een sleutelkluis te maken met behulp van Azure RBAC:

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

Wijs uzelf machtigingen 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 dit om een sleutel te maken:

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

Gebruik az keyvault key show dit 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 dit voorbeeld wordt de sleutel-id opgeslagen in KEY_ID.

Een door de gebruiker toegewezen beheerde identiteit maken voor een openbare sleutelkluis

Gebruik az identity create dit om een door de gebruiker toegewezen beheerde identiteit te maken:

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

Gebruik az identity show dit 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 voorgaande voorbeeld wordt de waarde van de id-object-id opgeslagen in IDENTITY_OBJECT_ID.

Gebruik az identity show dit 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 dit voorbeeld wordt de waarde van de id-resource-id opgeslagen in 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 persoonlijke sleutelkluis.

Machtigingen toewijzen voor een niet-RBAC openbare sleutelkluis

Als uw sleutelkluis niet is ingesteld met --enable-rbac-authorization, kunt u een Azure-sleutelkluisbeleid maken az keyvault set-policy .

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

Machtigingen toewijzen voor een openbare RBAC-sleutelkluis

Als uw sleutelkluis is ingesteld met --enable-rbac-authorization, wijst u de rol cryptogebruiker van Key Vault toe om ontsleutelings- en versleutelingsmachtigingen te verlenen.

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 een openbare sleutelkluis en KMS etcd-versleuteling inschakelen

Als u KMS etcd-versleuteling wilt inschakelen, maakt u een AKS-cluster met behulp van de opdracht az aks create . U kunt de --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-accessen --azure-keyvault-kms-key-id parameters gebruiken met az aks create.

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 voor een openbare-sleutelkluis

Als u KMS etcd-versleuteling wilt inschakelen voor een bestaand cluster, gebruikt u de opdracht az aks update . U kunt de --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-accessen --azure-keyvault-kms-key-id parameters gebruiken met az-aks-update.

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. Als u deze opdracht niet uitvoert, worden geheimen die eerder zijn gemaakt, niet meer versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken.

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

Bestaande sleutels draaien in een openbare sleutelkluis

Nadat u de sleutel-id hebt gewijzigd (inclusief het wijzigen van de sleutelnaam of de sleutelversie), kunt u de opdracht az aks update gebruiken. U kunt de --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-accessen --azure-keyvault-kms-key-id parameters gebruiken om az-aks-update bestaande sleutels in KMS te 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.

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.

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. Als u deze opdracht niet uitvoert, worden geheimen die eerder zijn gemaakt, nog steeds versleuteld met de vorige sleutel. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken.

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

KMS inschakelen 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 wordt een privé-eindpuntverbinding met het AKS-cluster toegevoegd.

Een persoonlijke sleutelkluis en sleutel maken

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 Herstelbeheer van Azure Key Vault met voorlopig verwijderen en beveiliging tegen opschonen.

Gebruik az keyvault create dit 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 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.

Een door de gebruiker toegewezen beheerde identiteit maken voor een persoonlijke sleutelkluis

Gebruik az identity create dit om een door de gebruiker toegewezen beheerde identiteit te maken:

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

Gebruik az identity show dit 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 voorgaande voorbeeld wordt de waarde van de id-object-id opgeslagen in IDENTITY_OBJECT_ID.

Gebruik az identity show dit 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 dit voorbeeld wordt de waarde van de id-resource-id opgeslagen in IDENTITY_RESOURCE_ID.

Machtigingen toewijzen om een persoonlijke sleutelkluis te ontsleutelen en te versleutelen

In de volgende secties wordt beschreven hoe u ontsleutelings- en versleutelingsmachtigingen toewijst voor een persoonlijke sleutelkluis.

Machtigingen toewijzen voor een niet-RBAC-privésleutelkluis

Notitie

Wanneer u een persoonlijke sleutelkluis gebruikt, kan AKS de machtigingen van de identiteit niet valideren. Controleer of de identiteit is gemachtigd voor toegang tot de sleutelkluis voordat u KMS inschakelt.

Als uw sleutelkluis niet is ingesteld met --enable-rbac-authorization, kunt u een az keyvault set-policy sleutelkluisbeleid maken in Azure:

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

Machtigingen toewijzen voor een persoonlijke RBAC-sleutelkluis

Als uw sleutelkluis is ingesteld met --enable-rbac-authorization, wijst u een Azure RBAC-rol toe met ontsleutelings- en versleutelingsmachtigingen:

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

Voor persoonlijke sleutelkluizen is de rol Inzender voor Key Vault vereist 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 etcd-versleuteling inschakelen

Als u KMS etcd-versleuteling wilt inschakelen voor een persoonlijke sleutelkluis, maakt u een AKS-cluster met behulp van de opdracht az aks create . U kunt de --enable-azure-keyvault-kmsparameters , --azure-keyvault-kms-key-iden --azure-keyvault-kms-key-vault-network-access--azure-keyvault-kms-key-vault-resource-id parameters gebruiken met az-aks-create.

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 in te schakelen voor een persoonlijke sleutelkluis

Als u KMS enzovoort wilt inschakelen voor een bestaand cluster met een persoonlijke sleutelkluis, gebruikt u de opdracht az aks update . U kunt de --enable-azure-keyvault-kmsparameters , --azure-keyvault-kms-key-iden --azure-keyvault-kms-key-vault-network-access--azure-keyvault-kms-key-vault-resource-id parameters gebruiken met az-aks-update.

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. Als u deze opdracht niet uitvoert, worden geheimen die eerder zijn gemaakt, niet versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken.

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

Bestaande sleutels draaien in een persoonlijke sleutelkluis

Nadat u de sleutel-id (inclusief de sleutelnaam en de sleutelversie) hebt gewijzigd, kunt u de opdracht az aks update gebruiken. U kunt de --enable-azure-keyvault-kmsparameters , --azure-keyvault-kms-key-id--azure-keyvault-kms-key-vault-network-accessen --azure-keyvault-kms-key-vault-resource-id parameters gebruiken om az-aks-update de bestaande sleutels van KMS te 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.

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.

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. Als u niet alle geheimen bijwerkt, worden geheimen die eerder zijn gemaakt, versleuteld met de vorige sleutel. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken.

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

Een sleutelkluismodus bijwerken

Notitie

Als u een andere sleutelkluis met een andere modus (openbaar of privé) wilt wijzigen, kunt u rechtstreeks worden uitgevoerd az aks update . Als u de modus van een gekoppelde sleutelkluis wilt wijzigen, moet u eerst KMS uitschakelen en deze vervolgens opnieuw inschakelen met behulp van de nieuwe sleutelkluis-id's.

In de volgende secties wordt beschreven hoe u een gekoppelde openbare sleutelkluis migreert naar de privémodus.

KMS op het cluster uitschakelen

Schakel KMS uit op een bestaand cluster en laat de sleutelkluis los:

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

De sleutelkluismodus wijzigen

Werk de sleutelkluis bij van openbaar naar privé:

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

KMS voor het cluster inschakelen met behulp van de bijgewerkte sleutelkluis

SCHAKEL KMS in met behulp van de 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 ingesteld, kunt u diagnostische instellingen voor de sleutelkluis inschakelen om de versleutelingslogboeken te controleren.

KMS uitschakelen

Voordat u KMS uitschakelt, kunt u de volgende Azure CLI-opdracht gebruiken om te controleren of KMS is ingeschakeld:

az aks list --query "[].{Name:name, KmsEnabled:securityProfile.azureKeyVaultKms.enabled, KeyId:securityProfile.azureKeyVaultKms.keyId}" -o table

Als de resultaten bevestigen dat KMS is ingeschakeld, voert u de volgende opdracht uit om KMS op het cluster uit te schakelen:

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

Gebruik de volgende opdracht om alle geheimen bij te werken. Als u deze opdracht niet uitvoert, worden geheimen die eerder zijn gemaakt, nog steeds versleuteld met de vorige sleutel en zijn de versleutelings- en ontsleutelingsmachtigingen voor de sleutelkluis nog steeds vereist. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken.

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

Ondersteuning voor KMS v2

Vanaf AKS versie 1.27 configureert het inschakelen van de KMS-functie KMS v2. Met KMS v2 bent u niet beperkt tot de 2000 geheimen die in eerdere versies worden ondersteund. Zie KMS V2-verbeteringen voor meer informatie.

Migreren naar KMS v2

Als uw clusterversie hoger is dan 1.27 en u KMS al hebt ingeschakeld, wordt de upgrade naar KMS 1.27 of hoger geblokkeerd. Gebruik de volgende stappen om te migreren naar KMS v2:

  1. Schakel KMS uit op het cluster.
  2. Voer de opslagmigratie uit.
  3. Upgrade het cluster naar versie 1.27 of hoger.
  4. Schakel KMS in op het cluster.
  5. Voer de opslagmigratie uit.

KMS uitschakelen om opslag te migreren

Als u KMS op een bestaand cluster wilt uitschakelen, gebruikt u de az aks update opdracht met het --disable-azure-keyvault-kms argument:

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

Opslag migreren

Als u alle geheimen wilt bijwerken, gebruikt u de kubectl get secrets opdracht met het --all-namespaces argument:

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

Het AKS-cluster upgraden

Gebruik de opdracht om een AKS-cluster bij te az aks upgrade werken. Stel de versie in op 1.27.x of hoger met behulp van het --kubernetes-version argument.

az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <AKS version>

Hier volgt een voorbeeld:

az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version 1.27.1

KMS inschakelen na opslagmigratie

U kunt de KMS-functie op het cluster opnieuw inschakelen om de geheimen te versleutelen. Daarna gebruikt het AKS-cluster KMS v2. Als u niet wilt migreren naar KMS v2, kunt u een nieuw cluster maken dat versie 1.27 of hoger is en KMS is ingeschakeld.

Opslag migreren voor KMS v2

Als u alle geheimen in KMS v2 opnieuw wilt versleutelen, gebruikt u de kubectl get secrets opdracht met het --all-namespaces argument:

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