Soluciona problemas

En esta página, se muestra cómo resolver problemas que podrías encontrar cuando uses Eventarc Advanced.

Problemas con la CMEK

Puedes usar claves de encriptación administradas por el cliente (CMEK) para proteger Eventarc. Las claves se crean y administran a través de Cloud Key Management Service (Cloud KMS). En la siguiente tabla, se describen diferentes problemas relacionados con la CMEK y cómo resolverlos cuando se usa Cloud KMS con Eventarc.

Problemas que ocurren cuando se crean o actualizan recursos de Eventarc

Problema con la CMEK Mensaje de error Descripción
Llave inhabilitada $KEY is not enabled, current state is: DISABLED

Se inhabilitó la clave de Cloud KMS proporcionada para un recurso de Eventarc. Los eventos o mensajes asociados al recurso ya no están protegidos.

Solución:

  1. Para mostrar la clave que se usa para un recurso, haz lo siguiente:
  2. Vuelve a habilitar la clave de Cloud KMS.
Se superó la cuota Quota exceeded for limit

Se alcanzó el límite de cuota para las solicitudes de Cloud KMS.

Solución:

  • Limita la cantidad de llamadas a Cloud KMS.
  • Aumenta la cuota.
Para obtener más información, consulta Supervisa y ajusta las cuotas de Cloud KMS.
La región no coincide Key region $REGION must match the resource to be protected

La región de la clave de KMS proporcionada es diferente de la región del recurso.

Solución:

Usa una clave de Cloud KMS de la misma región.

Restricción de las políticas de la organización project/PROJECT_ID violated org policy constraint

Eventarc se integra con las siguientes dos restricciones de políticas de la organización para ayudar a garantizar el uso de CMEK en una organización. Ningún recurso de Eventarc existente está sujeto a una política que se establece después de que se crea el recurso. Sin embargo, es posible que falle la actualización del recurso.

  • constraints/gcp.restrictNonCmekServices causa que fallen todas las solicitudes de creación de recursos sin una clave de Cloud KMS especificada.

    Solución:

    Especifica una clave de Cloud KMS para el recurso de Eventarc. Para obtener más información, consulta Cómo solicitar CMEK para los recursos nuevos de Eventarc.

  • constraints/gcp.restrictCmekCryptoKeyProjects restringe las claves de Cloud KMS que puedes usar para proteger un recurso de Eventarc.

    Solución:

    Usa una clave de Cloud KMS compatible de un proyecto, una carpeta o una organización de Eventarc permitidos. Para obtener más información, consulta Restringe las claves de Cloud KMS para un proyecto de Eventarc.

Problemas que ocurren durante la entrega de eventos

Problema con la CMEK Mensaje de error Descripción
Llave inhabilitada $KEY is not enabled, current state is: DISABLED

Se inhabilitó la clave de Cloud KMS proporcionada para un recurso de Eventarc. Los eventos o mensajes asociados al recurso ya no están protegidos.

Solución:

  1. Para mostrar la clave que se usa para un recurso, haz lo siguiente:
  2. Vuelve a habilitar la clave de Cloud KMS.
Se superó la cuota Quota exceeded for limit

Se alcanzó el límite de cuota para las solicitudes de Cloud KMS.

Solución:

  • Limita la cantidad de llamadas a Cloud KMS.
  • Aumenta la cuota.
Para obtener más información, consulta Supervisa y ajusta las cuotas de Cloud KMS.
Error de permiso Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource $KEY (or it may not exist)

Es posible que la clave de Cloud KMS proporcionada no exista o que el permiso de Identity and Access Management (IAM) no esté configurado de forma correcta.

Solución:

Para resolver problemas que puedas encontrar cuando uses claves administradas de forma externa a través de Cloud External Key Manager (Cloud EKM), consulta la referencia de errores de Cloud EKM.

Errores de HTTP 400 Bad Request

Si se produce un error HTTP 400 Bad Request genérico para una canalización, a menudo indica un problema de transformación o de vinculación de mensajes, o bien un problema relacionado con el extremo de destino. Asegúrate de hacer lo siguiente:

  • Busca errores de sintaxis o lógica en tus expresiones de CEL. Por ejemplo, en este documento, consulta Problemas de transformación.
  • Verifica que los mensajes de eventos cumplan con el esquema esperado. Por ejemplo, en este documento, consulta Formato de solicitud no válido.
  • Si el propio destino del evento devuelve el error, verifica el extremo al que se segmenta.

Errores de HTTP 503 Service Unavailable

Si encuentras un error HTTP 503 Service Unavailable para una canalización que enruta mensajes a un destino de Google con una dirección DNS (por ejemplo, Cloud Run), asegúrate de que el Acceso privado a Google esté habilitado en la subred que se usa en el adjunto de red; de lo contrario, no se podrá resolver la dirección DNS.

