En este documento, se explica cómo configurar las claves de encriptación administradas por el cliente (CMEK) para Pub/Sub.
Pub/Sub encripta los mensajes con claves que son propiedad de Google y están administradas por Google de forma predeterminada. No se requiere ninguna configuración adicional para usar las claves de encriptación administradas por Google.
Acerca de CMEK
Las CMEK son claves de encriptación que te pertenecen y 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 de Pub/Sub, puedes usar CMEK. Algunas organizaciones también exigen el uso de CMEK.
Las CMEK te brindan control total sobre tus claves de encriptación, lo que te permite administrar su ciclo de vida, rotación y políticas de acceso. Cuando configuras Pub/Sub con una CMEK, el servicio encripta automáticamente todos los datos con la clave especificada. El uso de Cloud KMS para las CMEK podría generar costos adicionales según tus patrones de uso.
Cada mensaje se encripta en las siguientes capas y estados:
En la capa de la aplicación, Pub/Sub encripta de forma individual los mensajes entrantes en cuanto se recibe el mensaje. Esta implementación agrega las siguientes características:
- Mantiene los mensajes encriptados en vínculos internos del centro de datos
- Habilita claves de encriptación administradas por el cliente (CMEK)
CMEK para Pub/Sub
Pub/Sub usa el patrón de encriptación de sobre con CMEK. De esta manera, Cloud KMS no encripta los mensajes. En cambio, se usa Cloud KMS a fin de encriptar las claves de encriptación de datos (DEK) que Pub/Sub crea para cada tema. Pub/Sub solo almacena estas DEK en formato encriptado o unido. Antes de almacenar una DEK, el servicio la envía a Cloud KMS para que se encripte con la clave de encriptación de claves (KEK) especificada en el tema. Se genera una DEK nueva para cada tema cada seis horas, aproximadamente.
Antes de que Pub/Sub publique mensajes en una suscripción, los encripta con la DEK más nueva que se generó para el tema. Pub/Sub desencripta los mensajes poco antes de entregarlos a los suscriptores.
Antes de comenzar
Puedes configurar CMEK para Pub/Sub con la console de Google Cloud o Google Cloud CLI.
Realice las siguientes tareas:
Habilita la API de Cloud KMS.
Crea un llavero de claves y una clave en Cloud KMS. Las llaves y los llaveros de claves no se pueden borrar.
Para obtener instrucciones sobre cómo realizar estas tareas, consulta la Guía de inicio rápido de Cloud KMS.
Debido a que los recursos de Pub/Sub son globales, te recomendamos que uses las claves globales de Cloud KMS a fin de configurar temas habilitados para CMEK. Según las ubicaciones de los publicadores y suscriptores de un tema, el uso de una clave regional de Cloud KMS podría generar dependencias innecesarias en los vínculos de red entre regiones.
Roles y permisos necesarios para configurar CMEK
Pub/Sub usa un agente de servicio de Google Cloud para acceder a Cloud KMS. Pub/Sub 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 Pub/Sub tiene el formato service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
.
Pub/Sub requiere permisos específicos para encriptar y desencriptar datos con CMEK.
Completa los siguientes pasos para configurar el acceso necesario:
Otorga al agente de servicio de Pub/Sub el rol de encriptador/desencriptador de CryptoKey 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
Reemplaza 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 Pub/Sub.
Para obtener más información sobre cómo otorgar roles de IAM, consulta Otorga roles en un recurso.
Configura un tema con CMEK
Puedes configurar CMEK para un tema con la consola de Google Cloud o gcloud CLI.
Console
Para crear un tema con CMEK, sigue estos pasos:
En la consola de Google Cloud, ve a la página Temas de Pub/Sub.
Haga clic en Crear tema.
En el campo ID de tema, ingresa un ID para tu tema.
Para obtener más información sobre cómo nombrar temas, consulta los lineamientos de nombres.
En Encriptación, haz clic en Clave de Cloud KMS.
Selecciona el tipo de clave. Si no ves el menú desplegable Selecciona una clave administrada por el cliente, asegúrate de haber habilitado la API de Cloud KMS para 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
Reemplaza lo siguiente:
-
TOPIC_ID: Es el ID o el nombre del tema.
Para obtener más información sobre cómo asignar un nombre a un tema, consulta Lineamientos para asignar un nombre a un tema, una suscripción, un esquema o una instantánea.
-
ENCRYPTION_KEY: Es el ID de la CMEK que se usará para el tema.
El formato es
projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/CRYPTO_KEY
.
-
Actualiza CMEK para un tema
Tienes la flexibilidad de cambiar el CMEK vinculado a un tema de Pub/Sub. Puedes usar gcloud CLI 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 permanecen encriptados con la clave original. Si se creó un tema sin una CMEK, puedes agregar una más adelante. Los mensajes existentes seguirán protegidos con la encriptación predeterminada administrada por Google. Cambiar el CMEK de un tema no vuelve a encriptar los mensajes publicados anteriormente. Estos mensajes siguen protegidos con la clave con la que se encriptaron originalmente.
Pub/Sub tiene un mecanismo de almacenamiento en caché para las claves que dura aproximadamente 5 minutos. Pub/Sub puede tardar hasta este tiempo en reconocer y comenzar a usar la nueva versión de la clave.
Registros de auditoría
Cloud KMS produce registros de auditoría cuando Pub/Sub usa las claves para encriptar o desencriptar mensajes, y cuando estas se habilitan o inhabilitan. Esto es útil para depurar problemas relacionados con la disponibilidad de publicación o entrega.
Las claves de Cloud KMS se adjuntan a los registros de auditoría de los recursos de tema de Pub/Sub. Pub/Sub no incluye ninguna otra información relacionada con Cloud KMS.
Precios y costos
Para las siguientes solicitudes de Pub/Sub, el uso de CMEK genera costos por acceso al servicio de Cloud KMS según los precios de Pub/Sub:
Para cada tema que usa CMEK, se encripta una DEK nueva y se almacena cada seis horas.
La clave se usa para desencriptar la DEK cada seis minutos. La desencriptación ocurre tres veces, una para cada zona de la región donde se ejecuta el servicio de Pub/Sub.
Por ejemplo, supongamos que un tema tiene lo siguiente:
Al menos una suscripción
Clientes publicadores y suscriptores en la misma región
La cantidad 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 mayor o menor frecuencia según los patrones de acceso. Ten en cuenta que estos números son solo estimaciones.
Supervisa y soluciona problemas
Los problemas con el acceso a la clave pueden provocar los siguientes efectos:
Demoras en la entrega del mensaje
Errores de publicación
Supervisa los errores de solicitud de extracción y publicación con 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 error del 100%. Esto es una indicación de que la transmisión finalizó, no de que las solicitudes estén fallando. Para supervisar StreamingPull, busca el código de respuesta FAILED_PRECONDITION
.
La publicación y la entrega de mensajes pueden fallar con errores FAILED_PRECONDITION
por varias razones.
La clave de Cloud KMS podría inhabilitarse. Para obtener más información, consulta Cómo inhabilitar y volver a habilitar claves en esta página.
Si usas claves administradas de forma externa a través de Cloud EKM, consulta la referencia de errores de Cloud EKM.
En las suscripciones de envío, no hay forma de detectar problemas de entrega específicos de CMEK directamente. En cambio, puedes hacer lo siguiente:
Supervisar el tamaño y la antigüedad de las tareas pendientes de una suscripción de envío mediante
subscription/num_unacked_messages
Supervisar
subscription/oldest_unacked_message_age
para detectar picos inusualesUsar los errores de publicación y los registros de auditoría de CMEK para detectar problemas
Inhabilita y vuelve a habilitar las claves
Hay dos maneras de evitar que Pub/Sub desencripte tus datos de mensajes:
Recomendado: Inhabilita la clave de Cloud KMS que asociaste al tema con Pub/Sub. Esta acción solo afecta a los temas y suscripciones de Pub/Sub asociados con esa clave específica.
Revoca la función Encriptador/Desencriptador de CryptoKey de Pub/Sub de la cuenta de servicio de Pub/Sub (
service-$PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com
) mediante IAM. Esta acción afecta a todos los temas de Pub/Sub del proyecto y las suscripciones que contienen mensajes encriptados con CMEK.
Aunque ninguna de las dos operaciones confirma 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 Pub/Sub no puede acceder a una clave de Cloud KMS, la publicación y entrega de mensajes con StreamingPull o la extracción fallan con errores FAILED_PRECONDITION
. Se detendrá la entrega de mensajes a los extremos de envío. 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 Pub/Sub, 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 menos de un minuto de Cloud KMS 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.