Usar claves de encriptado gestionadas por el cliente

De forma predeterminada, Eventarc cifra el contenido del cliente en reposo. Eventarc 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 Eventarc. 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. Además, Cloud KMS te permite ver los registros de auditoría y controlar los ciclos de vida de las claves. En lugar de que Google sea el propietario y gestione 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 CMEKs, la experiencia de acceso a tus recursos de Eventarc será similar a la de usar el cifrado predeterminado de Google. Para obtener más información sobre las opciones de encriptado, consulta el artículo Claves de encriptado gestionadas por el cliente (CMEK).

Las claves de cifrado gestionadas por el cliente se almacenan como claves de software, en un clúster de Cloud HSM o externamente mediante Cloud External Key Manager.

Cloud KMS genera registros de auditoría cuando se habilitan o inhabilitan claves, o cuando los recursos avanzados de Eventarc las usan para cifrar y descifrar mensajes. Para obtener más información, consulta la información sobre el registro de auditoría de Cloud KMS.

Qué se protege con CMEK

Puede configurar CMEK para un canal que use Eventarc Standard y cifrar los eventos que pasen por el canal. Si habilitas un canal con CMEK, los datos asociados a él se protegerán mediante una clave de cifrado a la que solo tú podrás acceder.

Cuando habilitas la CMEK para el canal de Google en un Google Cloud proyecto, todos los activadores estándar de Eventarc para los tipos de eventos de Google de ese proyecto y región se cifran por completo con esa clave CMEK. Las claves CMEK no se pueden aplicar por activador.

Antes de empezar

Antes de usar esta función en Eventarc, debes hacer lo siguiente:

Consola

  1. Enable the Cloud KMS and Eventarc APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  2. Crea un conjunto de claves.
  3. Crea una clave para un conjunto de claves específico.

gcloud

  1. Actualiza gcloud componentes.
    gcloud components update
  2. Habilita las APIs Cloud KMS y Eventarc en el proyecto que almacenará tus claves de cifrado.
    gcloud services enable cloudkms.googleapis.com eventarc.googleapis.com
  3. Crea un conjunto de claves.
  4. Crea una clave para un conjunto de claves específico.

Para obtener información sobre todas las marcas y los valores posibles, ejecuta el comando con la marca --help.

Terraform

  1. Habilita las APIs Cloud KMS y Eventarc en el proyecto que almacenará tus claves de cifrado configurando el recurso google_project_service:

    # Enable Cloud KMS API
    resource "google_project_service" "cloudkms" {
      service            = "cloudkms.googleapis.com"
      disable_on_destroy = false
    }
    
    # Enable Eventarc API
    resource "google_project_service" "eventarc" {
      service            = "eventarc.googleapis.com"
      disable_on_destroy = false
    }
  2. Crea un conjunto de claves y una clave configurando los recursos google_kms_key_ring y google_kms_crypto_key de la siguiente manera:

    resource "random_id" "default" {
      byte_length = 8
    }
    
    # Create a Cloud KMS key ring
    resource "google_kms_key_ring" "default" {
      name     = "${random_id.default.hex}-example-keyring"
      location = "us-central1"
    }
    
    # Create a Cloud KMS key
    resource "google_kms_crypto_key" "default" {
      name            = "example-key"
      key_ring        = google_kms_key_ring.default.id
      rotation_period = "7776000s"
    }

Para obtener más información sobre el uso de Terraform, consulta la documentación de Terraform en Google Cloud.

Ten en cuenta que Cloud KMS y Eventarc son servicios regionalizados. La región de la clave de Cloud KMS y el canal de Eventarc protegido deben ser la misma.

Conceder acceso a una clave a la cuenta de servicio de Eventarc

Para conceder acceso a la clave de Cloud KMS a la cuenta de servicio de Eventarc, añade la cuenta de servicio como principal de la clave y concédele el rol Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS:

Consola

