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 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 Habilitar CMEK para tipos de eventos de Google o Habilitar CMEK para un canal de eventos de terceros en 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, elige 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 completo 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 completa 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 de CMEK, puedes obtener el recurso GoogleChannelConfig mediante 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:

Si la salida del comando es correcta, en el cuerpo de la respuesta se incluirá una instancia 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"
}

Habilitar CMEK en un canal de terceros

Un canal de Eventarc para terceros es un recurso a través del cual las entidades que no son deGoogle Cloud y que ofrecen una fuente de Eventarc pueden interactuar con destinos. Este canal es específico de una región y solo puedes añadir una clave por canal de terceros.

Para habilitar las claves de cifrado gestionadas por el cliente en un canal de terceros, sigue estos pasos:

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

  3. En la página Detalles del canal, haz clic en Editar.

  4. En la página Editar canal, en Encriptado, selecciona Clave de Cloud KMS.

  5. En la lista Tipo de clave, selecciona un método para gestionar tus claves.

    Puedes gestionar tus claves manualmente o usar Autokey, que te permite generar conjuntos de claves y claves bajo demanda. Si la opción Autoclave está inhabilitada, significa que aún no se ha integrado con el tipo de recurso actual.

  6. En la lista Seleccionar una clave de Cloud KMS, elija una clave. Ten en cuenta que solo puedes añadir una clave de cifrado por región a un canal.

  7. Opcional: Para introducir manualmente el nombre del recurso de la clave, en la lista Seleccionar una clave de Cloud KMS, haz clic en Introducir clave manualmente e introduce el nombre de la clave en el formato especificado.

  8. Si se te pide, concede el rol cloudkms.cryptoKeyEncrypterDecrypter al agente de servicio de Eventarc.

  9. Haz clic en Guardar.

gcloud

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

Haz los cambios siguientes:

  • CHANNEL_NAME: el nombre del canal de terceros. Para crear un canal de terceros, consulta el artículo Crear un canal.
  • LOCATION: la región del canal de terceros que se va a proteger. Debe coincidir con la ubicación de la clave.
  • KEY: el nombre de la clave de Cloud KMS totalmente cualificado con el formato projects/PROJECT_ID/locations/LOCATION/keyRings/RING_NAME/cryptoKeys/KEY_NAME.

Terraform

Especifica una clave CMEK para un canal de terceros configurando el recurso google_eventarc_channel. Por ejemplo:

resource "google_eventarc_channel" "default" {
  location        = "us-central1"
  name            = "CHANNEL_NAME"
  crypto_key_name = google_kms_crypto_key.default.id
}

Sustituye CHANNEL_NAME por el nombre del canal de terceros.

REST

Puedes actualizar un recurso Channel con el método projects.locations.channels.patch 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:

  • CHANNEL_NAME: el nombre del canal.
  • PROJECT_ID: tu ID de proyecto Google Cloud.
  • LOCATION: la región del canal 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: