Resolver problemas

Nesta página, mostramos como resolver problemas que podem ocorrer ao usar o Eventarc Advanced.

Problemas com a CMEK

É possível usar chaves de criptografia gerenciadas pelo cliente (CMEK) para proteger o Eventarc. As chaves são criadas e gerenciadas pelo Cloud Key Management Service (Cloud KMS). A tabela a seguir descreve diferentes problemas de CMEK e como resolvê-los ao usar o Cloud KMS com o Eventarc.

Problemas que ocorrem ao criar ou atualizar recursos do Eventarc

Problema de CMEK Mensagem de erro Descrição
Chave desativada $KEY is not enabled, current state is: DISABLED

A chave do Cloud KMS fornecida foi desativada para um recurso do Eventarc. Os eventos ou mensagens associados ao recurso não estão mais protegidos.

Solução:

  1. Mostre a chave usada para um recurso:
  2. Reative a chave do Cloud KMS.
Cota excedida Quota exceeded for limit

Você atingiu o limite de cota para solicitações do Cloud KMS.

Solução:

  • Limite o número de chamadas do Cloud KMS.
  • Aumente a cota.
Para mais informações, consulte Monitorar e ajustar cotas do Cloud KMS.
Região incompatível Key region $REGION must match the resource to be protected

A região da chave KMS fornecida é diferente da região do recurso.

Solução:

Use uma chave do Cloud KMS da mesma região.

Restrição da política da organização project/PROJECT_ID violated org policy constraint

O Eventarc está integrado às duas restrições de política da organização a seguir para ajudar a garantir o uso da CMEK em uma organização. Nenhum recurso do Eventarc está sujeito a uma política definida após a criação do recurso. No entanto, a atualização do recurso pode falhar.

  • constraints/gcp.restrictNonCmekServices faz com que todas as solicitações de criação de recursos sem uma chave especificada do Cloud KMS falhem.

    Solução:

    Especifique uma chave do Cloud KMS para o recurso do Eventarc. Para mais informações, consulte Exigir CMEKs para novos recursos do Eventarc.

  • constraints/gcp.restrictCmekCryptoKeyProjects restringe as chaves do Cloud KMS que podem ser usadas para proteger um recurso do Eventarc.

    Solução:

    Use uma chave do Cloud KMS compatível de um projeto, pasta ou organização do Eventarc permitidos. Para mais informações, consulte Restringir chaves do Cloud KMS para um projeto do Eventarc.

Problemas que ocorrem durante a entrega de eventos

Problema de CMEK Mensagem de erro Descrição
Chave desativada $KEY is not enabled, current state is: DISABLED

A chave do Cloud KMS fornecida foi desativada para um recurso do Eventarc. Os eventos ou mensagens associados ao recurso não estão mais protegidos.

Solução:

  1. Mostre a chave usada para um recurso:
  2. Reative a chave do Cloud KMS.
Cota excedida Quota exceeded for limit

Você atingiu o limite de cota para solicitações do Cloud KMS.

Solução:

  • Limite o número de chamadas do Cloud KMS.
  • Aumente a cota.
Para mais informações, consulte Monitorar e ajustar cotas do Cloud KMS.
Erro de permissão Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource $KEY (or it may not exist)

A chave do Cloud KMS fornecida não existe ou a permissão do Identity and Access Management (IAM) não está configurada corretamente.

Solução:

Para resolver problemas que podem ser encontrados ao usar chaves gerenciadas externamente por meio do Cloud External Key Manager (Cloud EKM), consulte a Referência de erros do Cloud EKM.

Erros HTTP 400 Bad Request

Um erro HTTP 400 Bad Request genérico em um pipeline geralmente indica um problema de transformação ou vinculação de mensagens ou um problema relacionado ao endpoint de destino. Faça o seguinte:

  • Procure erros de sintaxe ou lógica nas suas expressões CEL. Por exemplo, neste documento, consulte Problemas de transformação.
  • Verifique se as mensagens de evento estão em conformidade com o esquema esperado. Por exemplo, neste documento, consulte O formato da solicitação é inválido.
  • Se o próprio destino do evento estiver retornando o erro, verifique o endpoint segmentado.

Erros HTTP 503 Service Unavailable

Se você encontrar um erro HTTP 503 Service Unavailable em um pipeline que encaminha mensagens para um destino do Google usando um endereço DNS, por exemplo, o Cloud Run, verifique se o Acesso privado do Google está ativado na sub-rede usada no anexo de rede. Caso contrário, não será possível resolver o endereço DNS.

Permissão negada ao usar o agente de serviço do Eventarc

Se você encontrar o erro a seguir ao tentar criar um recurso Eventarc Advanced, aguarde alguns minutos (possivelmente, sete) e tente criar o recurso novamente:

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.

Um agente de serviço atua como a identidade de um determinado serviço do Google Cloud para um projeto específico. Para mais informações, consulte Agentes de serviço e confira as permissões do Identity and Access Management (IAM) para o papel de agente de serviço do Eventarc (roles/eventarc.serviceAgent).

Se você ainda estiver enfrentando o erro anterior depois de tentar criar o recurso novamente, conclua as etapas a seguir para verificar se o agente de serviço do Eventarc existe no seu projeto Google Cloud e tem o papel necessário:

  1. No console do Google Cloud , acesse a página IAM.

    Acessar IAM

  2. Na guia Visualizar por principais, marque a caixa de seleção Incluir concessões de papel fornecidas pelo Google.
  3. Na lista de principais, localize o agente de serviço do Eventarc, que usa o seguinte formato:

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

  4. Verifique se o agente de serviço tem o papel Agente de serviço do Eventarc. Se o agente de serviço não tiver o papel, conceda o papel.

Problemas de publicação em jobs do Cloud Run

Nesta seção, descrevemos como resolver problemas que podem ocorrer ao publicar eventos em um job do Cloud Run. Para uma demonstração completa, consulte o guia de início rápido.

Erros HTTP 403 Forbidden

Se você encontrar um erro HTTP 403 Forbidden ao tentar executar um job do Cloud Run que substitui a configuração do job, por exemplo, ao definir uma vinculação de mensagem, verifique se você concedeu o papel do IAM Desenvolvedor do Cloud Run (roles/run.developer) ou Executor de jobs do Cloud Run com substituições (roles/run.jobsExecutorWithOverrides) à conta de serviço do OAuth usada pelo pipeline do Eventarc. Para mais informações, consulte Substituir configuração do job para uma execução específica.

Formato de solicitação inválido

Ao definir uma vinculação de mensagem, use a chave http_endpoint_message_binding_template para transformar o evento no formato esperado pela API Cloud Run Admin. Por exemplo: {"body": ""}.

Se a chave estiver ausente ou vazia, a mensagem de evento encaminhada ao job não vai obedecer ao esquema esperado para o endpoint do job do Cloud Run, o que impede que a mensagem de evento acione a execução do job com êxito.

Problemas de transformação

Se os dados de eventos não puderem ser transformados ou não forem transformados como esperado ao especificar uma vinculação de mensagem, verifique se a sintaxe da sua expressão CEL está correta.

Expressão CEL incorreta

Por exemplo, na expressão a seguir, substituições de strings entre aspas, como \"${message.data}\", são usadas para avaliar e inserir valores de variáveis quando funções de extensão da CEL deveriam ser usadas:

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

Além disso, os atributos de evento são campos de nível superior no objeto de mensagem e não estão contidos em um campo de atributos separado, como message.attributes. Cada atributo de uma mensagem CloudEvents recebida precisa ser acessado usando o valor message.key, em que key é o nome do atributo.

Expressão CEL correta

Para resolver esses problemas, adicione a função toJsonString() diretamente ao objeto para transmitir os dados da mensagem como uma string JSON. Para capturar os atributos do evento como uma string JSON sem incluir o payload, use message.removeFields(["data"]).toJsonString(). Exemplo:

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

Para mais informações, consulte Transformar eventos recebidos.

A seguir