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.
Importante
En este artículo se describe la experiencia heredada de KMS para AKS. En el caso de los nuevos clústeres que ejecutan la versión 1.33 o posterior de Kubernetes, se recomienda usar la nueva experiencia de cifrado de datos de KMS , que ofrece claves administradas por la plataforma, claves administradas por el cliente con rotación automática de claves y una experiencia de configuración simplificada.
Para obtener información conceptual sobre las opciones de cifrado de datos, consulte Conceptos de cifrado de datos en reposo para AKS.
En este artículo se muestra cómo activar el cifrado en reposo para un almacén de claves público o privado mediante Azure Key Vault y el complemento servicio de administración de claves (KMS) en AKS. Puede usar el complemento de KMS para:
- Usar una clave de un almacén de claves para el cifrado de etcd.
- Traer sus propias claves.
- Proporcione cifrado en reposo para los secretos almacenados en etcd.
- Rotar las claves de un almacén de claves.
Para obtener más información sobre el uso de KMS, consulte Uso de un proveedor de KMS para el cifrado de datos.
Requisitos previos
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
- Versión 2.39.0 o posterior de la CLI de Azure. Busque su versión usando el comando
az --version. Si necesita instalarla o actualizarla, consulte Instalación de la CLI de Azure.
Advertencia
A partir del 15 de septiembre de 2024, Konnectivity ya no es compatible con bóvedas de claves privadas para nuevas suscripciones o para suscripciones que no hayan usado previamente esta configuración. En el caso de las suscripciones que usan actualmente esta configuración o la usan en los últimos 60 días, el soporte técnico continúa hasta que la versión 1.30 de AKS alcanza el final de la vida útil para el soporte técnico de la comunidad.
KMS admite Konnectivity o Integración con red virtual de servidor API para almacenes de claves públicas.
KMS admite la Integración con red virtual de servidor de API (versión preliminar) para almacenes de claves públicos y privados.
Puede usar kubectl get pods -n kube-system para comprobar los resultados y mostrar que se está ejecutando un konnectivity-agent pod. Si se está ejecutando un pod, el clúster de AKS usa Konnectivity. Al usar la integración de red virtual del servidor de API, puede ejecutar el comando az aks show --resource-group <resource-group-name> --name <cluster-name> para comprobar que la configuración enableVnetIntegration esté establecida en true.
Limitaciones
Las siguientes limitaciones se aplican al integrar el cifrado KMS etcd con AKS:
- No se admite la eliminación de la clave, el almacén de claves o la identidad asociada.
- El cifrado etcd de KMS no funciona con la identidad administrada asignada por el sistema. La directiva de acceso del almacén de claves se debe establecer antes de activar la característica. La identidad administrada asignada por el sistema no está disponible hasta después de crear el clúster. Tenga en cuenta la dependencia del ciclo.
- Dado que el firewall bloquea el tráfico del complemento KMS a Key Vault, no se admiten dos escenarios. En primer lugar, Azure Key Vault no se puede configurar con la opción firewall Permitir el acceso público desde redes virtuales y direcciones IP específicas. En segundo lugar, Azure Key Vault no se puede configurar con Deshabilitar el acceso público a menos que la integración con red virtual del servidor de API esté habilitada.
- El número máximo de secretos admitidos por un clúster con KMS activado es de 2000. Sin embargo, es importante tener en cuenta que KMS v2 no está limitado por esta restricción y puede controlar un mayor número de secretos.
- No se admite la opción Bring your own (BYO) para Azure Key Vault desde otro inquilino.
- Con KMS activado, no se puede cambiar el modo del almacén de claves asociado (público frente a privado). Para actualizar el modo de un almacén de claves, primero debe desactivar KMS y, a continuación, volver a activarlo.
- Si un clúster tiene KMS activado y tiene un almacén de claves privado, debe usar el túnel de integración con red virtual del servidor de API. No se admite Konnectivity.
- El uso de la API de Virtual Machine Scale Sets para reducir los nodos del clúster a cero desasigna los nodos. A continuación, el clúster deja de funcionar y se vuelve irrecuperable.
- Después de desactivar KMS, no puede eliminar ni expirar las claves. Estos comportamientos harían que el servidor de API dejara de funcionar.
- Para un clúster privado con KMS habilitado y integración de red virtual que usa un almacén de claves privado, el grupo de seguridad de red (NSG) debe permitir el puerto TCP 443 desde el servidor de API a la dirección IP del punto de conexión privado del almacén de claves privado. Esta limitación debe tenerse en cuenta al utilizar otras reglas en el NSG de la subred de API o el NSG de la subred del clúster.
Creación de un almacén de claves y una clave para un almacén de claves público
En las secciones siguientes, se describe cómo activar KMS para un almacén de claves público. Puede usar un almacén de claves público con o sin control de acceso basado en roles de Azure (RBAC de Azure).
Advertencia
No se admite la eliminación de la clave o el almacén de claves, y esto provoca que los secretos del clúster sean irrecuperables.
Si necesita recuperar el almacén de claves o la clave, consulte Administración de la recuperación de Azure Key Vault con eliminación temporal y protección contra purga.
- Crear un Azure Key Vault y una clave con Azure RBAC
- Creación de un almacén de claves y una clave sin RBAC de Azure
Cree un almacén de claves con Azure RBAC mediante el comando [
az keyvault create][azure-keyvault-create]. Este comando de ejemplo también exporta el identificador de recurso del almacén de claves a una variable de entorno.export KEY_VAULT_RESOURCE_ID=$(az keyvault create --name $KEY_VAULT --resource-group $RESOURCE_GROUP --enable-rbac-authorization true --query id -o tsv)Asigne a usted mismo permisos para crear una clave mediante el comando [
az role assignment create][azure-role-assignment-create]. En este ejemplo se asigna el rol De agente criptográfico de Key Vault al usuario que ha iniciado sesión.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 mediante el comando [
az keyvault key create][azure-keyvault-key-create].az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULTObtenga el identificador de clave y guárdelo como una variable de entorno mediante el comando [
az keyvault key show][azure-keyvault-key-show].export KEY_ID=$(az keyvault key show --name $KEY_NAME --vault-name $KEY_VAULT --query 'key.kid' -o tsv) echo $KEY_ID
Crear una identidad administrada asignada por el usuario para una bóveda de claves públicas
Cree una identidad administrada asignada por el usuario mediante el comando [
az identity create][azure-identity-create].az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUPObtenga el identificador del objeto de identidad y guárdelo como una variable de entorno mediante el comando [
az identity show][azure-identity-show].export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv) echo $IDENTITY_OBJECT_IDObtenga el identificador de recurso de identidad y guárdelo como una variable de entorno mediante el comando [
az identity show][azure-identity-show].export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv) echo $IDENTITY_RESOURCE_ID
Asignación de permisos para descifrar y cifrar un almacén de claves público
En las secciones siguientes se describe cómo asignar permisos de descifrado y cifrado para un almacén de claves público con o sin RBAC de Azure.
- Asignación de permisos para un almacén de claves pública con RBAC de Azure
- Asignación de permisos para un almacén de claves pública sin RBAC de Azure
Asigne el rol Usuario criptográfico de Key Vault para conceder permisos de descifrado y cifrado mediante el comando [
az role assignment create][azure-role-assignment-create].az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
Habilitación de KMS para un almacén de claves público en un clúster de AKS
En las siguientes secciones se describe cómo activar KMS para una bóveda de claves públicas en un clúster de AKS nuevo o existente.
Crea un clúster de AKS con una bóveda de claves públicas y KMS
Cree un clúster de AKS con un Key Vault público y KMS usando el comando
az aks createcon los parámetros--enable-azure-keyvault-kms,--azure-keyvault-kms-key-vault-network-accessy--azure-keyvault-kms-key-id.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --assign-identity $IDENTITY_RESOURCE_ID \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-vault-network-access "Public" \ --azure-keyvault-kms-key-id $KEY_ID \ --generate-ssh-keys
Habilitar una bóveda de claves pública y KMS en un clúster existente de AKS
Habilite KMS en un almacén de claves público en un clúster existente mediante el comando
az aks updatecon los parámetros--enable-azure-keyvault-kms,--azure-keyvault-kms-key-vault-network-access, y--azure-keyvault-kms-key-id.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-vault-network-access "Public" \ --azure-keyvault-kms-key-id $KEY_IDActualice todos los secretos mediante el
kubectl get secretscomando para asegurarse de que los secretos creados anteriormente ya no están cifrados. Para clústeres más grandes, es posible que quiera subdividir los secretos por espacio de nombres o crear un script de actualización. Si se produce un error en el comando anterior para actualizar KMS, ejecute el siguiente comando para evitar un estado inesperado para el complemento KMS.kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Rotación de las claves existentes en un almacén de claves público
Después de cambiar el identificador de clave (incluido el cambio del nombre de la clave o la versión de la clave), puede rotar las claves existentes en el almacén de claves público.
Advertencia
Recuerde actualizar todos los secretos después de la rotación de claves. Si no actualiza todos los secretos, los secretos no son accesibles si las claves que se crearon anteriormente no existen o ya no funcionan.
KMS usa dos claves al mismo tiempo. Después de la primera rotación de claves, debe asegurarse de que las claves antiguas y nuevas son válidas (no expiradas) hasta la siguiente rotación de claves. Después de la segunda rotación de claves, la clave más antigua se puede quitar o expirar de forma segura.
Después de rotar la versión de la clave de KMS con el nuevo keyId, compruebe securityProfile.azureKeyVaultKms.keyId en el json del recurso de AKS. Asegúrese de que la nueva versión de clave está en uso.
Rote las claves existentes usando el comando
az aks updatecon los parámetros--enable-azure-keyvault-kms,--azure-keyvault-kms-key-vault-network-accessy--azure-keyvault-kms-key-id.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-vault-network-access "Public" \ --azure-keyvault-kms-key-id $NEW_KEY_IDActualice todos los secretos mediante el
kubectl get secretscomando para asegurarse de que los secretos creados anteriormente ya no están cifrados. Para clústeres más grandes, es posible que quiera subdividir los secretos por espacio de nombres o crear un script de actualización. Si se produce un error en el comando anterior para actualizar KMS, ejecute el siguiente comando para evitar un estado inesperado para el complemento KMS.kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Creación de un almacén de claves y una clave para un almacén de claves privado
Si activa KMS para un almacén de claves privado, AKS crea automáticamente un punto de conexión privado y un vínculo privado en el grupo de recursos del nodo. El almacén de claves tiene una conexión de punto de conexión privado con el clúster de AKS.
Advertencia
Tenga en cuenta la siguiente información al usar un almacén de claves privado:
- KMS solo admite la integración de la Red Virtual con un servidor API para el almacén de claves privadas.
- No se admite la creación o actualización de claves en un almacén de claves privado que no tenga un punto de conexión privado. Para obtener información sobre cómo administrar almacenes de claves privados, consulte Integración de un almacén de claves mediante Azure Private Link.
- No se admite la eliminación de la clave o el almacén de claves, y esto provoca que los secretos del clúster sean irrecuperables. Si necesita recuperar el almacén de claves o la clave, consulte Administración de la recuperación de Azure Key Vault con eliminación temporal y protección contra purga.
Cree un almacén de claves privado mediante el comando [
az keyvault create][azure-keyvault-create] con el--public-network-access Disabledparámetro .az keyvault create --name $KEY_VAULT --resource-group $RESOURCE_GROUP --public-network-access DisabledCree una clave mediante el comando [
az keyvault key create][azure-keyvault-key-create].az keyvault key create --name $KEY_NAME --vault-name $KEY_VAULT
Creación de una identidad administrada de usuario para una bóveda de claves privada
Cree una identidad administrada asignada por el usuario mediante el comando [
az identity create][azure-identity-create].az identity create --name $IDENTITY_NAME --resource-group $RESOURCE_GROUPObtenga el identificador del objeto de identidad y guárdelo como una variable de entorno mediante el comando [
az identity show][azure-identity-show].export IDENTITY_OBJECT_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'principalId' -o tsv) echo $IDENTITY_OBJECT_IDObtenga el identificador de recurso de identidad y guárdelo como una variable de entorno mediante el comando [
az identity show][azure-identity-show].export IDENTITY_RESOURCE_ID=$(az identity show --name $IDENTITY_NAME --resource-group $RESOURCE_GROUP --query 'id' -o tsv) echo $IDENTITY_RESOURCE_ID
Asignación de permisos para descifrar y cifrar un almacén de claves privado
En las secciones siguientes se describe cómo asignar permisos de descifrado y cifrado para un almacén de claves privado con o sin RBAC de Azure.
- Asignación de permisos para un almacén de claves privado con Azure RBAC
- Asignación de permisos para un almacén de claves privado sin RBAC de Azure
Asigne el rol Usuario criptográfico de Key Vault para conceder permisos de descifrado y cifrado mediante el comando [
az role assignment create][azure-role-assignment-create].az role assignment create --role "Key Vault Crypto User" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
Asignación de permisos para crear un vínculo privado
Para los almacenes de claves privados, se requiere el rol de Key Vault Contributor para crear un vínculo privado entre el almacén de claves privado y el clúster.
Para asignar la función de Colaborador de Key Vault, utilice el comando [
az role assignment create][azure-role-assignment-create].az role assignment create --role "Key Vault Contributor" --assignee-object-id $IDENTITY_OBJECT_ID --assignee-principal-type "ServicePrincipal" --scope $KEY_VAULT_RESOURCE_ID
Habilitar KMS para una bóveda de claves privada en un clúster AKS
En las secciones siguientes se describe cómo activar KMS para un almacén de claves privado en un clúster de AKS nuevo o existente.
Creación de un clúster de AKS con un almacén de claves privado y KMS
Cree un clúster de AKS con un almacén de claves privado y KMS mediante el comando
az aks createcon los parámetros--enable-azure-keyvault-kms,--azure-keyvault-kms-key-id,--azure-keyvault-kms-key-vault-network-access, y--azure-keyvault-kms-key-vault-resource-id.az aks create \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --assign-identity $IDENTITY_RESOURCE_ID \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-id $KEY_ID \ --azure-keyvault-kms-key-vault-network-access "Private" \ --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_ID \ --generate-ssh-keys
Actualización de un clúster de AKS existente para activar el cifrado de etcd de KMS para un almacén de claves privado
Active KMS en una bóveda de claves privada en un clúster existente mediante el comando
az aks updatecon los parámetros--enable-azure-keyvault-kms,--azure-keyvault-kms-key-id,--azure-keyvault-kms-key-vault-network-access, y--azure-keyvault-kms-key-vault-resource-id.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-id $KEY_ID \ --azure-keyvault-kms-key-vault-network-access "Private" \ --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_IDActualice todos los secretos mediante el
kubectl get secretscomando para asegurarse de que los secretos creados anteriormente ya no están cifrados. Para clústeres más grandes, es posible que quiera subdividir los secretos por espacio de nombres o crear un script de actualización. Si se produce un error en el comando anterior para actualizar KMS, ejecute el siguiente comando para evitar un estado inesperado para el complemento KMS.kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Rotación de las claves existentes en un almacén de claves privado
Después de cambiar el identificador de clave (incluido el cambio del nombre de la clave o la versión de la clave), puede rotar las claves existentes en el almacén de claves privado.
Advertencia
Recuerde actualizar todos los secretos después de la rotación de claves. Si no actualiza todos los secretos, los secretos no son accesibles si las claves que se crearon anteriormente no existen o ya no funcionan.
Después de rotar la clave, la clave anterior (key1) todavía está almacenada en caché y no se debe eliminar. Si desea eliminar la clave anterior (key1) de inmediato, debe rotar la clave dos veces. A continuación, key2 y key3 se almacenan en caché y key1 se puede eliminar sin afectar al clúster existente.
Después de rotar la versión de la clave de KMS con el nuevo keyId, compruebe securityProfile.azureKeyVaultKms.keyId en el json del recurso de AKS. Asegúrese de que la nueva versión de clave está en uso.
Gire las claves existentes en un almacén de claves privado usando el comando
az aks updatecon los parámetros--enable-azure-keyvault-kms,--azure-keyvault-kms-key-id,--azure-keyvault-kms-key-vault-network-accessy--azure-keyvault-kms-key-vault-resource-id.az aks update \ --name $CLUSTER_NAME \ --resource-group $RESOURCE_GROUP \ --enable-azure-keyvault-kms \ --azure-keyvault-kms-key-id $NEW_KEY_ID \ --azure-keyvault-kms-key-vault-network-access "Private" \ --azure-keyvault-kms-key-vault-resource-id $KEY_VAULT_RESOURCE_IDActualice todos los secretos mediante el
kubectl get secretscomando para asegurarse de que los secretos creados anteriormente ya no están cifrados. Para clústeres más grandes, es posible que quiera subdividir los secretos por espacio de nombres o crear un script de actualización. Si se produce un error en el comando anterior para actualizar KMS, ejecute el siguiente comando para evitar un estado inesperado para el complemento KMS.kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Deshabilitación de KMS en un clúster de AKS
Antes de desactivar KMS, compruebe que KMS está habilitado en el clúster mediante el comando [
az aks list][az-aks-list].az aks list --query "[].{Name:name, KmsEnabled:securityProfile.azureKeyVaultKms.enabled, KeyId:securityProfile.azureKeyVaultKms.keyId}" -o tableUna vez confirmado, puede deshabilitar KMS mediante el comando
az aks updatecon el parámetro--disable-azure-keyvault-kms.az aks update --name $CLUSTER_NAME --resource-group $RESOURCE_GROUP --disable-azure-keyvault-kmsActualice todos los secretos mediante el
kubectl get secretscomando para asegurarse de que los secretos creados anteriormente ya no están cifrados. Para clústeres más grandes, es posible que quiera subdividir los secretos por espacio de nombres o crear un script de actualización. Si se produce un error en el comando anterior para actualizar KMS, ejecute el siguiente comando para evitar un estado inesperado para el complemento KMS.kubectl get secrets --all-namespaces -o json | kubectl replace -f -
Pasos siguientes
Para obtener más información sobre el uso de KMS con AKS, consulte los siguientes artículos:
- Habilitación del cifrado de datos de KMS en AKS : la nueva experiencia de KMS con claves administradas por la plataforma y la rotación automática de claves
- Conceptos de cifrado de datos en reposo para AKS
- Actualización del modo de almacén de claves para un clúster de Azure Kubernetes Service (AKS) con cifrado etcd de KMS
- Migración a KMS v2 para el cifrado etcd en Azure Kubernetes Service (AKS)
- Observabilidad del cifrado etcd de KMS en Azure Kubernetes Service (AKS)