Lägga till nyckelhanteringstjänst (KMS) etcd-kryptering i ett Azure Kubernetes Service-kluster
Den här artikeln visar hur du aktiverar kryptering i vila för dina AKS-hemligheter (Azure Kubernetes Service) i ett nyckelvärdesarkiv med etc. med hjälp av Azure Key Vault och plugin-programmet nyckelhanteringstjänst (KMS) (KMS). Du kan använda KMS-plugin-programmet för att:
- Använd en nyckel i ett nyckelvalv för etcd-kryptering.
- Ta med dina egna nycklar.
- Ange kryptering i vila för hemligheter som lagras i etcd.
- Rotera nycklarna i ett nyckelvalv.
Mer information om hur du använder KMS finns i Använda en KMS-provider för datakryptering.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration. Skapa ett konto utan kostnad.
- Azure CLI version 2.39.0 eller senare. Kör
az --version
för att hitta din version. Om du behöver installera eller uppgradera kan du läsa informationen i Installera Azure CLI.
Varning
Från och med den 15 september 2024 stöds Inte längre Konnectivity för privata nyckelvalv för nya prenumerationer eller prenumerationer som inte tidigare har använt den här konfigurationen. För prenumerationer som för närvarande använder den här konfigurationen eller som har använt den under de senaste 60 dagarna fortsätter supporten tills AKS version 1.30 når slutet av livslängden för communitysupport.
KMS stöder konnektivitet eller API Server VNet-integrering (förhandsversion) för offentliga nyckelvalv.
KMS stöder API Server VNet-integrering (förhandsversion) för både privata och offentliga nyckelvalv.
Du kan använda kubectl get po -n kube-system
för att verifiera resultaten och visa att en konnectivity-agent-podd körs. Om en podd körs använder AKS-klustret Konnectivity. När du använder API Server VNet-integrering kan du köra az aks show -g -n
kommandot för att kontrollera att enableVnetIntegration
inställningen är inställd på true
.
Begränsningar
Följande begränsningar gäller när du integrerar KMS-etcd-kryptering med AKS:
- Det går inte att ta bort nyckeln, nyckelvalvet eller den associerade identiteten.
- KMS-etcd-kryptering fungerar inte med systemtilldelad hanterad identitet. Åtkomstprincipen för nyckelvalvet måste anges innan funktionen aktiveras. Systemtilldelad hanterad identitet är inte tillgänglig förrän klustret har skapats. Överväg cykelberoendet.
- Azure Key Vault med brandväggsinställningen "tillåt offentlig åtkomst från specifika virtuella nätverk och IP-adresser" eller "inaktivera offentlig åtkomst" stöds inte eftersom den blockerar trafik från KMS-plugin-programmet till nyckelvalvet.
- Det maximala antalet hemligheter som stöds av ett kluster som har KMS aktiverat är 2 000. Det är dock viktigt att observera att KMS v2 inte begränsas av den här begränsningen och kan hantera ett högre antal hemligheter.
- Byo-nyckelvalvet (Bring Your Own) från en annan klientorganisation stöds inte.
- När KMS är aktiverat kan du inte ändra det associerade nyckelvalvsläget (offentligt eller privat). Om du vill uppdatera ett nyckelvalvläge måste du först inaktivera KMS och sedan aktivera det igen.
- Om ett kluster har KMS aktiverat och har ett privat nyckelvalv måste det använda tunneln API Server VNet Integration (förhandsversion). Konnektivitet stöds inte.
- Om du använder API:et vm-skalningsuppsättningar för att skala ned noderna i klustret till noll frigörs noderna. Klustret går sedan ned och blir oåterkalleligt.
- När du har inaktiverat KMS kan du inte förstöra nycklarna. Om du förstör nycklarna slutar API-servern att fungera.
KMS stöder ett offentligt nyckelvalv eller ett privat nyckelvalv.
Aktivera KMS för ett offentligt nyckelvalv
I följande avsnitt beskrivs hur du aktiverar KMS för ett offentligt nyckelvalv.
Skapa ett offentligt nyckelvalv och en nyckel
Varning
Det går inte att ta bort nyckeln eller nyckelvalvet och gör att hemligheterna i klustret inte kan återställas.
Om du behöver återställa ditt nyckelvalv eller din nyckel kan du läsa Azure Key Vault-återställningshantering med mjukt borttagnings- och rensningsskydd.
Skapa ett nyckelvalv och en nyckel för ett offentligt nyckelvalv som inte är RBAC
Använd az keyvault create
för att skapa ett nyckelvalv utan att använda rollbaserad åtkomstkontroll i Azure (Azure RBAC):
az keyvault create --name MyKeyVault --resource-group MyResourceGroup
Använd az keyvault key create
för att skapa en nyckel:
az keyvault key create --name MyKeyName --vault-name MyKeyVault
Använd az keyvault key show
för att exportera nyckel-ID:t:
export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID
I det här exemplet lagras nyckel-ID:t i KEY_ID
.
Skapa ett nyckelvalv och en nyckel för ett offentligt RBAC-nyckelvalv
Använd az keyvault create
för att skapa ett nyckelvalv med hjälp av Azure RBAC:
export KEYVAULT_RESOURCE_ID=$(az keyvault create --name MyKeyVault --resource-group MyResourceGroup --enable-rbac-authorization true --query id -o tsv)
Tilldela dig själv behörigheter för att skapa en nyckel:
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 $KEYVAULT_RESOURCE_ID
Använd az keyvault key create
för att skapa en nyckel:
az keyvault key create --name MyKeyName --vault-name MyKeyVault
Använd az keyvault key show
för att exportera nyckel-ID:t:
export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID
I det här exemplet lagras nyckel-ID:t i KEY_ID
.
Skapa en användartilldelad hanterad identitet för ett offentligt nyckelvalv
Använd az identity create
för att skapa en användartilldelad hanterad identitet:
az identity create --name MyIdentity --resource-group MyResourceGroup
Använd az identity show
för att hämta identitetsobjektets ID:
IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID
I föregående exempel lagras värdet för identitetsobjektets ID i IDENTITY_OBJECT_ID
.
Använd az identity show
för att hämta identitetsresurs-ID:t:
IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID
I det här exemplet lagras värdet för identitetsresurs-ID:t i IDENTITY_RESOURCE_ID
.
Tilldela behörigheter för att dekryptera och kryptera ett offentligt nyckelvalv
I följande avsnitt beskrivs hur du tilldelar dekrypterings- och krypteringsbehörigheter för ett privat nyckelvalv.
Tilldela behörigheter för ett offentligt nyckelvalv som inte är rbac
Om ditt nyckelvalv inte har angetts med --enable-rbac-authorization
kan du använda az keyvault set-policy
för att skapa en Azure Key Vault-princip.
az keyvault set-policy --name MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID
Tilldela behörigheter för ett offentligt RBAC-nyckelvalv
Om ditt nyckelvalv har angetts med --enable-rbac-authorization
tilldelar du rollen Key Vault Crypto User för att ge dekrypterings- och krypteringsbehörigheter.
az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID
Skapa ett AKS-kluster som har ett offentligt nyckelvalv och aktivera KMS etcd-kryptering
Om du vill aktivera KMS etcd-kryptering skapar du ett AKS-kluster med hjälp av kommandot az aks create . Du kan använda parametrarna --enable-azure-keyvault-kms
, --azure-keyvault-kms-key-vault-network-access
och --azure-keyvault-kms-key-id
med 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 \
--generate-ssh-keys
Uppdatera ett befintligt AKS-kluster för att aktivera KMS-etcd-kryptering för ett offentligt nyckelvalv
Om du vill aktivera KMS etcd-kryptering för ett befintligt kluster använder du kommandot az aks update . Du kan använda parametrarna --enable-azure-keyvault-kms
, --azure-keyvault-kms-key-vault-network-access
och --azure-keyvault-kms-key-id
med 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
Använd följande kommando för att uppdatera alla hemligheter. Om du inte kör det här kommandot krypteras inte längre hemligheter som skapades tidigare. För större kluster kanske du vill dela upp hemligheterna efter namnområde eller skapa ett uppdateringsskript.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Rotera befintliga nycklar i ett offentligt nyckelvalv
När du har ändrat nyckel-ID :t (inklusive att ändra antingen nyckelnamnet eller nyckelversionen) kan du använda kommandot az aks update . Du kan använda parametrarna --enable-azure-keyvault-kms
, --azure-keyvault-kms-key-vault-network-access
och --azure-keyvault-kms-key-id
med az-aks-update
för att rotera befintliga nycklar i KMS.
Varning
Kom ihåg att uppdatera alla hemligheter efter nyckelrotation. Om du inte uppdaterar alla hemligheter är hemligheterna otillgängliga om nycklarna som skapades tidigare inte finns eller inte längre fungerar.
KMS använder 2 nycklar samtidigt. Efter den första nyckelrotationen måste du se till att både de gamla och nya nycklarna är giltiga (har inte upphört att gälla) förrän nästa nyckelrotation. Efter den andra nyckelrotationen kan den äldsta nyckeln tas bort/förfalla på ett säkert sätt
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
Använd följande kommando för att uppdatera alla hemligheter. Om du inte kör det här kommandot krypteras fortfarande hemligheter som skapades tidigare med den tidigare nyckeln. För större kluster kanske du vill dela upp hemligheterna efter namnområde eller skapa ett uppdateringsskript.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Aktivera KMS för ett privat nyckelvalv
Om du aktiverar KMS för ett privat nyckelvalv skapar AKS automatiskt en privat slutpunkt och en privat länk i nodresursgruppen. Nyckelvalvet har lagts till en privat slutpunktsanslutning till AKS-klustret.
Varning
KMS stöder endast API Server VNet-integrering (förhandsversion) för privata nyckelvalv.
Skapa ett privat nyckelvalv och en nyckel
Varning
Det går inte att ta bort nyckeln eller nyckelvalvet och gör att hemligheterna i klustret inte kan återställas.
Om du behöver återställa ditt nyckelvalv eller din nyckel kan du läsa Azure Key Vault-återställningshantering med mjukt borttagnings- och rensningsskydd.
Använd az keyvault create
för att skapa ett privat nyckelvalv:
az keyvault create --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled
Använd az keyvault key create
för att skapa en nyckel:
az keyvault key create --name MyKeyName --vault-name MyKeyVault
Det går inte att skapa eller uppdatera nycklar i ett privat nyckelvalv som inte har en privat slutpunkt. Information om hur du hanterar privata nyckelvalv finns i Integrera ett nyckelvalv med hjälp av Azure Private Link.
Skapa en användartilldelad hanterad identitet för ett privat nyckelvalv
Använd az identity create
för att skapa en användartilldelad hanterad identitet:
az identity create --name MyIdentity --resource-group MyResourceGroup
Använd az identity show
för att hämta identitetsobjektets ID:
IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID
I föregående exempel lagras värdet för identitetsobjektets ID i IDENTITY_OBJECT_ID
.
Använd az identity show
för att hämta identitetsresurs-ID:t:
IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID
I det här exemplet lagras värdet för identitetsresurs-ID:t i IDENTITY_RESOURCE_ID
.
Tilldela behörigheter för att dekryptera och kryptera ett privat nyckelvalv
I följande avsnitt beskrivs hur du tilldelar dekrypterings- och krypteringsbehörigheter för ett privat nyckelvalv.
Tilldela behörigheter för ett privat nyckelvalv som inte är rbac
Kommentar
När du använder ett privat nyckelvalv kan AKS inte verifiera identitetens behörigheter. Kontrollera att identiteten har beviljats behörighet att komma åt nyckelvalvet innan du aktiverar KMS.
Om ditt nyckelvalv inte har angetts med --enable-rbac-authorization
kan du använda az keyvault set-policy
för att skapa en key vault-princip i Azure:
az keyvault set-policy --name MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID
Tilldela behörigheter för ett privat RBAC-nyckelvalv
Om ditt nyckelvalv har angetts med --enable-rbac-authorization
tilldelar du en Azure RBAC-roll som innehåller dekrypterings- och krypteringsbehörigheter:
az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID
Tilldela behörigheter för att skapa en privat länk
För privata nyckelvalv krävs rollen Key Vault-deltagare för att skapa en privat länk mellan det privata nyckelvalvet och klustret.
az role assignment create --role "Key Vault Contributor" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEYVAULT_RESOURCE_ID
Skapa ett AKS-kluster som har ett privat nyckelvalv och aktivera KMS etcd-kryptering
Om du vill aktivera KMS etcd-kryptering för ett privat nyckelvalv skapar du ett AKS-kluster med hjälp av kommandot az aks create . Du kan använda parametrarna --enable-azure-keyvault-kms
, --azure-keyvault-kms-key-id
, --azure-keyvault-kms-key-vault-network-access
och --azure-keyvault-kms-key-vault-resource-id
med 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 \
--generate-ssh-keys
Uppdatera ett befintligt AKS-kluster för att aktivera KMS-etcd-kryptering för ett privat nyckelvalv
Om du vill aktivera KMS-etcd-kryptering på ett befintligt kluster som har ett privat nyckelvalv använder du kommandot az aks update . Du kan använda parametrarna --enable-azure-keyvault-kms
, --azure-keyvault-kms-key-id
, --azure-keyvault-kms-key-vault-network-access
och --azure-keyvault-kms-key-vault-resource-id
med 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
Använd följande kommando för att uppdatera alla hemligheter. Om du inte kör det här kommandot krypteras inte hemligheter som skapades tidigare. För större kluster kanske du vill dela upp hemligheterna efter namnområde eller skapa ett uppdateringsskript.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Rotera befintliga nycklar i ett privat nyckelvalv
När du har ändrat nyckel-ID :t (inklusive nyckelnamnet och nyckelversionen) kan du använda kommandot az aks update . Du kan använda parametrarna --enable-azure-keyvault-kms
, --azure-keyvault-kms-key-id
, --azure-keyvault-kms-key-vault-network-access
och --azure-keyvault-kms-key-vault-resource-id
med az-aks-update
för att rotera de befintliga nycklarna i KMS.
Varning
Kom ihåg att uppdatera alla hemligheter efter nyckelrotation. Om du inte uppdaterar alla hemligheter är hemligheterna otillgängliga om nycklarna som skapades tidigare inte finns eller inte längre fungerar.
När du har roterat nyckeln cachelagras den tidigare nyckeln (key1) fortfarande och bör inte tas bort. Om du vill ta bort den tidigare nyckeln (key1) omedelbart måste du rotera nyckeln två gånger. Sedan cachelagras key2 och key3 och key1 kan tas bort utan att det befintliga klustret påverkas.
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
Använd följande kommando för att uppdatera alla hemligheter. Om du inte uppdaterar alla hemligheter krypteras hemligheter som skapades tidigare med den tidigare nyckeln. För större kluster kanske du vill dela upp hemligheterna efter namnområde eller skapa ett uppdateringsskript.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Uppdatera ett nyckelvalvläge
Kommentar
Om du vill ändra ett annat nyckelvalv med ett annat läge (oavsett om det är offentligt eller privat) kan du köra az aks update
direkt. Om du vill ändra läget för ett anslutet nyckelvalv måste du först inaktivera KMS och sedan aktivera det igen med hjälp av de nya nyckelvalvs-ID:n.
I följande avsnitt beskrivs hur du migrerar ett kopplat offentligt nyckelvalv till privat läge. De här stegen kan också användas för att migrera från privat till offentlig.
Inaktivera KMS i klustret
Inaktivera KMS på ett befintligt kluster och släpp nyckelvalvet:
az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms
Använd följande kommando för att uppdatera alla hemligheter. Om du inte kör det här kommandot krypteras fortfarande hemligheter som skapades tidigare med den tidigare nyckeln. För större kluster kanske du vill dela upp hemligheterna efter namnområde eller skapa ett uppdateringsskript.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Ändra nyckelvalvsläget
Uppdatera nyckelvalvet från offentligt till privat:
az keyvault update --name MyKeyVault --resource-group MyResourceGroup --public-network-access Disabled
Migrera från privat till offentlig inställd --public-network-access
på Enabled
i kommandot ovan.
Aktivera KMS för klustret med hjälp av det uppdaterade nyckelvalvet
Aktivera KMS med det uppdaterade privata nyckelvalvet:
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
När du har konfigurerat KMS kan du aktivera diagnostikinställningar för nyckelvalvet för att kontrollera krypteringsloggarna.
Inaktivera KMS
Innan du inaktiverar KMS kan du använda följande Azure CLI-kommando för att kontrollera om KMS är aktiverat:
az aks list --query "[].{Name:name, KmsEnabled:securityProfile.azureKeyVaultKms.enabled, KeyId:securityProfile.azureKeyVaultKms.keyId}" -o table
Om resultatet bekräftar att KMS är aktiverat kör du följande kommando för att inaktivera KMS i klustret:
az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms
Använd följande kommando för att uppdatera alla hemligheter. Om du inte kör det här kommandot krypteras hemligheter som skapades tidigare fortfarande med den tidigare nyckeln, och behörigheterna för kryptering och dekryptering i nyckelvalvet krävs fortfarande. För större kluster kanske du vill dela upp hemligheterna efter namnområde eller skapa ett uppdateringsskript.
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
STÖD FÖR KMS v2
Från och med AKS version 1.27 konfigurerar du KMS v2 genom att aktivera KMS-funktionen. Med KMS v2 är du inte begränsad till de 2 000 hemligheter som tidigare versioner stöder. Mer information finns i FÖRBÄTTRINGAR AV KMS V2.
Migrera till KMS v2
Om klusterversionen är äldre än 1.27 och du redan har aktiverat KMS blockeras uppgraderingen till klusterversion 1.27 eller senare. Använd följande steg för att migrera till KMS v2:
- Inaktivera KMS i klustret.
- Utför lagringsmigreringen.
- Uppgradera klustret till version 1.27 eller senare.
- Aktivera KMS i klustret.
- Utför lagringsmigreringen.
Inaktivera KMS för att migrera lagring
Om du vill inaktivera KMS i ett befintligt kluster använder du az aks update
kommandot med --disable-azure-keyvault-kms
argumentet :
az aks update --name myAKSCluster --resource-group MyResourceGroup --disable-azure-keyvault-kms
Migrera lagring
Om du vill uppdatera alla hemligheter använder du kubectl get secrets
kommandot med --all-namespaces
argumentet :
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Uppgradera AKS-klustret
Om du vill uppgradera ett AKS-kluster använder du az aks upgrade
kommandot . Ange versionen till 1.27.x
eller senare med hjälp --kubernetes-version
av argumentet .
az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version <AKS version>
Här är ett exempel:
az aks upgrade --resource-group myResourceGroup --name myAKSCluster --kubernetes-version 1.27.1
Aktivera KMS efter lagringsmigrering
Du kan aktivera KMS-funktionen i klustret igen för att kryptera hemligheterna. Därefter använder AKS-klustret KMS v2. Om du inte vill migrera till KMS v2 kan du skapa ett nytt kluster som är version 1.27 eller senare med KMS aktiverat.
Migrera lagring för KMS v2
Om du vill kryptera om alla hemligheter i KMS v2 använder du kubectl get secrets
kommandot med --all-namespaces
argumentet :
kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Azure Kubernetes Service