En este documento, se explica cómo configurar claves de encriptación administradas por el cliente (CMEK) para un clúster de Google Cloud Managed Service para Apache Kafka.
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 para usar Google-owned and Google-managed encryption keys.
Acerca de la CMEK
Las CMEK son claves de encriptación que te pertenecen y que se administran y almacenan en Cloud Key Management Service (Cloud KMS). Si necesitas más control sobre las claves de encriptación que se usan para proteger los datos en reposo de Managed Service for Apache Kafka, puedes usar CMEK.
Cuando configuras un clúster de Managed Service para Apache Kafka con una CMEK, el servicio encripta automáticamente todos los datos en reposo del clúster con la clave especificada. El uso de Cloud KMS para la 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 agentes y los datos en el almacenamiento por niveles en Cloud Storage.
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 en la documentación de Cloud Storage.
Rotar claves
Para rotar una clave, crea una versión de clave nueva y configúrala como principal para la clave.
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 elige una nueva versión de la clave primaria.
Configura el clúster de Managed Service para Apache Kafka para CMEK
Puedes configurar CMEK para un clúster de Managed Service para Apache Kafka con la consola deGoogle Cloud o Google Cloud CLI.
Antes de comenzar
Realiza las siguientes tareas:
Habilita la API de Cloud KMS.
Crea un llavero de claves y una clave en Cloud KMS. No se pueden borrar las llaves ni los llaveros de llaves. Como los recursos de Managed Service para Apache Kafka son regionales, te recomendamos que crees claves de CMEK en la misma región en la que se encuentra el clúster de Kafka.
Para obtener instrucciones sobre cómo realizar estas tareas, consulta la guía de inicio rápido de Cloud KMS.
Roles y permisos obligatorios para configurar la CMEK
Managed Service para Apache Kafka usa un Google Cloud agente de servicio para acceder a Cloud KMS. El agente de servicio para tu proyecto Google Cloudse crea automáticamente después de que creas tu primer clúster de Managed Service para Apache Kafka.
Managed Service para Apache Kafka mantiene de forma interna el agente de servicio para cada proyecto, y no se muestra en la página Cuentas de servicio de la consola de Google Cloud de forma predeterminada.
El agente de servicio de Managed Service para Apache Kafka tiene la forma service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com.
Managed Service para Apache Kafka requiere permisos específicos para encriptar y desencriptar datos con CMEK.
Completa los siguientes pasos para configurar el acceso requerido:
Opcional: Crea el agente de servicio de Managed Service para Apache Kafka de forma manual con el comando gcloud beta services identity create.
Si ya creaste un clúster en tu proyecto, el agente de servicio del servicio administrado para Apache Kafka ya se creó en tu proyecto y puedes omitir este paso.
gcloud beta services identity create \ --service=managedkafka.googleapis.com \ --project=PROJECT_IDReemplaza PROJECT_ID con el ID del proyecto.
Otorga al agente de servicio de Managed Service para Apache Kafka el rol de encriptador/desencriptador de claves de Cloud KMS (
roles/cloudkms.cryptoKeyEncrypterDecrypter).gcloud kms keys add-iam-policy-binding CLOUD_KMS_KEY_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-managedkafka.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypterReemplaza lo siguiente:
CLOUD_KMS_KEY_NAME: Es el nombre de la clave de Cloud KMS.
La clave tiene el formato
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.Un ejemplo es
projects/test-project/locations/us-central1/keyRings/test-keyring/cryptoKeys/test-key.PROJECT_NUMBER: Es el número del proyecto de Managed Service para Apache Kafka.
Para obtener más información sobre cómo otorgar roles de IAM, consulta Cómo otorgar roles en un recurso.
Crea un clúster con CMEK
Puedes usar la Google Cloud consola o gcloud CLI para agregar tus claves de encriptación cuando crees tu clúster de Kafka.
Enable the Apache Kafka for BigQuery, Compute Engine, Cloud DNS, and Cloud KMS APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM
role (roles/serviceusage.serviceUsageAdmin), which
contains the serviceusage.services.enable permission. Learn how to grant
roles.
Antes de crear un clúster, revisa la documentación de las propiedades del clúster.
Para crear un clúster con CMEK, sigue estos pasos:
Console
-
En la consola de Google Cloud , ve a la página Clústeres.
- Selecciona Crear.
Se abrirá la página Crear clúster de Kafka.
- En Nombre del clúster, ingresa una cadena.
Si necesitas más información para asignarle un nombre a un clúster, consulta los Lineamientos para asignarles nombres a los recursos de Servicio administrado para Apache Kafka.
- En Ubicación, ingresa una ubicación admitida.
Para obtener más información sobre las ubicaciones compatibles, consulta Ubicaciones compatibles con Managed Service para Apache Kafka.
- En Configuración de capacidad, ingresa valores para Memoria y CPU virtuales.
La proporción de CPU virtual a memoria debe estar entre 1:1 y 1:8.
Si deseas obtener más información para determinar el tamaño de un clúster de Managed Service para Apache Kafka, consulta cómo planificar el tamaño de tu clúster de Kafka.
- En Configuración de red, ingresa los siguientes detalles:
- Proyecto: Es el proyecto en el que se encuentra la subred. La subred debe estar ubicada en la misma región que el clúster, pero el proyecto puede ser diferente.
- Red: Es la red a la que está conectada la subred.
- Subred: Es el nombre de la subred.
- Ruta URI de la subred: Este campo se completa automáticamente. También puedes ingresar la ruta de acceso a la subred aquí. El nombre de la subred debe tener el siguiente formato:
projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_ID. - Haz clic en Listo.
- (Opcional) Haz clic en Agregar una subred conectada para agregar subredes adicionales.
Puedes agregar subredes adicionales, hasta un valor máximo de diez.
- En Encriptación, selecciona Clave de Cloud KMS.
- En Tipo de clave, selecciona Cloud KMS y, en Selecciona una clave administrada por el cliente, ingresa la CMEK que creaste.
- Haz clic en Crear.
gcloud
Ejecuta el comando
gcloud managed-kafka clusters create:gcloud managed-kafka clusters create CLUSTER_ID \ --location=LOCATION \ --cpu=CPU \ --memory=MEMORY \ --subnets=SUBNETS \ --encryption-key=CLOUD_KMS_KEY \
Reemplaza lo siguiente:
-
CLUSTER_ID: Es el ID o el nombre del clúster.
Si necesitas más información para asignarle un nombre a un clúster, consulta los Lineamientos para asignarles nombres a los recursos de Servicio administrado para Apache Kafka.
-
LOCATION: Es la ubicación del clúster.
Para obtener más información sobre las ubicaciones admitidas, consulta Ubicaciones admitidas del Servicio administrado para Apache Kafka.
-
CPU: Es la cantidad de CPU virtuales para el clúster. La proporción de CPU virtual a memoria debe estar entre 1:1 y 1:8.
Para obtener más información sobre cómo determinar el tamaño de un clúster de Managed Service para Apache Kafka, consulta cómo planificar el tamaño de tu clúster de Kafka.
-
MEMORY: Es la cantidad de memoria del clúster. Usa las unidades "MB", "MiB", "GB", "GiB", "TB" o "TiB". Por ejemplo, "10 GiB".
-
SUBNETS: Es la lista de subredes a las que se conectará. Usa comas para separar varios valores de subred.
El formato de la subred es
projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_ID. -
ENCRYPTION_KEY: Es el ID de la CMEK que se usará para el clúster.
El formato es
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Confirma la creación del clúster
Para confirmar que el clúster esté configurado para CMEK, ejecuta el comando gcloud managed-kafka clusters describe.
gcloud managed-kafka clusters describe CLUSTER_ID \
--location=LOCATION
El resultado incluye la CMEK configurada.
Registros de auditoría
Cloud KMS produce registros de auditoría cuando el Servicio administrado 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 publicación o 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 for Apache Kafka. Managed Service for 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 for 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 de 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 for Apache Kafka no puede acceder a una clave de Cloud KMS, la publicación y entrega de mensajes fallan con errores. Para reanudar la entrega y la publicación, restablece el acceso a la clave de Cloud KMS.
Una vez que la clave de Cloud KMS sea accesible para Managed Service para Apache Kafka, la publicación estará disponible en un período de 12 horas y la entrega de mensajes se reanudará en 2 horas.
Si bien es improbable que las interrupciones intermitentes de Cloud KMS de menos de un minuto interrumpan significativamente la publicación y la entrega, la falta de disponibilidad extendida de Cloud KMS tiene el mismo efecto que la revocación de la clave.
Limitaciones
La asociación entre una clave de Cloud KMS y un clúster de Managed Service for Apache Kafka es inmutable. 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. Esto significa que es posible que no puedas consumir datos anteriores.
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 cuando 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 las versiones de clave principal y 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.