Condividi tramite


Abilitare la crittografia dei dati KMS nei cluster di Azure Kubernetes Service (AKS) (anteprima)

Questo articolo illustra come abilitare la crittografia dei dati del servizio di gestione delle chiavi per i segreti Kubernetes nel servizio Azure Kubernetes. La crittografia del Servizio di gestione delle chiavi crittografa i segreti Kubernetes archiviati in etcd usando le chiavi di Azure Key Vault.

AKS (Azure Kubernetes Service) supporta due opzioni di gestione delle chiavi:

  • Chiavi gestite dalla piattaforma (PMK): AKS crea e gestisce automaticamente le chiavi di crittografia. Questa opzione fornisce la configurazione più semplice con rotazione automatica delle chiavi.
  • Chiavi gestite dal cliente: si creano e si gestiscono chiavi di crittografia e azure Key Vault personalizzate. Questa opzione fornisce il controllo completo sul ciclo di vita delle chiavi e soddisfa i requisiti di conformità che impongono chiavi gestite dal cliente.

Per ulteriori informazioni sui concetti di crittografia e sulle opzioni delle chiavi, vedere Concetti relativi alla crittografia dei dati inattivi per il servizio Azure Kubernetes (AKS).

Importante

Le funzionalità di anteprima di AKS sono disponibili su base self-service, su scelta. Le anteprime vengono fornite "così come sono" e "come disponibili" e sono escluse dai contratti di servizio e dalla garanzia limitata. Le anteprime del servizio Azure Kubernetes sono parzialmente coperte dal supporto clienti con la massima diligenza possibile. Di conseguenza, queste funzionalità non sono destinate all'uso in produzione. Per altre informazioni, vedere gli articoli di supporto seguenti:

Prerequisiti

  • Questo articolo richiede la versione 2.73.0 o successiva dell'interfaccia della riga di comando di Azure. Se si usa Azure Cloud Shell, la versione più recente è già installata.
  • È necessaria la aks-preview versione dell'estensione dell'interfaccia della riga di comando di Azure 19.0.0b13 o successiva.
    • Se l'estensione aks-preview non è già disponibile installarla con il comando az extension add.
      az extension add --name aks-preview
      
    • Se l'estensione aks-preview è disponibile, aggiornarla per assicurarsi di disporre della versione più recente con il comando az extension update command.
      az extension update --name aks-preview
      
  • kubectl Strumento CLI installato.

Registrare il flag di funzionalità

Per utilizzare la crittografia dei dati di KMS con chiavi gestite dalla piattaforma, registrare nella sottoscrizione il flag di funzionalità KMSPMKPreview.

  1. Registrare il flag di funzionalità usando il comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. Verificare lo stato della registrazione usando il comando az feature show. Sono necessari alcuni minuti per visualizzare lo stato Registered.

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. Quando lo stato è Registrato, aggiornare la registrazione del provider di risorse Microsoft.ContainerService usando il az provider register comando .

    az provider register --namespace Microsoft.ContainerService
    

Configurare le variabili di ambiente

Configurare le variabili di ambiente per la distribuzione. Sostituire i valori segnaposto con i propri.

# 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

Abilitare la crittografia della chiave gestita dalla piattaforma

Con le chiavi gestite dalla piattaforma, AKS crea e gestisce automaticamente Azure Key Vault e le chiavi di crittografia. La rotazione delle chiavi viene gestita automaticamente dalla piattaforma.

Creare un nuovo cluster AKS con chiavi gestite dalla piattaforma

Creare un nuovo cluster AKS con crittografia KMS usando chiavi gestite dalla piattaforma.

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

Abilitare le chiavi gestite dalla piattaforma in un cluster esistente

Abilitare la crittografia KMS con chiavi gestite dalla piattaforma su un cluster AKS esistente.

Annotazioni

Il cluster deve eseguire Kubernetes versione 1.33 o successiva.

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

Verificare la configurazione di KMS

Dopo aver abilitato la crittografia KMS, verificare la configurazione.

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

L'output include la configurazione di KMS:

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

Abilitare la crittografia della chiave gestita dal cliente con un vault delle chiavi privato

Per una maggiore sicurezza, è possibile usare un archivio di chiavi privato con l'accesso alla rete pubblica disabilitato. Il servizio AKS accede all'insieme di credenziali delle chiavi provato tramite l'eccezione del firewall per servizi attendibili. Questa sezione illustra come configurare le chiavi gestite dal cliente con un vault delle chiavi privato.

Creare un insieme di credenziali delle chiavi e una chiave con accesso ai servizi attendibili

Annotazioni

