Acione fluxos de trabalho com registos de auditoria do Cloud (CLI gcloud)

Este início rápido mostra como executar um fluxo de trabalho usando um acionador do Eventarc que recebe eventos dos registos de auditoria na nuvem do BigQuery. O BigQuery aloja conjuntos de dados públicos aos quais pode aceder e que pode integrar nas suas aplicações. O acionador executa o fluxo de trabalho ao ouvir um trabalho do BigQuery que consulta um conjunto de dados público. Em seguida, transmite os eventos como argumentos de tempo de execução para o fluxo de trabalho de destino.

Pode concluir este guia de início rápido através da Google Cloud CLI.

  1. Use fluxos de trabalho para criar e implementar um fluxo de trabalho que extrai e devolve dados de um evento.
  2. Crie um acionador do Eventarc que associe uma tarefa do BigQuery a um recetor de eventos do Workflows.
  3. Gere um evento executando uma tarefa do BigQuery com a ferramenta de linhas de comando bq. Este evento é transmitido como um argumento de tempo de execução para o fluxo de trabalho de destino.
  4. Veja os dados de eventos na saída da execução do fluxo de trabalho.

Antes de começar

As restrições de segurança definidas pela sua organização podem impedir a conclusão dos seguintes passos. Para informações de resolução de problemas, consulte o artigo Desenvolva aplicações num ambiente Google Cloud restrito.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Install the Google Cloud CLI.

  3. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  4. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  5. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  6. Verify that billing is enabled for your Google Cloud project.

  7. Install the Google Cloud CLI.

  8. Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.

  9. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  10. Create or select a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.
    • Create a Google Cloud project:

      gcloud projects create PROJECT_ID

      Replace PROJECT_ID with a name for the Google Cloud project you are creating.

    • Select the Google Cloud project that you created:

      gcloud config set project PROJECT_ID

      Replace PROJECT_ID with your Google Cloud project name.

  11. Verify that billing is enabled for your Google Cloud project.

  12. Atualize os componentes de gcloud:
    gcloud components update
  13. Inicie sessão com a sua conta:
    gcloud auth login
  14. Ative as APIs Compute Engine, Eventarc, Pub/Sub e Workflows.

    gcloud services enable \
    compute.googleapis.com \
    eventarc.googleapis.com \
    pubsub.googleapis.com \
    workflows.googleapis.com \
    workflowexecutions.googleapis.com
  15. Defina as variáveis de configuração usadas neste início rápido:
    export WORKFLOW_LOCATION=us-central1
    export TRIGGER_LOCATION=us-central1
    export PROJECT_ID=PROJECT_ID
    gcloud config set project ${PROJECT_ID}
    gcloud config set workflows/location ${WORKFLOW_LOCATION}
    gcloud config set eventarc/location ${TRIGGER_LOCATION}
  16. Se for o criador do projeto, é-lhe atribuída a função básica de proprietário (roles/owner). Por predefinição, esta função do Identity and Access Management (IAM) inclui as autorizações necessárias para acesso total à maioria dos Google Cloud recursos e pode ignorar este passo.

    Se não for o criador do projeto, as autorizações necessárias têm de ser concedidas no projeto ao principal adequado. Por exemplo, um principal pode ser uma Conta Google (para utilizadores finais) ou uma conta de serviço (para aplicações e cargas de trabalho de computação). Para mais informações, consulte a página Funções e autorizações do destino de eventos.

    Autorizações necessárias

    Para receber as autorizações de que precisa para concluir este início rápido, peça ao seu administrador que lhe conceda as seguintes funções da IAM no seu projeto:

    Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

    Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

  17. Tome nota da conta de serviço predefinida do Compute Engine, uma vez que a vai anexar a um acionador do Eventarc para representar a identidade do acionador para fins de teste. Esta conta de serviço é criada automaticamente depois de ativar ou usar um Google Cloud serviço que usa o Compute Engine e com o seguinte formato de email:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com

    Substitua PROJECT_NUMBER pelo seu Google Cloud número do projeto. Pode encontrar o número do projeto na página Boas-vindas da Google Cloud consola ou executando o seguinte comando:

    gcloud projects describe PROJECT_ID --format='value(projectNumber)'

    Para ambientes de produção, recomendamos vivamente que crie uma nova conta de serviço e lhe conceda uma ou mais funções do IAM que contenham as autorizações mínimas necessárias e siga o princípio do privilégio mínimo.

  18. Conceda a função de recetor de eventos do Eventarc (roles/eventarc.eventReceiver) no projeto à conta de serviço predefinida do Compute Engine para que o acionador do Eventarc possa receber eventos de fornecedores de eventos.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  19. Conceda a função de invocador dos workflows (roles/workflows.invoker) no projeto à conta de serviço predefinida do Compute Engine para que a conta tenha autorização para acionar a execução do seu fluxo de trabalho.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/workflows.invoker
  20. Conceda a função de escritor de registos do Logging (roles/logging.logWriter) no projeto à conta de serviço predefinida do Compute Engine para que o fluxo de trabalho possa enviar registos para o Cloud Logging.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/logging.logWriter
  21. Se ativou o agente do serviço Cloud Pub/Sub a 8 de abril de 2021 ou antes, para suportar pedidos de envio autenticados do Pub/Sub, conceda a função de criador de tokens de conta de serviço (roles/iam.serviceAccountTokenCreator) ao agente do serviço. Caso contrário, esta função é concedida por predefinição:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  22. Crie e implemente um fluxo de trabalho

    Crie e implemente um fluxo de trabalho que é executado quando a conclusão de uma tarefa do BigQuery aciona o fluxo de trabalho com um pedido HTTP.

    1. Abra um terminal ou o Cloud Shell.
    2. No seu diretório inicial, crie um novo ficheiro denominado myFirstWorkflow.yaml ou myFirstWorkflow.json.
    3. Copie e cole o seguinte no novo ficheiro e guarde-o:

      YAML

      main:
        params: [event]
        steps:
            - log_event:
                call: sys.log
                args:
                    text: ${event}
                    severity: INFO
            - extract_data:
                assign:
                - data: ${event.data.protoPayload}
            - return_data:
                    return:
                        data: ${data}

      JSON

      {
        "main": {
          "params": [
            "event"
          ],
          "steps": [
            {
              "log_event": {
                "call": "sys.log",
                "args": {
                  "text": "${event}",
                  "severity": "INFO"
                }
              }
            },
            {
              "extract_data": {
                "assign": [
                  {
                    "data": "${event.data.protoPayload}"
                  }
                ]
              }
            },
            {
              "return_data": {
                "return": {
                  "data": "${data}"
                }
              }
            }
          ]
        }
      }
    4. Implemente o fluxo de trabalho:
      export MY_WORKFLOW=myFirstWorkflow
      gcloud workflows deploy ${MY_WORKFLOW} --source=myFirstWorkflow.yaml

      Substitua .yaml por .json se tiver copiado a versão JSON do fluxo de trabalho de exemplo.

    Crie um acionador do Eventarc

    Para criar um acionador do Eventarc que encaminha eventos do BigQuery para um destino do Workflows, execute o comando gcloud eventarc triggers create.

    1. Crie um acionador que filtre eventos do BigQuery:

      gcloud eventarc triggers create events-cal-trigger \
          --destination-workflow=${MY_WORKFLOW} \
          --destination-workflow-location=${WORKFLOW_LOCATION} \
          --event-filters="type=google.cloud.audit.log.v1.written" \
          --event-filters="serviceName=bigquery.googleapis.com" \
          --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \
          --service-account="PROJECT_NUMBER-compute@developer.gserviceaccount.com"

      Esta ação cria um acionador denominado events-cal-trigger.

      Tenha em atenção que, quando cria um acionador do Eventarc pela primeira vez num projeto, pode haver um atraso no aprovisionamento do agente do serviço Eventarc. Google Cloud Normalmente, pode resolver este problema tentando criar o acionador novamente. Para mais informações, consulte o artigo Erros de acesso negado.

    2. Para confirmar que events-cal-trigger foi criado com êxito, execute o seguinte comando:

      gcloud eventarc triggers describe events-cal-trigger --location=${TRIGGER_LOCATION}

      A saída apresenta a hora e a localização de criação do acionador e deve ser semelhante ao seguinte:

      createTime: '2021-10-14T15:15:43.872360951Z'
      [...]
      name: projects/PROJECT_ID/locations/us-central1/triggers/events-cal-trigger
      

    Gere e veja um evento

    Execute uma tarefa do BigQuery através da ferramenta de linhas de comando bq para gerar eventos e acionar o fluxo de trabalho.

    1. Para acionar o fluxo de trabalho, execute uma tarefa do BigQuery que aceda a um conjunto de dados público e obtenha informações a partir dele:

      bq query --nouse_legacy_sql \
      'SELECT
      COUNT(*)
      FROM
      `bigquery-public-data`.samples.shakespeare'

      Os eventos gerados são transmitidos como argumentos de tempo de execução ao fluxo de trabalho, que devolve os dados de payload como resultado da execução do fluxo de trabalho.

    2. Para verificar se o fluxo de trabalho foi acionado, liste as suas duas últimas execuções:

      gcloud workflows executions list ${MY_WORKFLOW} --limit=2

      Duas execuções do fluxo de trabalho são acionadas pela tarefa do BigQuery. (Um evento sinaliza a alteração do trabalho; o outro, a inserção do trabalho em si.) O resultado apresenta um NAME e um STATE iguais a SUCCEEDED para cada uma das execuções, e deve ser semelhante ao seguinte:

      NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2
      STATE: SUCCEEDED
      START_TIME: 2024-02-06T14:16:14.390549813Z
      END_TIME: 2024-02-06T14:16:14.870102511Z
      NAME: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/35d7c730-7ba5-4055-afee-c04ed706b179
      STATE: SUCCEEDED
      START_TIME: 2024-02-06T14:16:14.389882601Z
      END_TIME: 2024-02-06T14:16:14.829942525Z

      Tenha em atenção que, na saída, a073ad6a-c76b-4437-8d39-2ab3ade289d2 do campo NAME é o ID da execução do fluxo de trabalho. Copie o ID de execução para usar no passo seguinte.

    3. Para ver o estado de execução, execute o seguinte comando:

      gcloud workflows executions describe WORKFLOW_EXECUTION_ID --workflow=${MY_WORKFLOW}

      Substitua WORKFLOW_EXECUTION_ID pelo ID da execução do fluxo de trabalho que corresponde à hora em que a tarefa do BigQuery foi concluída.

      O resultado deve ser semelhante ao seguinte:

      argument: [...]
      duration: 0.277917625s
      endTime: '2024-02-06T14:16:14.870102511Z'
      name: projects/218898424763/locations/us-central1/workflows/myFirstWorkflow/executions/a073ad6a-c76b-4437-8d39-2ab3ade289d2
      result: '{"data": [...]}'
      startTime: '2024-02-06T14:16:14.390549813Z'
      state: SUCCEEDED
    4. Confirme se a startTime em que a tarefa do BigQuery foi concluída e a START_TIME da execução do fluxo de trabalho correspondem entre si.

    Gerou com êxito um evento do BigQuery que acionou um recetor de eventos do Workflows através do Eventarc.

    Limpar

    1. Elimine o fluxo de trabalho que criou:
      gcloud workflows delete ${MY_WORKFLOW}
      Quando lhe for perguntado se quer continuar, introduza y.
    2. Elimine o acionador que criou:
      gcloud eventarc triggers delete events-cal-trigger
    3. Em alternativa, pode eliminar o seu Google Cloud projeto para evitar incorrer em cobranças. A eliminação do seu projeto Google Cloud interrompe a faturação de todos os recursos usados nesse projeto.

      Delete a Google Cloud project:

      gcloud projects delete PROJECT_ID

    O que se segue?