Cuando habilitas CMEK en un canal de Google o de terceros a través de la consola, se te pide que asignes el rol Encargado de cifrar o descifrar claves de CryptoKey de Cloud KMS a la cuenta de servicio. Para obtener más información, consulta las secciones Habilitar CMEK para tipos de eventos de Google o Habilitar CMEK para un canal de eventos de terceros de este documento.

gcloud

 gcloud kms keys add-iam-policy-binding KEY_NAME \
     --keyring RING_NAME \
     --location LOCATION \
     --member serviceAccount:SERVICE_AGENT_EMAIL \
     --role roles/cloudkms.cryptoKeyEncrypterDecrypter

Haz los cambios siguientes:

  • KEY_NAME: el nombre de la clave. Por ejemplo, my-key.
  • RING_NAME: el nombre del conjunto de claves. Por ejemplo, my-keyring.
  • LOCATION: la ubicación de la clave. Por ejemplo, us-central1.
  • SERVICE_AGENT_EMAIL: la dirección de correo de la cuenta de servicio con el rol eventarc.serviceAgent.

    Por ejemplo, service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com. Para obtener más información, consulta Agentes de servicio.

Terraform

  1. Genera la identidad del servicio de Eventarc configurando el recurso google_project_service_identity:

    resource "google_project_service_identity" "eventarc_sa" {
      provider = google-beta
      project  = data.google_project.default.project_id
      service  = "eventarc.googleapis.com"
    }
  2. Concede el rol de Cloud KMS a la cuenta de servicio de Eventarc configurando el recurso google_kms_crypto_key_iam_member:

    # Grant service account access to Cloud KMS key
    resource "google_kms_crypto_key_iam_member" "default" {
      crypto_key_id = google_kms_crypto_key.default.id
      role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
      member        = "serviceAccount:${google_project_service_identity.eventarc_sa.email}"
    }

Habilitar CMEK para tipos de eventos de Google

Los activadores de Eventarc que dirigen tipos de eventos de Google publican eventos en un canal virtual denominado canal de Google, que es específico de un proyecto y una región. Este canal virtual está disponible en todas las regiones de Eventarc.

Cuando habilitas la CMEK para el canal de Google en un Google Cloud proyecto, todas las activadores de Eventarc de los tipos de eventos de Google de ese proyecto y región se cifran por completo con esa clave CMEK. Puedes añadir varias claves CMEK y asociar cada una a una región específica del canal de Google. Las claves de CMEK no se pueden aplicar por activador.

Consola

  1. En la Google Cloud consola, ve a la página Eventarc > Canales.

    Ir a Canales

  2. Haz clic en un canal con un proveedor de Google.

  3. En la página Editar canal, marca la casilla Usar una clave de cifrado gestionada por el cliente (CMEK).

  4. Haz clic en Añadir clave de cifrado.

  5. Selecciona una región y, en la lista Clave de cifrado CMEK, selecciona un conjunto de claves que hayas creado para la región. Ten en cuenta que solo puedes añadir una clave de cifrado por región a un canal.

  6. Opcional: Para introducir manualmente el nombre del recurso de la clave, en la lista Clave de cifrado CMEK, haga clic en ¿No ve su clave? Introduce el nombre del recurso de la clave y el nombre de la clave en el formato especificado.

  7. Si se te pide, asigna el rol cloudkms.cryptoKeyEncrypterDecrypter a la cuenta de servicio de Eventarc con el rol eventarc.serviceAgent.

  8. Opcional: Haz clic en Añadir clave de cifrado para añadir otro conjunto de claves que hayas creado para otra región.

  9. Haz clic en Guardar.

gcloud

 gcloud eventarc google-channels update \
     --location=LOCATION \
     --crypto-key=KEY

Haz los cambios siguientes:

  • LOCATION: la región del canal de Google que se va a proteger. Debe coincidir con la ubicación de la clave utilizada. Ten en cuenta que solo puedes añadir una clave de cifrado por región a un canal.
  • KEY: el nombre de clave de Cloud KMS totalmente cualificado con el formato projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME.

