De forma predeterminada, Pub/Sub cifra el contenido del cliente en reposo. Pub/Sub se encarga del cifrado sin que tengas que hacer nada más. Esta opción se llama Cifrado predeterminado de Google.
Si quieres controlar tus claves de cifrado, puedes usar claves de cifrado gestionadas por el cliente (CMEKs) en Cloud KMS con servicios integrados con CMEKs, como Pub/Sub. Si usas claves de Cloud KMS, tendrás control sobre su nivel de protección, ubicación, calendario de rotación, permisos de uso y acceso, y límites criptográficos. Cloud KMS también te permite monitorizar el uso de las claves, ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google sea el propietario y el gestor de las claves de cifrado de claves (KEKs) simétricas que protegen tus datos, tú controlas y gestionas estas claves en Cloud KMS.
Una vez que hayas configurado tus recursos con claves de cifrado gestionadas por el cliente, la experiencia de acceso a tus recursos de Pub/Sub será similar a la de usar el cifrado predeterminado de Google. Para obtener más información sobre las opciones de encriptado, consulta Claves de encriptado gestionadas por el cliente (CMEK).
CMEK con Autokey de Cloud KMS
Puedes crear CMEKs manualmente para proteger tus recursos de Pub/Sub o usar Autokey de Cloud KMS. Con Autokey, los conjuntos de claves y las claves se generan a petición como parte de la creación de recursos en Pub/Sub. Los agentes de servicio que usan las claves para las operaciones de cifrado y descifrado se crean si aún no existen y se les asignan los roles de gestión de identidades y accesos (IAM) necesarios. Para obtener más información, consulta la descripción general de Autokey.
Cómo funciona CMEK con Pub/Sub
Cuando configuras Pub/Sub con CMEK, el servicio encripta 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).
Patrón de cifrado envolvente
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, Cloud KMS se usa 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 encapsulado. 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 DEK para cada tema aproximadamente cada seis horas.
Antes de que Pub/Sub publique mensajes en una suscripción, los encripta 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.
Configurar CMEK con Pub/Sub
Puedes configurar CMEK manualmente o mediante Autokey.
Antes de empezar
Puedes configurar CMEK para Pub/Sub mediante la Google 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 los artículos Crear un llavero de claves y Crear una clave.
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
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.cryptoKeyEncrypterDecrypter
Haz 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 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 Conceder roles en un recurso.
Configurar un tema manualmente con CMEK
Puedes configurar manualmente una CMEK para un tema mediante la consola de Google Cloud o la CLI de gcloud. Google Cloud
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 un tema de CMEK manualmente
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.
Configurar un tema con Autokey de Cloud KMS
Para obtener más información sobre cómo usar Autokey de Cloud KMS con Pub/Sub, consulta Cloud KMS con Autokey.
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 encripta 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_count
subscription/pull_request_count
subscription/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 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_age
para 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 las 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 Gestión de identidades y accesos. 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 operaciones confirma la revocación del acceso al instante, 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
. Se detendrá el envío de mensajes a los endpoints push. 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.