En esta página, se describe cómo configurar claves de encriptación administradas por el cliente (CMEK) para un clúster de Google Cloud Managed Service para Apache Kafka.
Descripción general de la encriptación de mensajes
De forma predeterminada, Managed Service para Apache Kafka encripta los mensajes en reposo con Google-owned and Google-managed encryption keys. No se requiere ninguna configuración adicional.
Si necesitas más control sobre las claves de encriptación que se usan para proteger los datos en reposo de Managed Service para Apache Kafka, puedes establecer una CMEK cuando crees tu clúster. Las CMEK son claves de encriptación que te pertenecen. Se administran y almacenan en Cloud Key Management Service (Cloud KMS). Cuando configuras un clúster con una CMEK, el servicio usa automáticamente esa clave para encriptar todos los datos en reposo del clúster. El uso de una CMEK puede generar costos adicionales, según tus patrones de uso.
Una CMEK asociada a un clúster de Managed Service para Apache Kafka es una clave de encriptación de claves (KEK). La KEK se usa para encriptar una clave de encriptación de datos (DEK). Luego, la DEK se usa para leer y escribir datos en reposo en los discos persistentes conectados a los intermediarios y los datos en el almacenamiento por niveles en Cloud Storage.
Debido a que los recursos de Managed Service para Apache Kafka son regionales, te recomendamos que crees CMEK en la misma región que el clúster de Kafka.
Roles y permisos requeridos
La cuenta de servicio de Kafka administrado debe tener permiso para encriptar y desencriptar datos con una CMEK.
Otorga a la cuenta de servicio el rol de encriptador/desencriptador de claves criptográficas de Cloud KMS (roles/cloudkms.cryptoKeyEncrypterDecrypter) en la clave de Cloud KMS:
gcloud kms keys add-iam-policy-binding KEY \
--keyring=KEY_RING \
--location=LOCATION \
--member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \
--role=roles/cloudkms.cryptoKeyEncrypterDecrypter
Reemplaza lo siguiente:
KEY: El nombre de la clave.
KEY_RING: Es el nombre del llavero de claves en el que se encuentra la clave.
LOCATION: Es la ubicación de Cloud KMS del llavero de claves.
PROJECT_NUMBER: Es el número del proyecto deGoogle Cloud que contiene el clúster de Managed Service para Apache Kafka.
Para obtener más información sobre cómo otorgar roles en una clave de Cloud KMS, consulta Cómo otorgar roles en un recurso.
Rotar claves
No puedes cambiar la clave asociada a un clúster. En cambio, puedes rotar una clave creando una versión nueva y configurándola como principal.
En el caso de los discos conectados a los intermediarios, la nueva KEK solo surte efecto después de que se reinicia un intermediario. Puedes forzar un reinicio progresivo de los intermediarios actualizando la configuración de capacidad de un clúster. Por ejemplo, puedes cambiar la cantidad de RAM del clúster.
Todos los archivos de segmentos de partición nuevos se escriben en el almacenamiento por niveles con la nueva versión de clave primaria. Es posible que haya una demora de varios minutos después de que se elija una nueva versión de la clave primaria.
Registros de auditoría
Cloud KMS produce registros de auditoría cuando Managed Service para Apache Kafka habilita, inhabilita o usa las claves para encriptar y desencriptar mensajes. Esto es útil para depurar problemas relacionados con la disponibilidad de la publicación o la entrega.
Los IDs de las claves de Cloud KMS se adjuntan a los registros de auditoría de los recursos del clúster de Managed Service para Apache Kafka. Managed Service para Apache Kafka no incluye ninguna otra información relacionada con Cloud KMS en los registros de auditoría.
Inhabilita y vuelve a habilitar la CMEK
Existen dos formas de inhabilitar la CMEK. Elige uno de los siguientes métodos:
Inhabilita la clave de Cloud KMS que asociaste al clúster. Este enfoque afecta a todos los recursos de Cloud asociados con esa clave.
Revoca el rol de encriptador/desencriptador de CryptoKey del agente de servicio de Managed Service para Apache Kafka (
service-${PROJECT_NUMBER}@gcp-sa-managedkafka.iam.gserviceaccount.com) con Identity and Access Management (IAM). Este enfoque afecta a todos los clústeres de Managed Service para Apache Kafka del proyecto y a los mensajes encriptados con CMEK.
Aunque ninguna de las dos operaciones puede causar la revocación de acceso instantánea, los cambios en IAM se suelen propagar más rápido.
Para obtener más información, consulta Coherencia de recursos de Cloud KMS y Propagación del cambio de acceso.
Cuando Managed Service para Apache Kafka no puede acceder a una clave de Cloud KMS, la publicación y la entrega de mensajes fallan con errores. Para reanudar la entrega y publicación, restablece el acceso a la clave de Cloud KMS.
Una vez que Managed Service para Apache Kafka puede acceder a la clave de Cloud KMS, la publicación está disponible en un plazo de 12 horas y la entrega de mensajes se reanuda en un plazo de 2 horas.
Si bien es poco probable que las interrupciones intermitentes de Cloud KMS de menos de un minuto interrumpan significativamente la publicación y la entrega, la falta de disponibilidad prolongada de Cloud KMS tiene el mismo efecto que la revocación de claves.
Limitaciones
No puedes cambiar la clave asociada a un clúster. En cambio, puedes rotar la clave creando versiones nuevas.
Si inhabilitas una versión de clave no principal, los discos locales seguirán funcionando sin cambios. Cada agente descarga la nueva KEK cuando se reinicia. Sin embargo, Cloud Storage no puede acceder a los archivos de segmentos de temas que se encriptaron con la versión original, lo que podría imposibilitar el consumo de mensajes de estos archivos de segmentos. Es posible que no puedas consumir datos más antiguos.
Si inhabilitas la versión principal de una clave, los agentes no podrán escribir archivos de segmentos nuevos en el almacenamiento por niveles, lo que aumentará la utilización del disco local. Además, fallarán los reinicios del agente. Puedes reiniciar el clúster de forma proactiva o en cualquier momento en que se inicie una actualización del servicio.
Si quitas el acceso a una clave del agente de servicio de Managed Service para Apache Kafka, el comportamiento es similar a lo que sucede si inhabilitas tanto la clave primaria como las versiones de clave no principal.
Si borras una clave, se programará el cierre del clúster y no se podrá recuperar.
No puedes solicitar que se vuelvan a encriptar los datos almacenados en reposo. La CMEK se usa como KEK, pero la reencriptación requiere un cambio en las claves de encriptación de datos.
¿Qué sigue?
Para obtener más información sobre la encriptación de discos, consulta Información sobre la encriptación de discos.
Para obtener más información sobre la encriptación en Cloud Storage, consulta Claves de encriptación administradas por el cliente.