Terraform

Habilita las claves de cifrado gestionadas por el cliente para el recurso GoogleChannelConfig en un proyecto y una ubicación concretos configurando el recurso google_eventarc_google_channel_config:

# Specify a CMEK key for the `GoogleChannelConfig` resource
resource "google_eventarc_google_channel_config" "default" {
  location        = "us-central1"
  name            = "googleChannelConfig"
  crypto_key_name = google_kms_crypto_key.default.id
  depends_on      = [google_kms_crypto_key_iam_member.default]
}

REST

Puedes actualizar el recurso GoogleChannelConfig con el método projects.locations.updateGoogleChannelConfig y especificar una clave CMEK para un proyecto y una ubicación concretos.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: tu ID de proyecto Google Cloud.
  • LOCATION: la región del canal de Google que se va a proteger. Debe coincidir con la ubicación de la clave utilizada (por ejemplo, us-central1). Ten en cuenta que solo puedes añadir una clave de cifrado por región a un canal.
  • KEY_NAME: el nombre de la clave (por ejemplo, my-key).
  • RING_NAME: el nombre del conjunto de claves (por ejemplo, my-keyring).

Cuerpo JSON de la solicitud:

{
  "cryptoKeyName": "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
}

Para enviar tu solicitud, despliega una de estas opciones:

Si la solicitud se realiza correctamente, en el cuerpo de la respuesta se incluye una instancia actualizada de GoogleChannelConfig:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/googleChannelConfig",
  "updateTime": "2025-03-05T17:56:54.106390447Z",
  "cryptoKeyName": "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
}

Si creas activadores de Pub/Sub con tus propios temas, te recomendamos que también configures la clave de KMS en el tema para disfrutar de una protección CMEK completa. Para obtener más información, consulta el artículo sobre cómo configurar temas de Pub/Sub.

Verificar el uso de Cloud KMS

Para verificar que el canal ahora cumple los requisitos de CMEK, sigue estos pasos:

Consola

  1. En la Google Cloud consola, ve a la página Eventarc > Triggers (Activadores).

    Ir a Activadores

  2. Haz clic en un activador que tenga un Google Cloud origen como proveedor de eventos y una región que hayas protegido con CMEK.

  3. En la página Detalles del activador, se muestra el estado Cifrado, el mensaje Events encrypted using Customer-managed encryption keys.

gcloud

Para confirmar la clave CMEK, puedes usar el comando google-channels describe.

 gcloud eventarc google-channels describe \
     --location=LOCATION

La salida debería ser similar a la siguiente:

 cryptoKeyName: projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME
 name: projects/PROJECT_ID/locations/LOCATION/googleChannelConfig
 updateTime: '2022-06-28T17:24:56.365866104Z'

El valor cryptokeyName muestra la clave de Cloud KMS usada en el canal de Google.

Terraform

Para confirmar la clave CMEK, puedes usar el comando state show de Terraform.

terraform state show google_eventarc_google_channel_config.default

La salida debería ser similar a la siguiente:

# google_eventarc_google_channel_config.default:
resource "google_eventarc_google_channel_config" "default" {
    crypto_key_name = "projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME"
    id              = "projects/PROJECT_ID/locations/LOCATION/googleChannelConfig"
    location        = "LOCATION"
    name            = "projects/PROJECT_ID/locations/LOCATION/googleChannelConfig"
    project         = "PROJECT_ID"
    update_time     = "2025-03-24T17:15:08.809635011Z"
}

REST

Para confirmar la clave CMEK, puedes obtener el recurso GoogleChannelConfig con el método projects.locations.getGoogleChannelConfig.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: tu ID de proyecto Google Cloud.
  • LOCATION: la región del canal de Google protegido.

Para enviar tu solicitud, despliega una de estas opciones: