Compartir a través de


Habilitación del cifrado de datos de KMS en clústeres de Azure Kubernetes Service (AKS) (versión preliminar)

En este artículo se muestra cómo habilitar el cifrado de datos de Key Management Service (KMS) para secretos de Kubernetes en Azure Kubernetes Service (AKS). El cifrado de KMS cifra los secretos de Kubernetes almacenados en etcd mediante claves de Azure Key Vault.

AKS admite dos opciones de gestión de claves:

  • Claves administradas por la plataforma (PMK): AKS crea y administra automáticamente las claves de cifrado. Esta opción proporciona la configuración más sencilla con rotación automática de claves.
  • Claves administradas por el cliente (CMK): cree y administre sus propias claves de cifrado y Azure Key Vault. Esta opción proporciona control total sobre el ciclo de vida de las claves y cumple los requisitos de cumplimiento que exigen claves administradas por el cliente.

Para obtener más información sobre los conceptos de cifrado y las opciones de clave, consulte Conceptos de cifrado de datos en reposo para AKS.

Importante

Las características en versión preliminar de AKS están disponibles a elección del usuario y en régimen de autoservicio. Las versiones preliminares se proporcionan "tal cual" y "como están disponibles", y están excluidas de los Acuerdos de nivel de servicio y garantía limitada. Las versiones preliminares de AKS cuentan con soporte parcial por parte del servicio al cliente en la medida de lo posible. Por lo tanto, estas características no están diseñadas para su uso en producción. Para más información, consulte los siguientes artículos de soporte:

Prerrequisitos

  • Este artículo requiere la versión 2.73.0 o posterior de la CLI de Azure. Si usa Azure Cloud Shell, la versión más reciente ya está instalada allí.
  • Necesita la versión aks-preview o posterior de la extensión de la CLI de Azure.
    • Si aún no tienes la extensión aks-preview, instálala usando el comando az extension add.
      az extension add --name aks-preview
      
    • Si ya tienes la extensión aks-preview, actualízala para asegurarte de tener la última versión usando el comando az extension update.
      az extension update --name aks-preview
      
  • kubectl Herramienta de la CLI instalada.

Registro de la marca de característica

Para usar el cifrado de datos KMS con claves administradas por la plataforma, registra la bandera de función KMSPMKPreview en tu suscripción.

  1. Registre el flag de características mediante el comando az feature register.

    az feature register --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  2. Comprobar el estado del registro mediante el comando az feature show. Tarda unos minutos en que el estado muestre Registrado.

    az feature show --namespace Microsoft.ContainerService --name KMSPMKPreview
    
  3. Cuando el estado muestre Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el az provider register comando .

    az provider register --namespace Microsoft.ContainerService
    

Configurar variables de entorno

Configure variables de entorno para la implementación. Reemplace los valores del marcador de posición por los suyos propios.

# 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

Habilitación del cifrado de claves administradas por la plataforma

Con las claves administradas por la plataforma, AKS crea y administra automáticamente las claves de cifrado y Azure Key Vault. La plataforma controla automáticamente la rotación de claves.

Creación de un clúster de AKS con claves administradas por la plataforma

Cree un nuevo clúster de AKS con cifrado KMS mediante claves administradas por la plataforma.

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

Habilitación de claves administradas por la plataforma en un clúster existente

Habilite el cifrado de KMS con claves administradas por la plataforma en un clúster de AKS existente.

Nota:

El clúster debe ejecutar kubernetes versión 1.33 o posterior.

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

Habilitación del cifrado de claves administradas por el cliente con un almacén de claves privado

Para mejorar la seguridad, puede usar un almacén de claves privado que tenga deshabilitado el acceso a la red pública. AKS accede al Key Vault privado a través de la excepción de firewall para servicios de confianza. En esta sección se muestra cómo configurar claves administradas por el cliente con un almacén de claves privado.

Creación de un almacén de claves y una clave con acceso a servicios de confianza

Nota:

Esta sección ilustra cómo crear un Key Vault con acceso a la red pública inicialmente, y luego habilitar el firewall con bypass para servicios de confianza. Este enfoque es solo para fines ilustrativos. En entornos de producción, deberías crear y administrar tu Key Vault como privado desde el inicio. Para obtener instrucciones sobre cómo administrar almacenes de claves privados, consulte Seguridad de red de Azure Key Vault.

  1. Cree un almacén de claves con Azure RBAC habilitado.

    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. Asígnese el rol De agente criptográfico de Key Vault para crear una clave.

    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. Cree una clave en el almacén de claves.

    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. Habilita el firewall de Key Vault con bypass para servicios de confianza.

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

    El --default-action Deny parámetro bloquea el acceso a la red pública y el --bypass AzureServices parámetro permite que los servicios de Azure de confianza (incluido AKS) accedan al almacén de claves.

Creación de una identidad administrada asignada por el usuario

  1. Cree una identidad administrada asignada por el usuario para el clúster.

    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. Asigne los roles necesarios a la identidad administrada.

    # 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
    

Creación de un clúster de AKS con claves administradas por el cliente (privada)

Cree un nuevo clúster de AKS con cifrado de KMS mediante claves administradas por el cliente con un almacén de claves privado.

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

Habilitación de claves administradas por el cliente en un clúster existente (privado)

Habilite el cifrado de KMS con claves administradas por el cliente mediante un almacén de claves privado en un clúster de AKS existente.

Nota:

El clúster debe ejecutar kubernetes versión 1.33 o posterior.

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

Habilitación del cifrado de claves administradas por el cliente con un almacén de claves pública

Con las claves administradas por el cliente, puede crear y administrar sus propias claves de cifrado y Azure Key Vault. En esta sección se muestra cómo configurar claves administradas por el cliente con un almacén de claves pública.

Creación de una instancia de Key Vault y una clave

  1. Cree un almacén de claves con Azure RBAC habilitado.

    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. Asígnese el rol De agente criptográfico de Key Vault para crear una clave.

    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. Cree una clave en el almacén de claves.

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

Creación de una identidad administrada asignada por el usuario

  1. Cree una identidad administrada asignada por el usuario para el clúster.

    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. Asigne los roles necesarios a la identidad administrada.

    # 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
    

Creación de un clúster de AKS con claves administradas por el cliente

Cree un nuevo clúster de AKS con cifrado de KMS mediante claves administradas por el 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

Habilitación de claves administradas por el cliente en un clúster existente

Habilite el cifrado de KMS con claves administradas por el cliente en un clúster de AKS existente.

Nota:

El clúster debe ejecutar kubernetes versión 1.33 o posterior.

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

Comprobación de la configuración de KMS

Después de habilitar el cifrado de KMS, compruebe la configuración.

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

La salida incluye la configuración de 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"
    }
}

Migración entre las opciones de administración de claves

Puede migrar entre claves administradas por la plataforma y claves administradas por el cliente.

Migración de claves administradas por la plataforma a claves administradas por el cliente

Para migrar de claves administradas por la plataforma a claves administradas por el cliente, configure primero el almacén de claves, la clave y la identidad administrada como se describe en la sección claves administradas por el cliente y, a continuación, ejecute el comando update:

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

Migración de claves administradas por el cliente a claves administradas por la plataforma

Para migrar de claves administradas por el cliente a claves administradas por la plataforma:

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

Rotación de claves

Con el cifrado de datos de KMS, la rotación de claves se controla de forma diferente en función de la opción de administración de claves:

  • Claves administradas por la plataforma: la rotación de claves es automática. No se requiere ninguna acción.
  • Claves administradas por el cliente: al rotar la versión de la clave en Azure Key Vault, el controlador de KMS detecta la rotación periódicamente (cada 6 horas) y usa la nueva versión de clave.

Nota:

A diferencia de la experiencia heredada de KMS, con esta nueva implementación no es necesario volver a cifrar manualmente los secretos después de la rotación de claves. La plataforma controla esto automáticamente.