Questa sezione illustra la creazione di un key vault con accesso iniziale alla rete pubblica, per poi abilitare il firewall con l'esclusione dei servizi attendibili. Questo approccio è solo a scopo illustrativo. Negli ambienti di produzione, l'insieme di credenziali delle chiavi deve essere creato e gestito come privato fin dall'inizio. Per indicazioni sulla gestione degli insiemi di credenziali delle chiavi private, vedere Sicurezza di rete di Azure Key Vault.

  1. Creare un insieme di credenziali delle chiavi con il controllo degli accessi in base al ruolo di Azure abilitato.

    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. Assegnare a se stessi il ruolo Responsabile della crittografia di Key Vault per creare una chiave

    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. Crea una chiave nell'insieme di credenziali delle chiavi.

    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. Abilitare il firewall dell'insieme di credenziali delle chiavi con il bypass dei servizi attendibili.

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

    Il --default-action Deny parametro blocca l'accesso alla rete pubblica e il --bypass AzureServices parametro consente ai servizi attendibili di Azure (incluso Azure Kubernetes Service) di accedere all'insieme di credenziali della chiave.

Creare un'identità gestita assegnata dall'utente

  1. Creare un'identità gestita assegnata dall'utente per il 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. Assegnare i ruoli necessari all'identità gestita.

    # 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
    

Creare un nuovo cluster AKS (Azure Kubernetes Service) con chiavi gestite dal cliente (private)

Creare un nuovo cluster AKS con crittografia KMS utilizzando chiavi gestite dal cliente con un vault delle chiavi privato.

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

Abilitare le chiavi gestite dal cliente in un cluster esistente (privato)

Abilitare la crittografia KMS con chiavi gestite dal cliente utilizzando un insieme di credenziali delle chiavi privato su un cluster AKS esistente.

Annotazioni

Il cluster deve eseguire Kubernetes versione 1.33 o successiva.

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

Verificare la configurazione di KMS

Dopo aver abilitato la crittografia KMS, verificare la configurazione.

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

L'output include la configurazione di KMS:

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

Abilitare la crittografia con chiave gestita dal cliente tramite un vault chiavi pubblico

Con le chiavi gestite dal cliente, è possibile creare e gestire chiavi di crittografia e Azure Key Vault personalizzate. Questa sezione illustra come configurare le chiavi gestite dal cliente con un cloud pubblico di chiavi.

Creare un insieme di credenziali delle chiavi e una chiave

  1. Creare un insieme di credenziali delle chiavi con il controllo degli accessi in base al ruolo di Azure abilitato.

    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. Assegnare a se stessi il ruolo Responsabile della crittografia di Key Vault per creare una chiave

    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. Crea una chiave nell'insieme di credenziali delle chiavi.

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

Creare un'identità gestita assegnata dall'utente

  1. Creare un'identità gestita assegnata dall'utente per il 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. Assegnare i ruoli necessari all'identità gestita.

    # 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
    

Creare un nuovo cluster AKS con chiavi gestite dal cliente

Creare un nuovo cluster AKS con crittografia KMS usando chiavi gestite dal cliente.

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

Abilitare le chiavi gestite dal cliente in un cluster esistente

Abilitare la crittografia KMS con chiavi gestite dal cliente su un cluster AKS esistente.

Annotazioni

Il cluster deve eseguire Kubernetes versione 1.33 o successiva.

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

Verificare la configurazione di KMS

Dopo aver abilitato la crittografia KMS, verificare la configurazione.

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

L'output include la configurazione di 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"
    }
}

Eseguire la migrazione tra le opzioni di gestione delle chiavi

È possibile eseguire la migrazione tra chiavi gestite dalla piattaforma e chiavi gestite dal cliente.

Eseguire la migrazione da chiavi gestite dalla piattaforma alle chiavi gestite dal cliente

Per eseguire la migrazione da chiavi gestite dalla piattaforma a chiavi gestite dal cliente, configurare prima l'insieme di credenziali delle chiavi, la chiave e l'identità gestita come descritto nella sezione Chiavi gestite dal cliente, quindi eseguire il comando di aggiornamento:

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

Eseguire la migrazione da chiavi gestite dal cliente a chiavi gestite dalla piattaforma

Per eseguire la migrazione dalle chiavi gestite dal cliente alle chiavi gestite dalla piattaforma:

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

Rotazione delle chiavi

Con la crittografia dei dati di KMS, la rotazione delle chiavi viene gestita in modo diverso a seconda dell'opzione di gestione delle chiavi:

  • Chiavi gestite dalla piattaforma: la rotazione delle chiavi è automatica. Non è necessaria alcuna azione.
  • Chiavi gestite dal cliente: quando si ruota la versione della chiave in Azure Key Vault, il controller del Servizio di gestione delle chiavi rileva periodicamente la rotazione (ogni 6 ore) e usa la nuova versione della chiave.

Annotazioni

A differenza dell'esperienza legacy del Servizio di gestione delle chiavi, con questa nuova implementazione non è necessario crittografare manualmente i segreti dopo la rotazione delle chiavi. La piattaforma gestisce automaticamente questa operazione.