En este documento se explica cómo configurar claves de cifrado gestionadas por el cliente (CMEK) para Pub/Sub.
Pub/Sub cifra los mensajes conGoogle-owned and Google-managed encryption keys de forma predeterminada. No es necesario configurar nada más para usar Google-owned and Google-managed encryption keys.
Acerca de CMEK
Las CMEKs son claves de cifrado de tu propiedad que se gestionan y almacenan en Cloud Key Management Service (Cloud KMS). Si necesitas tener más control sobre las claves de cifrado que se usan para proteger los datos de Pub/Sub, puedes usar CMEKs. Algunas organizaciones también exigen el uso de CMEKs.
Las CMEKs te ofrecen un control total sobre tus claves de cifrado, lo que te permite gestionar su ciclo de vida, su rotación y sus políticas de acceso. Cuando configuras Pub/Sub con una CMEK, el servicio cifra automáticamente todos los datos con la clave especificada. El uso de Cloud KMS para CMEK puede conllevar costes adicionales en función de tus patrones de uso.
Todos los mensajes se cifran en los siguientes estados y capas:
-
- Capa de hardware
- Capa de infraestructura
- Capa de aplicación
En la capa de aplicación, Pub/Sub cifra individualmente los mensajes entrantes en cuanto se reciben. Esta implementación añade las siguientes funciones:
- Mantiene los mensajes cifrados en los enlaces internos del centro de datos
- Habilita las claves de cifrado gestionadas por el cliente (CMEK).
CMEK para Pub/Sub
Pub/Sub usa el patrón de cifrado de envolvente con CMEK. Con este método, los mensajes no se cifran con Cloud KMS. En su lugar, se usa Cloud KMS para cifrar las claves de cifrado de datos (DEKs) creadas por Pub/Sub para cada tema. Pub/Sub solo almacena estas DEKs en formato cifrado o envuelto. Antes de almacenar una DEK, el servicio envía la DEK a Cloud KMS para que se cifre con la clave de cifrado de claves (KEK) especificada en el tema. Se genera una nueva DEK para cada tema aproximadamente cada seis horas.
Antes de que Pub/Sub publique mensajes en una suscripción, los cifra con la DEK más reciente que se haya generado para el tema. Pub/Sub descifra los mensajes poco antes de entregarlos a los suscriptores.
Antes de empezar
Puedes configurar CMEK para Pub/Sub mediante laGoogle Cloud consola o la CLI de Google Cloud.
Completa las siguientes tareas:
Habilita la API Cloud KMS.
Crea un conjunto de claves y una clave en Cloud KMS. No se pueden eliminar las claves ni los llaveros de claves.
Para obtener instrucciones sobre cómo llevar a cabo estas tareas, consulta la guía de inicio rápido de Cloud KMS.
Como los recursos de Pub/Sub son globales, te recomendamos que uses claves de Cloud KMS globales para configurar temas con CMEK habilitadas. En función de las ubicaciones de los editores y suscriptores de un tema, el uso de una clave regional de Cloud KMS podría introducir dependencias innecesarias en enlaces de red entre regiones.
Roles y permisos necesarios para configurar CMEK
Pub/Sub usa un Google Cloud agente de servicio para acceder a Cloud KMS. Pub/Sub mantiene internamente el agente de servicio de cada proyecto, que no se muestra de forma predeterminada en la página Cuentas de servicio de la consola de Google Cloud .
El agente de servicio de Pub/Sub tiene el formato service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com.
Pub/Sub requiere permisos específicos para cifrar y descifrar datos con CMEK.
Sigue estos pasos para configurar el acceso necesario:
Asigna al agente de servicio de Pub/Sub el rol Encargado del cifrado y descifrado de claves criptográficas de Cloud KMS (
roles/cloudkms.cryptoKeyEncrypterDecrypter).gcloud kms keys add-iam-policy-binding CLOUD_KMS_KEY_NAME \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypterHaz los cambios siguientes:
CLOUD_KMS_KEY_NAME: el nombre de la clave de Cloud KMS.
La clave tiene el formato
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.Por ejemplo,
projects/test-project/locations/us-central1/keyRings/test-keyring/cryptoKeys/test-key.PROJECT_NUMBER: número de proyecto del proyecto de Pub/Sub.
Para obtener más información sobre cómo conceder roles de gestión de identidades y accesos, consulta el artículo sobre cómo conceder roles en un recurso.
Configurar un tema con CMEK
Puedes configurar CMEK para un tema mediante la consola de Google Cloud o la CLI de gcloud.
Consola
Para crear un tema con CMEK, sigue estos pasos:
En la Google Cloud consola, ve a la página Temas de Pub/Sub.
Haz clic en Crear tema.
En el campo ID de tema, introduce un ID para el tema.
Para obtener más información sobre cómo poner nombre a los temas, consulta las directrices de nomenclatura.
En Encriptado, haz clic en Clave de Cloud KMS.
Selecciona el tipo de clave. Si no ves el menú desplegable Seleccionar una clave gestionada por el cliente, comprueba que hayas habilitado la API Cloud KMS en el proyecto.
Haz clic en Crear tema.
gcloud
-
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.
-
Para crear un tema con CMEK, ejecuta el comando
gcloud pubsub topics create:gcloud pubsub topics create TOPIC_ID --topic-encryption-key=ENCRYPTION_KEY
Haz los cambios siguientes:
-
TOPIC_ID: el ID o el nombre del tema.
Para obtener más información sobre cómo asignar un nombre a un tema, una suscripción, un esquema o una instantánea, consulta las directrices para asignar un nombre a un tema, una suscripción, un esquema o una instantánea.
-
ENCRYPTION_KEY: ID de la CMEK que se va a usar en el tema.
El formato es
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY.
-
Actualizar la CMEK de un tema
Puedes cambiar la clave CMEK vinculada a un tema de Pub/Sub. Puedes usar la CLI de gcloud para actualizar la CMEK. Sin embargo, este cambio no se aplica de forma retroactiva.
Los mensajes publicados en el tema antes de que cambie la clave seguirán cifrados con la clave original. Si se ha creado un tema sin una CMEK, puedes añadir una más adelante. Los mensajes seguirán protegidos con la configuración predeterminadaGoogle-owned and Google-managed encryption keys. Si cambias la CMEK de un tema, no se volverán a cifrar los mensajes publicados anteriormente. Estos mensajes seguirán protegidos con la clave con la que se cifraron originalmente.
Pub/Sub tiene un mecanismo de almacenamiento en caché para las claves que dura aproximadamente 5 minutos. Pub/Sub puede tardar hasta ese tiempo en reconocer y empezar a usar la nueva versión de la clave.
Registros de auditoría
Cloud KMS genera registros de auditoría cuando Pub/Sub habilita, inhabilita o usa claves para encriptar y desencriptar mensajes. Esto es útil para depurar problemas con la disponibilidad de publicación o de entrega.
Las claves de Cloud KMS se adjuntan a los registros de auditoría de los recursos de temas de Pub/Sub. Pub/Sub no incluye ninguna otra información relacionada con Cloud KMS.
Precios y costes
En las siguientes solicitudes de Pub/Sub, el uso de CMEK conlleva cargos por el acceso al servicio Cloud KMS según los precios de Pub/Sub:
Cada seis horas, se cifra y se almacena una nueva DEK para cada tema que use CMEK.
La clave se usa para descifrar las DEKs cada seis minutos. El descifrado se realiza tres veces, una por cada zona de la región en la que se ejecuta el servicio Pub/Sub.
Por ejemplo, imagina un tema con lo siguiente:
Al menos una suscripción
Clientes editores y suscriptores de la misma región
El número de operaciones criptográficas de Cloud KMS se puede estimar de la siguiente manera:
1 key access for ENCRYPT * (30 days / month * 24 hours / day) / 6 hours + 3 key accesses for DECRYPT * (30 days / month * 24 hours / day * 60 minutes / hour ) / 6 minutes = 21,720 Cloud KMS key access events
En la práctica, las claves se pueden obtener con más o menos frecuencia en función de los patrones de acceso. Usa estos números solo como estimaciones.
Monitorización y solución de problemas
Los problemas con el acceso a las claves pueden tener los siguientes efectos:
Retrasos en la entrega de mensajes
Errores de publicación
Monitoriza los errores de publicación y de solicitud de extracción mediante las siguientes métricas, agrupadas por response_class y response_code:
topic/send_request_countsubscription/pull_request_countsubscription/streaming_pull_response_count
La respuesta de StreamingPull tiene una tasa de errores del 100 %. Esto indica que la emisión ha finalizado, no que las solicitudes
están fallando. Para monitorizar StreamingPull, busca el FAILED_PRECONDITION
código de respuesta.
La publicación y el envío de mensajes pueden fallar con errores FAILED_PRECONDITION por varios motivos.
La clave de Cloud KMS podría estar inhabilitada. Para obtener más información, consulta la sección sobre cómo inhabilitar y volver a habilitar claves de esta página.
Si usas claves gestionadas de forma externa a través de Cloud EKM, consulta la referencia de errores de Cloud EKM.
En el caso de las suscripciones push, no hay forma de detectar directamente los problemas de entrega específicos de CMEK. En su lugar:
Monitoriza el tamaño y la antigüedad del registro pendiente de una suscripción push mediante
subscription/num_unacked_messages.Monitoriza
subscription/oldest_unacked_message_agepara detectar picos inusuales.Usa los errores de publicación y los registros de auditoría de CMEK para detectar problemas.
Inhabilitar y volver a habilitar claves
Hay dos formas de evitar que Pub/Sub descifre los datos de tus mensajes:
Recomendación: Inhabilita la clave de Cloud KMS que has asociado al tema mediante Pub/Sub. Este enfoque solo afecta a los temas y suscripciones de Pub/Sub que estén asociados a esa clave específica.
Revoca el rol Encargado del encriptado y desencriptado de la clave criptográfica de Pub/Sub de la cuenta de servicio de Pub/Sub (
service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com) mediante IAM. Este enfoque afecta a todos los temas de Pub/Sub del proyecto y a las suscripciones que contienen mensajes cifrados con CMEK.
Aunque ninguna de las dos operaciones confirma la revocación instantánea del acceso, los cambios de IAM suelen propagarse más rápido. Para obtener más información, consulta Consistencia de los recursos de Cloud KMS y Propagación de cambios de acceso.
Cuando Pub/Sub no puede acceder a una clave de Cloud KMS, la publicación y el envío de mensajes con StreamingPull o extracción fallan y se producen errores FAILED_PRECONDITION. La entrega de mensajes a los endpoints push se detendrá. Para reanudar la entrega y la publicación, restaura el acceso a la clave de Cloud KMS.
Una vez que Pub/Sub pueda acceder a la clave de Cloud KMS, la publicación estará disponible en un plazo de 12 horas y la entrega de mensajes se reanudará en un plazo de 2 horas.
Aunque es poco probable que se produzcan interrupciones intermitentes de menos de un minuto en Cloud KMS que afecten significativamente a la publicación y la entrega, la falta de disponibilidad prolongada de Cloud KMS tiene el mismo efecto que la revocación de claves.