Adición del cifrado de KMS etcd a un clúster de Azure Kubernetes Service (AKS) (versión preliminar)

En este artículo se muestra cómo habilitar el cifrado en reposo para los datos de Kubernetes en etcd mediante Azure Key Vault y el complemento Servicio de administración de claves (KMS). El complemento KMS le permite:

  • Usar una clave en Key Vault para el cifrado etcd
  • Traer sus propias claves
  • Proporcionar cifrado en reposo para los secretos almacenados en etcd

Para obtener más información sobre el uso del complemento KMS, consulte Cifrado de datos secretos en reposo.

Importante

Las características en versión preliminar de AKS están disponibles como opción de participación y 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 la garantía limitada. Las versiones preliminares de AKS reciben cobertura parcial del soporte 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:

Antes de empezar

Instalación de la CLI de Azure aks-preview

También se necesita la versión 0.5.58 o posterior de la extensión aks-preview de la CLI de Azure. Instale la extensión de la CLI de Azure aks-preview mediante el comando az extension add. También puede instalar las actualizaciones disponibles mediante el comando az extension update.

# Install the aks-preview extension
az extension add --name aks-preview
# Update the extension to make sure you have the latest version installed
az extension update --name aks-preview

Registro de la característica en vista previa (GB) AzureKeyVaultKmsPreview

Para usar la característica, también debe habilitar la marca de característica AzureKeyVaultKmsPreview en la suscripción.

Registre la marca de la característica AzureKeyVaultKmsPreview con el comando AzureKeyVaultKmsPreview, como se muestra en el siguiente ejemplo:

az feature register --namespace "Microsoft.ContainerService" --name "AzureKeyVaultKmsPreview"

Tarda unos minutos en que el estado muestre Registrado. Puede comprobar el estado de registro con el comando az feature list:

az feature list -o table --query "[?contains(name, 'Microsoft.ContainerService/AzureKeyVaultKmsPreview')].{Name:name,State:properties.state}"

Cuando haya terminado, actualice el registro del proveedor de recursos Microsoft.ContainerService con el comando az provider register:

az provider register --namespace Microsoft.ContainerService

Limitaciones

Las siguientes limitaciones se aplican al integrar el cifrado KMS etcd con AKS:

  • Deshabilitación de la característica de cifrado de KMS etcd.
  • Cambio del identificador de clave, incluidos el nombre y la versión de la clave.
  • Eliminación de la clave, la instancia de Key Vault o la identidad asociada.
  • El cifrado KMS etcd no funciona con la identidad administrada asignada por el sistema. Es necesario establecer la directiva de acceso del almacén de claves antes de habilitar la característica. Además, la identidad administrada asignada por el sistema no estará disponible hasta la creación del clúster, por lo que se creará una dependencia de ciclo.
  • Uso de más de 2000 secretos en un clúster.
  • Traiga su propia (BYO) instancia de Azure Key Vault de otro inquilino.

Creación de una instancia de KeyVault y una clave

Advertencia

No se admite la eliminación de la clave o de la instancia de Azure Key Vault y esto hará que el clúster se vuelva inestable.

Si necesita recuperar la instancia de Key Vault o la clave, consulte la documentación de administración de recuperación de Azure Key Vault con eliminación temporal y protección de purga.

Use az keyvault create para crear una instancia de KeyVault.

az keyvault create --name MyKeyVault --resource-group MyResourceGroup

Use az keyvault key create para crear una clave.

az keyvault key create --name MyKeyName --vault-name MyKeyVault

Use az keyvault key show para exportar el identificador de clave.

export KEY_ID=$(az keyvault key show --name MyKeyName --vault-name MyKeyVault --query 'key.kid' -o tsv)
echo $KEY_ID

En el ejemplo anterior se almacena el identificador de clave en KEY_ID.

Crear una identidad administrada asignada por el usuario

Use az identity create para crear una identidad administrada asignada por el usuario.

az identity create --name MyIdentity --resource-group MyResourceGroup

Use az identity show para obtener el identificador del objeto de identidad.

IDENTITY_OBJECT_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'principalId' -o tsv)
echo $IDENTITY_OBJECT_ID

En el ejemplo anterior se almacena el valor del identificador del objeto de identidad en IDENTITY_OBJECT_ID.

Use az identity show para obtener el identificador del recurso de identidad.

IDENTITY_RESOURCE_ID=$(az identity show --name MyIdentity --resource-group MyResourceGroup --query 'id' -o tsv)
echo $IDENTITY_RESOURCE_ID

En el ejemplo anterior se almacena el valor del identificador del recurso de identidad en IDENTITY_RESOURCE_ID.

Asignación de permisos (descifrado y cifrado) para acceder al almacén de claves

Use az keyvault set-policy para crear una directiva de Azure KeyVault.

az keyvault set-policy -n MyKeyVault --key-permissions decrypt encrypt --object-id $IDENTITY_OBJECT_ID

Creación de un clúster de AKS con cifrado de KMS etcd habilitado

Cree un clúster de AKS mediante el comando az aks create con los parámetros --enable-azure-keyvault-kms y --azure-keyvault-kms-key-id para habilitar el cifrado KMS etcd.

az aks create --name myAKSCluster --resource-group MyResourceGroup --assign-identity $IDENTITY_RESOURCE_ID --enable-azure-keyvault-kms --azure-keyvault-kms-key-id $KEY_ID

Actualización de un clúster de AKS existente para habilitar el cifrado de KMS etcd

Use az aks update con los parámetros --enable-azure-keyvault-kms y --azure-keyvault-kms-key-id para habilitar el cifrado de KMS etcd en un clúster existente.

az aks update --name myAKSCluster --resource-group MyResourceGroup --enable-azure-keyvault-kms --azure-keyvault-kms-key-id $KEY_ID

Use el comando siguiente para actualizar todos los secretos. De lo contrario, los secretos antiguos no se cifran.

kubectl get secrets --all-namespaces -o json | kubectl replace -f -