Dela via


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-authorizationkan 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-authorizationtilldelar 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-accessoch --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-accessoch --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-accessoch --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-authorizationkan 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-authorizationtilldelar 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

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-accessoch --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-accessoch --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-accessoch --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-accessEnabled 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:

  1. Inaktivera KMS i klustret.
  2. Utför lagringsmigreringen.
  3. Uppgradera klustret till version 1.27 eller senare.
  4. Aktivera KMS i klustret.
  5. 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 -