Delen via


KMS-gegevensversleuteling inschakelen in AKS-clusters (Azure Kubernetes Service) (preview)

In dit artikel leest u hoe u KMS-gegevensversleuteling (Key Management Service) inschakelt voor Kubernetes-geheimen in Azure Kubernetes Service (AKS). KMS-versleuteling versleutelt Kubernetes-geheimen die zijn opgeslagen in etcd met behulp van Azure Key Vault-sleutels.

AKS ondersteunt twee opties voor sleutelbeheer:

  • Door platform beheerde sleutels (PMK):AKS maakt en beheert automatisch de versleutelingssleutels. Deze optie biedt de eenvoudigste instelling met automatische sleutelrotatie.
  • Door de klant beheerde sleutels (CMK): u maakt en beheert uw eigen Azure Key Vault en versleutelingssleutels. Deze optie biedt volledige controle over de levenscyclus van sleutels en voldoet aan nalevingsvereisten die door de klant beheerde sleutels verplicht stellen.

Zie Data encryption at rest-concepten voor AKS voor meer informatie over versleutelingsconcepten en sleutelopties.

Belangrijk

AKS preview-functies zijn beschikbaar op selfservice, opt-in basis. Previews worden geleverd 'zoals het is' en 'voor zover beschikbaar' en zijn uitgesloten van de serviceovereenkomsten en beperkte garantie. AKS-previews worden gedeeltelijk gedekt door klantondersteuning naar best vermogen. Zodoende zijn deze functies niet bedoeld voor productiegebruik. Zie de volgende ondersteuningsartikelen voor meer informatie:

Vereiste voorwaarden

  • Voor dit artikel is versie 2.73.0 of hoger van de Azure CLI vereist. Als u Azure Cloud Shell gebruikt, is de nieuwste versie daar al geïnstalleerd.
  • U hebt de aks-preview Azure CLI-extensie versie 19.0.0b13 of hoger nodig.
    • Als u de aks-preview extensie nog niet hebt, installeert u deze met behulp van de az extension add opdracht.
      az extension add --name aks-preview
      
    • Als u de aks-preview extensie al hebt, werkt u deze bij om ervoor te zorgen dat u de nieuwste versie hebt met behulp van de az extension update opdracht.
      az extension update --name aks-preview
      
  • kubectl Het CLI-hulpprogramma is geïnstalleerd.

De functievlag registreren

Als u KMS-gegevensversleuteling wilt gebruiken met door het platform beheerde sleutels, registreert u de KMSPMKPreview functievlag in uw abonnement.

  1. Registreer de functievlag met behulp van de az feature register opdracht.

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. Controleer de registratiestatus met behulp van de az feature show opdracht. Het duurt enkele minuten voordat de status Geregistreerd wordt weergegeven.

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. Wanneer de status Geregistreerd wordt weergegeven, vernieuwt u de registratie van de Resourceprovider Microsoft.ContainerService met behulp van de az provider register opdracht.

    az provider register --namespace Microsoft.ContainerService
    

Omgevingsvariabelen instellen

Stel omgevingsvariabelen in voor uw implementatie. Vervang de waarden van de tijdelijke aanduiding door uw eigen waarden.

# Set environment variables
export SUBSCRIPTION_ID="<your-subscription-id>"
export RESOURCE_GROUP="<your-resource-group>"
export LOCATION="<your-location>"
export CLUSTER_NAME="<your-cluster-name>"

# Set subscription
az account set --subscription $SUBSCRIPTION_ID

# Create resource group if it doesn't exist
az group create --name $RESOURCE_GROUP --location $LOCATION

Versleuteling van door platform beheerde sleutels inschakelen

Met door het platform beheerde sleutels maakt en beheert AKS automatisch de Azure Key Vault en versleutelingssleutels. Sleutelrotatie wordt automatisch verwerkt door het platform.

Een nieuw AKS-cluster maken met door het platform beheerde sleutels

Maak een nieuw AKS-cluster met KMS-versleuteling met behulp van door het platform beheerde sleutels.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --generate-ssh-keys

Door platform beheerde sleutels inschakelen op een bestaand cluster

Schakel KMS-versleuteling in met platform beheerde sleutels op een bestaand AKS-cluster.

Opmerking

Op het cluster moet Kubernetes versie 1.33 of hoger worden uitgevoerd.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled

KMS-configuratie controleren

Controleer de configuratie nadat u KMS-versleuteling hebt ingeschakeld.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

De uitvoer bevat de KMS-configuratie:

{
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

Door de klant beheerde sleutelversleuteling inschakelen met een persoonlijke sleutelkluis

Voor verbeterde beveiliging kunt u een persoonlijke sleutelkluis gebruiken waarvoor openbare netwerktoegang is uitgeschakeld. AKS opent de persoonlijke sleutelkluis via de firewall-uitzondering voor vertrouwde services. In deze sectie wordt beschreven hoe u door de klant beheerde sleutels configureert met een persoonlijke sleutelkluis.

Een sleutelkluis en sleutel creëren met toegang voor vertrouwde services

Opmerking

Deze sectie illustreert het maken van een sleutelkluis met aanvankelijk openbare netwerktoegang en vervolgens het inschakelen van de firewall met een bypass voor vertrouwde diensten. Deze benadering is alleen bedoeld voor illustratieve doeleinden. In productieomgevingen moet u vanaf het begin uw sleutelkluis als privé maken en beheren. Zie Azure Key Vault-netwerkbeveiliging voor hulp bij het beheren van persoonlijke sleutelkluizen.

  1. Maak een Azure Key Vault waarvoor Azure RBAC is ingeschakeld.

    export KEY_VAULT_NAME="<your-key-vault-name>"
    
    az keyvault create \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-rbac-authorization true \
        --public-network-access Enabled
    
    # Get the key vault resource ID
    export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    
  2. Wijs uzelf de rol van Key Vault Crypto Officer toe om een sleutel aan te maken.

    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 in de sleutelkluis.

    export KEY_NAME="<your-key-name>"
    
    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME
    
    # Get the key ID (without version for automatic rotation)
    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv)
    export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
    
  4. Schakel de key vault-firewall in met een bypass van vertrouwde services.

    az keyvault update \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --default-action Deny \
        --bypass AzureServices
    

    De --default-action Deny parameter blokkeert de toegang tot openbare netwerken en met de --bypass AzureServices parameter kunnen vertrouwde Azure-services (inclusief AKS) toegang krijgen tot de sleutelkluis.

Maak een door de gebruiker toegewezen beheerde identiteit

  1. Maak een door de gebruiker toegewezen beheerde identiteit voor het cluster.

    export IDENTITY_NAME="<your-identity-name>"
    
    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
    # Get the identity details
    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    
  2. Wijs de vereiste rollen toe aan de beheerde identiteit.

    # Assign Key Vault Crypto User role for encrypt/decrypt operations
    az role assignment create \
        --role "Key Vault Crypto User" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    
    # Assign Key Vault Contributor role for key management
    az role assignment create \
        --role "Key Vault Contributor" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    

Een nieuw AKS-cluster maken met door de klant beheerde sleutels (privé)

Maak een nieuw AKS-cluster met KMS-versleuteling met behulp van door de klant beheerde sleutels met een persoonlijke sleutelkluis.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Private \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --generate-ssh-keys

Door de klant beheerde sleutels inschakelen op een bestaand cluster (privé)

Schakel KMS-versleuteling in met door de klant beheerde sleutels met behulp van een persoonlijke sleutelkluis op een bestaand AKS-cluster.

Opmerking

Op het cluster moet Kubernetes versie 1.33 of hoger worden uitgevoerd.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Private \
    --assign-identity $IDENTITY_RESOURCE_ID

KMS-configuratie controleren

Controleer de configuratie nadat u KMS-versleuteling hebt ingeschakeld.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

De uitvoer bevat de KMS-configuratie:

{
    "azureKeyVaultKms": {
        "enabled": true,
        "keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
        "keyVaultNetworkAccess": "Private",
        "keyVaultResourceId": "<key-vault-resource-id>"
    },
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

Door de klant beheerde sleutelversleuteling met een openbare sleutelkluis inschakelen

Met door de klant beheerde sleutels maakt en beheert u uw eigen Azure Key Vault en versleutelingssleutels. In deze sectie wordt beschreven hoe u door de klant beheerde sleutels configureert met een openbare sleutelkluis.

Een sleutelkluis en sleutel maken

  1. Maak een Azure Key Vault waarvoor Azure RBAC is ingeschakeld.

    export KEY_VAULT_NAME="<your-key-vault-name>"
    
    az keyvault create \
        --name $KEY_VAULT_NAME \
        --resource-group $RESOURCE_GROUP \
        --enable-rbac-authorization true \
        --public-network-access Enabled
    
    # Get the key vault resource ID
    export KEY_VAULT_RESOURCE_ID=$(az keyvault show --name $KEY_VAULT_NAME --resource-group $RESOURCE_GROUP --query id -o tsv)
    
  2. Wijs uzelf de rol van Key Vault Crypto Officer toe om een sleutel aan te maken.

    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 in de sleutelkluis.

    export KEY_NAME="<your-key-name>"
    
    az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT_NAME
    
    # Get the key ID (without version for automatic rotation)
    export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT_NAME --query 'key.kid' -o tsv)
    export KEY_ID_NO_VERSION=$(echo $KEY_ID | sed 's|/[^/]*$||')
    

Maak een door de gebruiker toegewezen beheerde identiteit

  1. Maak een door de gebruiker toegewezen beheerde identiteit voor het cluster.

    export IDENTITY_NAME="<your-identity-name>"
    
    az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP
    
    # Get the identity details
    export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv)
    export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv)
    
  2. Wijs de vereiste rollen toe aan de beheerde identiteit.

    # Assign Key Vault Crypto User role for encrypt/decrypt operations
    az role assignment create \
        --role "Key Vault Crypto User" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    
    # Assign Key Vault Contributor role for key management
    az role assignment create \
        --role "Key Vault Contributor" \
        --assignee-object-id $IDENTITY_OBJECT_ID \
        --assignee-principal-type "ServicePrincipal" \
        --scope $KEY_VAULT_RESOURCE_ID
    

Een nieuw AKS-cluster maken met door de klant beheerde sleutels

Maak een nieuw AKS-cluster met KMS-versleuteling met behulp van door de klant beheerde sleutels.

az aks create \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kubernetes-version 1.33.0 \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID \
    --generate-ssh-keys

Door de klant beheerde sleutels inschakelen op een bestaand cluster

Schakel KMS-versleuteling in met door de klant beheerde sleutels op een bestaand AKS-cluster.

Opmerking

Op het cluster moet Kubernetes versie 1.33 of hoger worden uitgevoerd.

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID

KMS-configuratie controleren

Controleer de configuratie nadat u KMS-versleuteling hebt ingeschakeld.

az aks show --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --query 'securityProfile'

De uitvoer bevat de KMS-configuratie:

{
    "azureKeyVaultKms": {
        "enabled": true,
        "keyId": "https://<key-vault-name>.vault.azure.net/keys/<key-name>",
        "keyVaultNetworkAccess": "Public",
        "keyVaultResourceId": "<key-vault-resource-id>"
    },
    "kubernetesResourceObjectEncryptionProfile": {
        "infrastructureEncryption": "Enabled"
    }
}

Migreren tussen opties voor sleutelbeheer

U kunt migreren tussen door het platform beheerde sleutels en door de klant beheerde sleutels.

Migreren van door platform beheerde sleutels naar door de klant beheerde sleutels

Als u wilt migreren van door het platform beheerde sleutels naar door de klant beheerde sleutels, moet u eerst de sleutelkluis, sleutel en beheerde identiteit instellen, zoals beschreven in de sectie door de klant beheerde sleutels en voert u vervolgens de updateopdracht uit:

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --enable-azure-keyvault-kms \
    --azure-keyvault-kms-key-id $KEY_ID_NO_VERSION \
    --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \
    --azure-keyvault-kms-key-vault-network-access Public \
    --assign-identity $IDENTITY_RESOURCE_ID

Migreren van door de klant beheerde sleutels naar door het platform beheerde sleutels

Migreren van door de klant beheerde sleutels naar door het platform beheerde sleutels:

az aks update \
    --name $CLUSTER_NAME \
    --resource-group $RESOURCE_GROUP \
    --kms-infrastructure-encryption Enabled \
    --disable-azure-keyvault-kms

Sleutelrotatie

Met KMS-gegevensversleuteling wordt sleutelrotatie anders verwerkt, afhankelijk van uw optie voor sleutelbeheer:

  • Door platform beheerde sleutels: sleutelrotatie wordt automatisch uitgevoerd. Er is geen actie vereist.
  • Door de klant beheerde sleutels: wanneer u de sleutelversie in Azure Key Vault roteert, detecteert de KMS-controller de rotatie periodiek (elke 6 uur) en wordt de nieuwe sleutelversie gebruikt.

Opmerking

In tegenstelling tot de verouderde KMS-ervaring, hoeft u met deze nieuwe implementatie geheimen na sleutelrotatie niet handmatig opnieuw te versleutelen. Het platform verwerkt dit automatisch.