Delen via


Sleutelbeheerservice (KMS) en etcd-encryptie toevoegen aan een Azure Kubernetes Service (AKS)-cluster (verouderd)

Belangrijk

In dit artikel wordt de verouderde KMS-ervaring voor AKS beschreven. Voor nieuwe clusters met Kubernetes versie 1.33 of hoger raden we u aan de nieuwe ervaring voor KMS-gegevensversleuteling te gebruiken, die door het platform beheerde sleutels, door de klant beheerde sleutels met automatische sleutelrotatie en een vereenvoudigde configuratie-ervaring biedt.

Zie Concepten voor gegevensversleuteling in rusttoestand voor AKS voor conceptuele informatie over opties voor gegevensversleuteling.

In dit artikel leest u hoe u versleuteling at-rest inschakelt voor een openbare of persoonlijke sleutelkluis met behulp van Azure Key Vault en de KMS-invoegtoepassing (Key Management Service) op AKS. U kunt de KMS-invoegtoepassing gebruiken voor het volgende:

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

Zie Een KMS-provider gebruiken voor gegevensversleuteling 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. Zoek uw versie met behulp van de az --version opdracht. Als u uw CLI wilt installeren of upgraden, raadpleegt u De Azure CLI installeren.

Waarschuwing

Vanaf 15 september 2024 wordt Konnectivity niet meer ondersteund voor persoonlijke sleutelkluizen voor nieuwe abonnementen of abonnementen die deze configuratie niet eerder hebben gebruikt. Voor abonnementen die momenteel deze configuratie gebruiken of deze in de afgelopen 60 dagen hebben gebruikt, wordt de ondersteuning voortgezet totdat AKS versie 1.30 het einde van de levensduur bereikt voor ondersteuning van de community.

KMS biedt ondersteuning voor Konnectivity of API Server VNet-integratie voor openbare-sleutelkluizen.

KMS biedt ondersteuning voor API Server VNet-integratie voor zowel privé- als openbare sleutelkluizen.

U kunt kubectl get pods -n kube-system gebruiken om de resultaten te verifiëren en te bevestigen dat een konnectivity-agent pod actief is. Als er een pod actief is, gebruikt het AKS-cluster Konnectivity. Wanneer u de API Server VNet-integratie gebruikt, kunt u de opdracht az aks show --resource-group <resource-group-name> --name <cluster-name> uitvoeren om te verifiëren of de instelling enableVnetIntegration is ingesteld op true.

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. Een systeemtoegewezen beheerde identiteit is pas beschikbaar zodra het cluster is gemaakt. Houd rekening met de cyclusafhankelijkheid.
  • Omdat de firewall verkeer van de KMS-invoegtoepassing naar Key Vault blokkeert, worden twee scenario's niet ondersteund. Ten eerste kan Azure Key Vault niet worden geconfigureerd met de firewalloptie Openbare toegang vanuit specifieke virtuele netwerken en IP-adressen toestaan. Ten tweede kan Azure Key Vault niet worden geconfigureerd met Openbare toegang uitschakelen , tenzij VNet-integratie van API Server is ingeschakeld.
  • 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 en een persoonlijke sleutelkluis heeft, moet het de VNet-integratietunnel van de API Server gebruiken. Konnectivity wordt niet ondersteund.
  • 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 valt vervolgens uit en wordt onherstelbaar.
  • Nadat u KMS hebt uitgeschakeld, kunt u de sleutels niet verwijderen of laten verlopen. Dit gedrag zorgt ervoor dat de API-server niet meer werkt.
  • Voor een privécluster waarvoor KMS is ingeschakeld en virtuele netwerkintegratie die gebruikmaakt van een privésleutelkluis, moet de netwerkbeveiligingsgroep (NSG) TCP-poort 443 van de API-server naar het IP-adres van het privé-eindpunt van de privésleutelkluis toestaan. Deze beperking moet worden overwogen bij het gebruik van andere regels in de NSG van het API-subnet of de NSG van het clustersubnet.

Maak een sleutelkluis en een sleutel voor een openbare sleutelkluis.

In de volgende secties wordt beschreven hoe u KMS inschakelt voor een openbare-sleutelkluis. U kunt een openbare sleutelkluis gebruiken met of zonder op rollen gebaseerd toegangsbeheer van Azure (Azure RBAC).

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 het document over herstelbeheer van Azure Key Vault met soft delete en bescherming tegen opschonen.

  1. Maak een sleutelkluis met Azure RBAC met behulp van de az keyvault create opdracht. Met deze voorbeeldopdracht wordt ook de resource-id van de sleutelkluis geëxporteerd naar een omgevingsvariabele.

    export KEY_VAULT_RESOURCE_ID=$(az keyvault create --name $KEY_VAULT --resource-group $RESOURCE_GROUP  --enable-rbac-authorization true --query id -o tsv)
    
  2. Wijs uzelf machtigingen toe om een sleutel te maken met behulp van de az role assignment create opdracht. In dit voorbeeld wordt de rol Crypto Officer van Key Vault toegewezen aan de aangemelde gebruiker.

    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 $KEY_VAULT_RESOURCE_ID
    
  3. Maak een sleutel met behulp van de az keyvault key create opdracht.

    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT
    
  4. Haal de sleutel-id op en sla deze op als een omgevingsvariabele met behulp van de az keyvault key show opdracht.

    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT --query 'key.kid' -o tsv)
    echo $KEY_ID
    

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

  1. Maak een door de gebruiker toegewezen beheerde identiteit met behulp van de az identity create opdracht.

    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
  2. Haal de id van het identiteitsobject op en sla deze op als een omgevingsvariabele met behulp van de az identity show opdracht.

    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    echo $IDENTITY_OBJECT_ID
    
  3. Haal de id van de identiteitsresource op en sla deze op als een omgevingsvariabele met behulp van de az identity show opdracht.

    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    echo $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 openbare-sleutelkluis met of zonder Azure RBAC.

  • Wijs de cryptogebruikersrol Key Vault toe om ontsleuteling en versleutelingsmachtigingen te verlenen met behulp van de az role assignment create opdracht.

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

KMS inschakelen voor een public key-vault in een AKS-cluster

In de volgende secties wordt beschreven hoe u KMS inschakelt voor een openbare sleutelkluis in een nieuw of bestaand AKS-cluster.

Een AKS-cluster maken met een openbare sleutelkluis en KMS

  • Maak een AKS-cluster met een openbare sleutelkluis en KMS door de az aks create opdracht met de --enable-azure-keyvault-kms--azure-keyvault-kms-key-vault-network-access, en --azure-keyvault-kms-key-id parameters te gebruiken.

    az aks create \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --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
    

Een openbare sleutelkluis en KMS inschakelen op een bestaand AKS-cluster

  1. Schakel KMS in op een openbare sleutelkluis op een bestaand cluster met behulp van de az aks update opdracht met de --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-access en --azure-keyvault-kms-key-id parameters.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-azure-keyvault-kms \
        --azure-keyvault-kms-key-vault-network-access "Public" \
        --azure-keyvault-kms-key-id $KEY_ID
    
  2. Werk alle geheimen bij met behulp van de kubectl get secrets opdracht om ervoor te zorgen dat de eerder gemaakte geheimen niet meer worden versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken. Als de vorige opdracht voor het bijwerken van KMS mislukt, voert u nog steeds de volgende opdracht uit om onverwachte status voor de KMS-invoegtoepassing te voorkomen.

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

    Wanneer u de opdracht uitvoert, is de volgende fout veilig te negeren:

    The object has been modified; please apply your changes to the latest version and try again.
    

Bestaande sleutels roteren in een publieke sleutelkluis

Nadat u de sleutel-id hebt gewijzigd (inclusief het wijzigen van de sleutelnaam of de sleutelversie), kunt u de bestaande sleutels in de openbare sleutelkluis 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.

KMS gebruikt twee sleutels tegelijk. Na de eerste sleutelrotatie moet u ervoor zorgen dat zowel de oude als de nieuwe sleutels geldig zijn (niet verlopen) tot de volgende sleutelrotatie. Na de tweede sleutelrotatie kan de oudste sleutel veilig worden verwijderd/verlopen.

Nadat u de KMS-sleutelversie hebt vervangen met de nieuwe keyId, controleer securityProfile.azureKeyVaultKms.keyId in de JSON van de AKS-resource. Zorg ervoor dat de nieuwe sleutelversie wordt gebruikt.

  1. Bestaande sleutels draaien met behulp van de az aks update opdracht met de --enable-azure-keyvault-kms, --azure-keyvault-kms-key-vault-network-accessen --azure-keyvault-kms-key-id parameters.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-azure-keyvault-kms \
        --azure-keyvault-kms-key-vault-network-access "Public" \
        --azure-keyvault-kms-key-id $NEW_KEY_ID
    
  2. Werk alle geheimen bij met behulp van de kubectl get secrets opdracht om ervoor te zorgen dat de eerder gemaakte geheimen niet meer worden versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken. Als de vorige opdracht voor het bijwerken van KMS mislukt, voert u nog steeds de volgende opdracht uit om onverwachte status voor de KMS-invoegtoepassing te voorkomen.

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

    Wanneer u de opdracht uitvoert, is de volgende fout veilig te negeren:

    The object has been modified; please apply your changes to the latest version and try again.
    

Een sleutelkluis en sleutel maken 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 heeft een privé-eindpuntverbinding met het AKS-cluster.

Waarschuwing

Houd rekening met de volgende informatie bij het gebruik van een persoonlijke sleutelkluis:

  • KMS biedt alleen ondersteuning voor API Server VNet-integratie voor een persoonlijke sleutelkluis.
  • 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.
  • 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 het document over herstelbeheer van Azure Key Vault met soft delete en bescherming tegen opschonen.
  1. Maak een persoonlijke sleutelkluis met behulp van de az keyvault create opdracht met de --public-network-access Disabled parameter.

    az keyvault create --name $KEY_VAULT --resource-group $RESOURCE_GROUP --public-network-access Disabled
    
  2. Maak een sleutel met behulp van de az keyvault key create opdracht.

    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT
    

Een door de gebruiker toegewezen beheerde identiteit maken voor een privé Key Vault.

  1. Maak een door de gebruiker toegewezen beheerde identiteit met behulp van de az identity create opdracht.

    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
  2. Haal de id van het identiteitsobject op en sla deze op als een omgevingsvariabele met behulp van de az identity show opdracht.

    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    echo $IDENTITY_OBJECT_ID
    
  3. Haal de id van de identiteitsresource op en sla deze op als een omgevingsvariabele met behulp van de az identity show opdracht.

    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    echo $IDENTITY_RESOURCE_ID
    

Machtigingen toewijzen voor het ontsleutelen en versleutelen van een privé sleutelopslag

In de volgende secties wordt beschreven hoe u machtigingen voor ontsleuteling en versleuteling toewijst voor een persoonlijke sleutelkluis met of zonder Azure RBAC.

  • Wijs de cryptogebruikersrol Key Vault toe om ontsleuteling en versleutelingsmachtigingen te verlenen met behulp van de az role assignment create opdracht.

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

Voor private key vaults is de rol Key Vault Contributor vereist om een privékoppeling te maken tussen de private key vault en het cluster.

  • Wijs de rol Inzender voor Key Vault toe met behulp van de az role assignment create opdracht.

    az role assignment create --role "Key Vault Contributor" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
    

KMS inschakelen voor een privésleutelkluis op een AKS-cluster

In de volgende secties wordt beschreven hoe u KMS inschakelt voor een persoonlijke sleutelkluis op een nieuw of bestaand AKS-cluster.

Een AKS-cluster maken met een persoonlijke sleutelkluis en KMS

  • Maak een AKS-cluster met een persoonlijke sleutelkluis en KMS met behulp van de opdracht met de az aks create--enable-azure-keyvault-kms, --azure-keyvault-kms-key-iden --azure-keyvault-kms-key-vault-network-access--azure-keyvault-kms-key-vault-resource-id parameters.

    az aks create \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --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 $KEY_VAULT_RESOURCE_ID \
        --generate-ssh-keys
    

Een bestaand AKS-cluster bijwerken om KMS etcd-versleuteling in te schakelen voor een persoonlijke sleutelkluis

  1. Schakel KMS in op een private sleutelkluis op een bestaand cluster met behulp van de az aks update opdracht 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.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP \
        --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 $KEY_VAULT_RESOURCE_ID
    
  2. Werk alle geheimen bij met behulp van de kubectl get secrets opdracht om ervoor te zorgen dat de eerder gemaakte geheimen niet meer worden versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken. Als de vorige opdracht voor het bijwerken van KMS mislukt, voert u nog steeds de volgende opdracht uit om onverwachte status voor de KMS-invoegtoepassing te voorkomen.

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

    Wanneer u de opdracht uitvoert, is de volgende fout veilig te negeren:

    The object has been modified; please apply your changes to the latest version and try again.
    

Bestaande sleutels rouleren in een privé sleutelkluis

Nadat u de sleutel-id hebt gewijzigd (inclusief het wijzigen van de sleutelnaam of de sleutelversie), kunt u de bestaande sleutels in de persoonlijke sleutelkluis draaien.

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.

Nadat u de KMS-sleutelversie hebt vervangen met de nieuwe keyId, controleer securityProfile.azureKeyVaultKms.keyId in de JSON van de AKS-resource. Zorg ervoor dat de nieuwe sleutelversie wordt gebruikt.

  1. Rooteer bestaande sleutels in een privé sleutelkluis met behulp van de az aks update opdracht, samen met de parameters --enable-azure-keyvault-kms, --azure-keyvault-kms-key-id, --azure-keyvault-kms-key-vault-network-access en --azure-keyvault-kms-key-vault-resource-id.

    az aks update \
        --name $CLUSTER_NAME \
        --resource-group $RESOURCE_GROUP  \
        --enable-azure-keyvault-kms \
        --azure-keyvault-kms-key-id $NEW_KEY_ID \
        --azure-keyvault-kms-key-vault-network-access "Private" \
        --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID
    
  2. Werk alle geheimen bij met behulp van de kubectl get secrets opdracht om ervoor te zorgen dat de eerder gemaakte geheimen niet meer worden versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken. Als de vorige opdracht voor het bijwerken van KMS mislukt, voert u nog steeds de volgende opdracht uit om onverwachte status voor de KMS-invoegtoepassing te voorkomen.

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

    Wanneer u de opdracht uitvoert, is de volgende fout veilig te negeren:

    The object has been modified; please apply your changes to the latest version and try again.
    

KMS uitschakelen op een AKS-cluster

  1. Voordat u KMS uitschakelt, controleert u of KMS is ingeschakeld op het cluster met behulp van de az aks list opdracht.

    az aks list --query "[].{Name:name, KmsEnabled:securityProfile.azureKeyVaultKms.enabled, KeyId:securityProfile.azureKeyVaultKms.keyId}" -o table
    
  2. Zodra dit is bevestigd, kunt u KMS uitschakelen met behulp van de az aks update opdracht met de --disable-azure-keyvault-kms parameter.

    az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --disable-azure-keyvault-kms
    
  3. Werk alle geheimen bij met behulp van de kubectl get secrets opdracht om ervoor te zorgen dat de eerder gemaakte geheimen niet meer worden versleuteld. Voor grotere clusters wilt u de geheimen mogelijk onderverdelen op naamruimte of een updatescript maken. Als de vorige opdracht voor het bijwerken van KMS mislukt, voert u nog steeds de volgende opdracht uit om onverwachte status voor de KMS-invoegtoepassing te voorkomen.

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

    Wanneer u de opdracht uitvoert, is de volgende fout veilig te negeren:

    The object has been modified; please apply your changes to the latest version and try again.
    

Volgende stappen

Zie de volgende artikelen voor meer informatie over het gebruik van KMS met AKS: