Partager via


Activer le chiffrement des données KMS dans les clusters Azure Kubernetes Service (AKS) (préversion)

Cet article explique comment activer le chiffrement des données KMS (Key Management Service) pour les secrets Kubernetes dans Azure Kubernetes Service (AKS). Le chiffrement KMS chiffre les secrets Kubernetes stockés dans etcd à l’aide de clés Azure Key Vault.

AKS prend en charge deux options de gestion clés :

  • Clés gérées par la plateforme (PMK) : AKS crée et gère automatiquement les clés de chiffrement. Cette option fournit la configuration la plus simple avec la rotation automatique des clés.
  • Clés gérées par le client (CMK) : vous créez et gérez vos propres clés Azure Key Vault et de chiffrement. Cette option offre un contrôle total sur le cycle de vie des clés et répond aux exigences de conformité qui imposent des clés gérées par le client.

Pour plus d’informations sur les concepts de chiffrement et les options clés, consultez les concepts de chiffrement au repos des données pour AKS.

Important

Les fonctionnalités d’évaluation AKS sont disponibles en libre-service et font l’objet d’un abonnement. Les versions d'essai sont fournies « en l’état » et « selon disponibilité », et elles sont exclues des contrats de niveau de service et de la garantie limitée. Les versions préliminaires AKS sont, dans la mesure du possible, partiellement couvertes par le service clientèle. Par conséquent, ces fonctionnalités ne sont pas destinées à une utilisation en production. Pour plus d’informations, consultez les articles de support suivants :

Prerequisites

  • Cet article nécessite la version 2.73.0 ou ultérieure d’Azure CLI. Si vous utilisez Azure Cloud Shell, sachez que la dernière version y est déjà installée.
  • Vous avez besoin de l’extension aks-preview Azure CLI version 19.0.0b13 ou ultérieure.
    • Si vous n’avez pas encore l’extension aks-preview, installez-la en utilisant la commande az extension add.
      az extension add --name aks-preview
      
    • Si vous disposez déjà de l’extension aks-preview, mettez-la à jour pour vous assurer que vous disposez de la dernière version en utilisant la commande az extension update.
      az extension update --name aks-preview
      
  • kubectl Outil CLI installé.

Inscrire l’indicateur de fonctionnalité

Pour utiliser le chiffrement des données KMS avec des clés gérées par la plateforme, inscrivez l’indicateur de KMSPMKPreview fonctionnalité dans votre abonnement.

  1. Inscrivez l’indicateur de fonctionnalité à l’aide de la az feature register commande.

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. Vérifiez l’état de l’inscription en utilisant la commande az feature show. Quelques minutes sont nécessaires pour que l’état s’affiche Registered (Inscrit).

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. Lorsque l’état indique Inscrit, actualisez l’inscription du fournisseur de ressources Microsoft.ContainerService à l’aide de la az provider register commande.

    az provider register --namespace Microsoft.ContainerService
    

Définir les variables d’environnement

Configurez des variables d’environnement pour votre déploiement. Remplacez les valeurs d’espace réservé par vos propres valeurs.

# 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

Activer le chiffrement de clé gérée par la plateforme

Avec les clés gérées par la plateforme, AKS crée et gère automatiquement les clés Azure Key Vault et de chiffrement. La rotation des clés est gérée automatiquement par la plateforme.

Créer un cluster AKS avec des clés gérées par la plateforme

Créez un cluster AKS avec chiffrement KMS à l’aide de clés gérées par la plateforme.

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

Activer des clés gérées par la plateforme sur un cluster existant

Activez le chiffrement KMS avec des clés gérées par la plateforme sur un cluster AKS existant.

Note

Le cluster doit exécuter Kubernetes version 1.33 ou ultérieure.

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

Activer le chiffrement de clé géré par le client avec un coffre de clés privé

Pour renforcer la sécurité, vous pouvez utiliser un coffre de clés privé dont l’accès au réseau public est désactivé. AKS accède au coffre de clés privé via l’exception de pare-feu des services approuvés. Cette section montre comment configurer des clés gérées par le client avec un coffre de clés privé.

Créer un coffre de clés et une clé avec accès aux services approuvés

Note

Cette section illustre la création d'un coffre de clés avec un accès initial au réseau public, puis l'activation du pare-feu avec contournement des services approuvés. Cette approche est à des fins d’illustration uniquement. Dans les environnements de production, vous devez créer et gérer votre coffre de clés en tant que privé dès le début. Pour obtenir des conseils sur la gestion des coffres de clés privés, consultez la sécurité réseau d’Azure Key Vault.

  1. Créez un coffre de clés avec Azure RBAC activé.

    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. Attribuez-vous le rôle Agent de chiffrement Key Vault pour créer une clé.

    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. Créez une clé dans le coffre de clés.

    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. Activez le pare-feu key vault avec le contournement des services approuvés.

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

    Le --default-action Deny paramètre bloque l’accès au réseau public et le --bypass AzureServices paramètre permet aux services Azure approuvés (y compris AKS) d’accéder au coffre de clés.

Créer une identité managée attribuée par l’utilisateur

  1. Créez une identité managée affectée par l’utilisateur pour le 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. Attribuez les rôles requis à l’identité managée.

    # 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
    

Créer un cluster AKS avec des clés gérées par le client (privées)

Créez un cluster AKS avec chiffrement KMS à l’aide de clés gérées par le client avec un coffre de clés privé.

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

Activer les clés gérées par le client sur un cluster existant (privé)

Activez le chiffrement KMS avec des clés gérées par le client à l’aide d’un coffre de clés privé sur un cluster AKS existant.

Note

Le cluster doit exécuter Kubernetes version 1.33 ou ultérieure.

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

Activer le chiffrement de clé géré par le client avec un coffre de clés public

Avec les clés gérées par le client, vous créez et gérez vos propres clés Azure Key Vault et de chiffrement. Cette section montre comment configurer des clés gérées par le client avec un coffre de clés public.

Créer un coffre de clés et une clé

  1. Créez un coffre de clés avec Azure RBAC activé.

    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. Attribuez-vous le rôle Agent de chiffrement Key Vault pour créer une clé.

    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. Créez une clé dans le coffre de clés.

    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|/[^/]*$||')
    

Créer une identité managée attribuée par l’utilisateur

  1. Créez une identité managée affectée par l’utilisateur pour le 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. Attribuez les rôles requis à l’identité managée.

    # 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
    

Créer un cluster AKS avec des clés gérées par le client

Créez un cluster AKS avec chiffrement KMS à l’aide de clés gérées par le client.

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

Activer les clés gérées par le client sur un cluster existant

Activez le chiffrement KMS avec des clés gérées par le client sur un cluster AKS existant.

Note

Le cluster doit exécuter Kubernetes version 1.33 ou ultérieure.

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

Vérifier la configuration KMS

Après avoir activé le chiffrement KMS, vérifiez la configuration.

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

La sortie inclut la configuration KMS :

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

Migrer entre les options de gestion des clés

Vous pouvez migrer entre les clés gérées par la plateforme et les clés gérées par le client.

Migrer des clés gérées par la plateforme vers des clés gérées par le client

Pour migrer des clés gérées par la plateforme vers des clés gérées par le client, commencez par configurer le coffre de clés, la clé et l’identité managée, comme décrit dans la section clés gérées par le client, puis exécutez la commande de mise à jour :

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

Migrer des clés gérées par le client vers des clés gérées par la plateforme

Pour migrer des clés gérées par le client vers des clés gérées par la plateforme :

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

Rotation des clés

Avec le chiffrement des données KMS, la rotation des clés est gérée différemment en fonction de votre option de gestion des clés :

  • Clés gérées par la plateforme : la rotation des clés est automatique. Aucune action n’est requise.
  • Clés gérées par le client : lorsque vous faites pivoter la version de clé dans Azure Key Vault, le contrôleur KMS détecte régulièrement la rotation (toutes les 6 heures) et utilise la nouvelle version de la clé.

Note

Contrairement à l’expérience KMS héritée, avec cette nouvelle implémentation, vous n’avez pas besoin de chiffrer manuellement les secrets après la rotation des clés. La plateforme gère cela automatiquement.