Configura la encriptación de mensajes

De forma predeterminada, Pub/Sub encripta el contenido del cliente en reposo. Pub/Sub controla la encriptación por ti sin que debas realizar ninguna acción adicional. Esta opción se denomina encriptación predeterminada de Google.

Si deseas controlar tus claves de encriptación, puedes usar las claves de encriptación administradas por el cliente (CMEK) en Cloud KMS con servicios integrados en CMEK, incluido Pub/Sub. El uso de claves de Cloud KMS te permite controlar su nivel de protección, ubicación, programa de rotación, permisos de uso y acceso, y límites criptográficos. El uso de Cloud KMS también te permite hacer un seguimiento del uso de las claves, ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google posea y administre las claves de encriptación de claves (KEK) simétricas que protegen tus datos, tú las controlas y administras en Cloud KMS.

Después de configurar tus recursos con CMEK, la experiencia de acceso a tus recursos de Pub/Sub es similar a usar la encriptación predeterminada de Google. Para obtener más información sobre tus opciones de encriptación, consulta Claves de encriptación administradas por el cliente (CMEK).

CMEK con Autokey de Cloud KMS

Puedes crear CMEK de forma manual para proteger tus recursos de Pub/Sub o usar la clave automática de Cloud KMS. Con Autokey, los llaveros de claves y las claves se generan a pedido para admitir la creación de recursos en Pub/Sub. Los agentes de servicio que usan las claves para las operaciones de encriptación y desencriptación se crean si aún no existen y se les otorgan los roles de Identity and Access Management (IAM) necesarios. Para obtener más información, consulta Descripción general de las claves automáticas.

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 la CMEK puede generar costos adicionales según tus patrones de uso.

Todos los mensajes se encriptan en los siguientes estados y capas:

En la capa de aplicación, Pub/Sub encripta de forma individual los mensajes entrantes en cuanto se reciben. Esta implementación agrega las siguientes características:

Patrón de encriptación de sobre

Pub/Sub usa el patrón de encriptación de sobre con CMEK. De esta manera, Cloud KMS no encripta los mensajes. En cambio, Cloud KMS se usa para 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.

Región de la clave de Cloud KMS

Debido a que los recursos de Pub/Sub son globales, te recomendamos que uses claves globales de Cloud KMS para configurar temas habilitados para CMEK. El uso de una clave regional de Cloud KMS puede introducir dependencias innecesarias en vínculos de red entre regiones, según las ubicaciones de los publicadores y suscriptores de un tema.

Usa claves regionales de Cloud KMS solo en las siguientes situaciones:

En estas situaciones, todo el tráfico del tema se enruta a la misma región.

Configura la CMEK con Pub/Sub

Puedes configurar la CMEK de forma manual o con Autokey.

Antes de comenzar

Puedes configurar CMEK para Pub/Sub con la consola de Google Cloud o Google Cloud CLI.

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 claves ni los llaveros de claves.

Para obtener instrucciones sobre cómo realizar estas tareas, consulta Crea un llavero y Crea una clave.

Roles y permisos requeridos

Pub/Sub usa un Google Cloud agente de servicio para acceder a Cloud KMS. Pub/Sub mantiene de forma interna el agente de servicio para cada proyecto, y no es visible 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 requerido:

  • 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 Identity and Access Management, consulta Otorga roles en un recurso.

Configura un tema de forma manual con CMEK

Puedes configurar CMEK de forma manual para un tema con la consola de Google Cloud o gcloud CLI.

Console

Para crear un tema con CMEK, sigue estos pasos:

  1. En la consola de Google Cloud , ve a la página Temas de Pub/Sub.

    Ir a temas

  2. Haga clic en Crear tema.

  3. En el campo ID de tema, ingresa un ID para tu tema.

    Para obtener más información sobre cómo asignar nombres a los temas, consulta los lineamientos para asignar nombres.

  4. En Encriptación, haz clic en Clave de Cloud KMS.

  5. 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.

  6. Haz clic en Crear un tema.

gcloud

  1. En la consola de Google Cloud , activa Cloud Shell.

    Activa Cloud Shell

    En la parte inferior de la consola de Google Cloud , se inicia una sesión de Cloud Shell en la que se muestra una ventana de línea de comandos. Cloud Shell es un entorno de shell con Google Cloud CLI ya instalada y con valores ya establecidos para el proyecto actual. La sesión puede tardar unos segundos en inicializarse.

  2. 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:

Actualiza un tema de CMEK de forma manual

Tienes la flexibilidad de agregar, cambiar o quitar la CMEK vinculada 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, sin importar si era una CMEK o Google-owned and Google-managed encryption key. Cambiar la CMEK de un tema no vuelve a encriptar los mensajes publicados anteriormente. Estos mensajes permanecen protegidos con la clave con la que se encriptaron originalmente, por lo que los datos de los mensajes dentro de un tema aún pueden depender de la clave anterior durante un máximo de 31 días, según la duración de retención de mensajes especificada en el tema o en cualquiera de sus suscripciones.

Pub/Sub tiene un mecanismo de almacenamiento en caché para las claves que dura aproximadamente 30 minutos. Es posible que Pub/Sub tarde hasta este período en reconocer y comenzar a usar una clave nueva que se cambió manualmente en la configuración del tema.

Rotación de claves de Cloud KMS en Pub/Sub

Los cambios en la configuración de las claves, como la rotación de claves en Cloud KMS, no activan directamente la creación de claves de encriptación de datos en Pub/Sub. Es posible que Pub/Sub tarde hasta 12 horas en comenzar a usar las nuevas versiones de claves para encriptar los datos de los mensajes.

Al igual que con los cambios de configuración manuales realizados en la configuración de encriptación de Pub/Sub, estos cambios no se aplican de forma retroactiva a los mensajes que se publicaron en el pasado. Los mensajes existentes siguen protegidos con versiones anteriores de la clave criptográfica. Estos mensajes permanecen protegidos con la clave con la que se encriptaron originalmente, por lo que los datos de los mensajes dentro de un tema aún pueden depender de la versión de clave anterior durante un máximo de 31 días, según la duración de retención de mensajes especificada en el tema o en cualquiera de sus suscripciones.

Configura un tema con Autokey de Cloud KMS

Para obtener más información sobre el uso de Autokey de Cloud KMS con Pub/Sub, consulta Cloud KMS con Autokey.

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
Dada una estructura de precios en la que las operaciones criptográficas cuestan USD 0.03 por cada 10,000 operaciones, el uso anterior costaría aproximadamente USD 0.07. Consulta los precios de Cloud KMS para obtener la información de precios más actualizada.

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.

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 inusuales

  • Usar 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:

Aunque ninguna de las dos operaciones confirma 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 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 poco probable que las interrupciones intermitentes de menos de un minuto de Cloud KMS 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.