Se denegó el permiso mientras se usaba el agente de servicio de Eventarc

Si encuentras el siguiente error mientras intentas crear un recurso de Eventarc Advanced, espera unos minutos (posiblemente, siete) y, luego, intenta crear el recurso de nuevo:

Permission denied while using the Eventarc Service Agent. If you recently started to use
Eventarc, it may take a few minutes before all necessary permissions are propagated to the
Service Agent. Otherwise, verify that it has Eventarc Service Agent role.

Un agente de servicio actúa como la identidad de un servicio de Google Cloud determinado para un proyecto en particular. Para obtener más información, consulta Agentes de servicio y consulta los permisos de Identity and Access Management (IAM) para el rol de agente de servicio de Eventarc (roles/eventarc.serviceAgent).

Si sigues teniendo el error anterior después de intentar crear tu recurso de nuevo, completa los siguientes pasos para verificar que el agente de servicio de Eventarc exista en tu proyecto Google Cloud y tenga el rol necesario:

  1. En la consola de Google Cloud , dirígete a la página IAM.

    Ir a IAM

  2. En la pestaña Ver por principales, selecciona la casilla de verificación Incluir asignaciones de roles proporcionadas por Google.
  3. En la lista de principales, busca el agente de servicio de Eventarc, que usa el siguiente formato:

    service-PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com

  4. Verifica que el agente de servicio tenga el rol de Agente de servicio de Eventarc. Si el agente de servicio no tiene el rol, otorga el rol.

Problemas con la publicación en trabajos de Cloud Run

En esta sección, se describe cómo resolver problemas que podrías encontrar cuando publiques eventos en un trabajo de Cloud Run. Para ver una demostración de extremo a extremo, consulta la guía de inicio rápido.

Errores de HTTP 403 Forbidden

Si encuentras un error HTTP 403 Forbidden cuando intentas ejecutar un trabajo de Cloud Run que anula la configuración del trabajo (por ejemplo, definiendo una vinculación de mensajes), asegúrate de haber otorgado el rol de IAM de desarrollador de Cloud Run (roles/run.developer) o de ejecutor de trabajos de Cloud Run con anulaciones (roles/run.jobsExecutorWithOverrides) a la cuenta de servicio de OAuth que usa la canalización de Eventarc. Para obtener más información, consulta Anula la configuración del trabajo para una ejecución específica.

Formato de solicitud no válido

Cuando defines una vinculación de mensajes, debes usar la clave http_endpoint_message_binding_template para transformar el evento en el formato que espera la API de Cloud Run Admin, por ejemplo, {"body": ""}.

Si falta la clave o está vacía, el mensaje del evento que se enruta al trabajo no se ajustará al esquema esperado para el extremo del trabajo de Cloud Run, lo que impedirá que el mensaje del evento active correctamente la ejecución del trabajo.

Problemas de transformación

Si tus datos de eventos no se pueden transformar o no se transforman como se espera cuando especificas una vinculación de mensajes, asegúrate de que la sintaxis de tu expresión de CEL sea correcta.

Expresión CEL incorrecta

Por ejemplo, en la siguiente expresión, se usan sustituciones de cadenas entre comillas, como \"${message.data}\", para evaluar e insertar valores de variables cuando, en su lugar, se deberían usar funciones de extensión de CEL:

cel_expression: "{\"body\":{\"overrides\":{\"containerOverrides\":[{\"env\":[{\"name\":\"CLOUD_EVENT_PAYLOAD\",\"value\":\"${message.data}\"},{\"name\":\"CLOUD_EVENT_ATTRIBUTES\",\"value\":\"${message.attributes}\"}]}]}}}"

Además, los atributos de eventos son campos de nivel superior en el objeto de mensaje y no se incluyen en un campo de atributos independiente, como message.attributes. Se debe acceder a cada atributo de un mensaje de CloudEvents entrante con el valor message.key, en el que key es el nombre del atributo.

Expresión CEL correcta

Para resolver estos problemas, agrega la función toJsonString() directamente al objeto para pasar los datos del mensaje como una cadena JSON. Para capturar los atributos del evento como una cadena JSON y excluir la carga útil, usa message.removeFields(["data"]).toJsonString(). Por ejemplo:

cel_expression: "{\"body\":{\"overrides\":{\"containerOverrides\":[{\"env\":[{\"name\":\"CLOUD_EVENT_PAYLOAD\",\"value\":\"message.data.toJsonString()\"},{\"name\":\"CLOUD_EVENT_ATTRIBUTES\",\"value\":\"message.removeFields(['data']).toJsonString()\"}]}]}}}"

Para obtener más información, consulta Transforma los eventos recibidos.

¿Qué sigue?