Pub/Sub encripta los mensajes con claves administradas por Google de forma predeterminada. No se requiere configuración y tampoco es necesario modificar la forma en que accedes al servicio. Cada mensaje se encripta en los estados y las capas siguientes:
En la capa de aplicación, Pub/Sub encripta los mensajes entrantes de forma individual 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 las claves de encriptación administradas por el cliente (CMEK)
Usa claves de encriptación administradas por el cliente
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.
Pub/Sub usa una cuenta de servicio de Google Cloud para acceder a Cloud KMS. Pub/Sub mantiene de forma interna la cuenta de servicio para cada proyecto, por lo que no estará visible en tu lista de cuentas de servicio. La cuenta de servicio tiene el formato service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com
. Para que la característica CMEK funcione, debes otorgar a esta cuenta la función de Encriptador/Desencriptador de CryptoKey de Cloud KMS en Identity and Acess Management.
Configura temas
Puedes configurar CMEK con Google Cloud Console o la herramienta de línea de comandos de gcloud. Para cumplir con los requisitos previos, debes haber hecho lo siguiente:
- Creado un llavero de claves y una clave regional o global en Cloud KMS. Las llaves y los llaveros de claves no se pueden borrar
- Habilitado la API de Cloud KMS
Consulta la Guía de inicio rápido a fin de obtener instrucciones para realizar estas tareas.
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.
Usa Cloud Console.
Puedes usar el cuadro de diálogo de creación de temas de Cloud Console para agregar tus claves de encriptación. Consulta la guía de inicio rápido de Cloud Console para obtener información sobre cómo acceder a ese cuadro de diálogo.
Cloud Console:
Simplifica la configuración de Cloud IAM y te garantiza que la cuenta de servicio de Pub/Sub tenga los permisos adecuados.
Te permite configurar la encriptación en el cuadro de diálogo de creación de temas.
Usa la línea de comandos
En este ejemplo, se ilustra cómo usar la herramienta de línea de comandos de gcloud para configurar CMEK en un tema:
# Grant the Pub/Sub service account the Cloud KMS CryptoKey # Encrypter/Decrypter role. This service account is different # from the service account you are using to authorize requests to GCP. gcloud projects add-iam-policy-binding ${PROJECT_ID} --member=\ "serviceAccount:service-${PROJECT_NUMBER}@gcp-sa-pubsub.iam.gserviceaccount.com" \ --role='roles/cloudkms.cryptoKeyEncrypterDecrypter' # Create a topic that uses customer-managed encryption, using the # --topic-encryption-key argument to specify the Cloud KMS key to use # for protecting message data. KEY_ID=projects/${PROJECT_ID}/locations/global/keyRings/my-key-ring/cryptoKeys/my-crypto-key alias pubsub="gcloud pubsub" pubsub topics create $TOPIC_NAME --topic-encryption-key=$KEY_ID # Confirm that the topic is configured for customer-managed encryption, # indicated by the presence of the kmsKeyName specified on the topic. pubsub topics describe $TOPIC_NAME
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 ) / 5 minutes = 26,000 Cloud KMS key access events.Dada una estructura de precios en la que las operaciones criptográficas cuestan $0.03 cada 10,000 operaciones, el uso antes mencionado costaría alrededor de $0.08. Consulta Precios de Cloud KMS para obtener la información de precios más reciente.
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
.
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 garantiza 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 Preguntas frecuentes sobre IAM.
Cuando Pub/Sub no puede acceder a una clave de Cloud KMS, la publicación y la entrega de mensajes con StreamingPull o extracción falla 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.
Pub/Sub intenta distinguir si la clave de Cloud KMS no está disponible debido a la acción intencional, como la inhabilitación de la clave, y la falta de disponibilidad extendida del servicio de Cloud KMS. Si bien es improbable que una interrupción de Cloud KMS detenga la publicación y la entrega, la falta de disponibilidad tiene el mismo efecto que la revocación de la clave.