Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
Use el entorno de Bash en Azure Cloud Shell. Para más información, consulte Introducción a Azure Cloud Shell.
Si prefieres ejecutar comandos de referencia CLI localmente, instala la CLI de Azure. Si estás utilizando Windows o macOS, considera ejecutar Azure CLI en un contenedor Docker. Para obtener más información, consulte Cómo ejecutar el Azure CLI en un contenedor de Docker.
Si estás utilizando una instalación local, inicia sesión en Azure CLI utilizando el comando az login. Siga los pasos que se muestran en el terminal para completar el proceso de autenticación. Para ver otras opciones de inicio de sesión, consulte Autenticación en Azure mediante la CLI de Azure.
En caso de que se le solicite, instale las extensiones de la CLI de Azure la primera vez que la use. Para obtener más información sobre las extensiones, consulte Uso y administración de extensiones con la CLI de Azure.
Ejecute az version para ver la versión y las bibliotecas dependientes que están instaladas. Para actualizar a la versión más reciente, ejecute az upgrade.
- 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-previewo posterior de la extensión de la CLI de Azure.- Si aún no tienes la extensión
aks-preview, instálala usando el comandoaz 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 comandoaz extension update.az extension update --name aks-preview
- Si aún no tienes la extensión
-
kubectlHerramienta 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.
Registre el flag de características mediante el comando
az feature register.az feature register --namespace Microsoft.ContainerService --name KMSPMKPreviewComprobar 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 KMSPMKPreviewCuando el estado muestre Registrado, actualice el registro del proveedor de recursos Microsoft.ContainerService mediante el
az provider registercomando .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.
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)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_IDCree 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|/[^/]*$||')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 AzureServicesEl
--default-action Denyparámetro bloquea el acceso a la red pública y el--bypass AzureServicespará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
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)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
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)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_IDCree 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
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)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.