Receber eventos usando os Registros de auditoria do Cloud (gcloud CLI)

Neste guia de início rápido, mostramos como receber eventos do Cloud Storage em um serviço não autenticado do Cloud Run usando o Eventarc.

Conclua este guia de início rápido usando a Google Cloud CLI. Para ver instruções usando o console, consulte Criar um gatilho usando o (Console do Google Cloud).

Neste guia de início rápido, você fará as seguintes tarefas:

  1. Criar um bucket do Cloud Storage para ser a origem do evento.

  2. Implantar um serviço de receptor de eventos no Cloud Run

  3. Criar um gatilho de eventos.

  4. Gerar um evento por meio do upload de um arquivo para o bucket do Cloud Storage e visualizá-lo nos registros do Cloud Run.

Antes de começar

As restrições de segurança definidas pela sua organização podem impedir que você conclua as etapas a seguir. Para informações sobre solução de problemas, consulte Desenvolver aplicativos em um ambiente restrito do Google Cloud.

  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. To initialize the gcloud CLI, run the following command:

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

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

  5. Make sure that billing is enabled for your Google Cloud project.

  6. Enable the Artifact Registry, Cloud Build, Cloud Run, Eventarc, and Pub/Sub APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com run.googleapis.com eventarc.googleapis.com pubsub.googleapis.com
  7. Install the Google Cloud CLI.
  8. To initialize the gcloud CLI, run the following command:

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

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

  10. Make sure that billing is enabled for your Google Cloud project.

  11. Enable the Artifact Registry, Cloud Build, Cloud Run, Eventarc, and Pub/Sub APIs:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com run.googleapis.com eventarc.googleapis.com pubsub.googleapis.com
  12. Atualize os componentes gcloud:
    gcloud components update
  13. Faça login usando sua conta:
    gcloud auth login
  14. Defina as variáveis de configuração usadas neste guia de início rápido:
    export REGION=us-central1
    gcloud config set run/region ${REGION}
    gcloud config set run/platform managed
    gcloud config set eventarc/location ${REGION}
  15. Se você for o criador do projeto, receberá o papel de proprietário básico (roles/owner). Por padrão, esse papel do gerenciamento de identidade e acesso (IAM) inclui as permissões necessárias para acesso total à maioria dos recursos do Google Cloud, e você pode pular esta etapa.

    Se você não é o criador do projeto, as permissões necessárias precisam ser concedidas ao principal apropriado. Por exemplo, um principal pode ser uma Conta do Google (para usuários finais) ou uma conta de serviço (para aplicativos e cargas de trabalho de computação). Para mais informações, consulte a página Papéis e permissões do destino do evento.

    Observe que, por padrão, as permissões do Cloud Build incluem permissões para upload e download de artefatos do Artifact Registry.

    Permissões necessárias

    Para conseguir as permissões necessárias para concluir o tutorial, peça ao administrador para conceder a você os seguintes papéis do IAM no seu projeto:

    Para mais informações sobre como conceder papéis, consulte Gerenciar acesso.

    Também é possível conseguir as permissões necessárias com papéis personalizados ou outros papéis predefinidos.

  16. Ative os tipos de registro de auditoria do Cloud: Leitura de administradores, Leitura de dados e Gravação de dados no Google Cloud Storage:

    No nível do projeto, é preciso ter o papel de gerenciamento de identidade e acesso (IAM) roles/owner para configurar os registros de auditoria de acesso a dados para os recursos do Google Cloud.

    1. Leia a política de IAM do projeto e guarde-a em um arquivo:
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. Edite sua política em /tmp/policy.yaml, adicionar ou alterar somente a configuração dos registros de auditoria de acesso a dados.

      auditConfigs:
      - auditLogConfigs:
      - logType: ADMIN_READ
      - logType: DATA_WRITE
      - logType: DATA_READ
      service: storage.googleapis.com
    3. Crie sua nova política do IAM:
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      Se o comando anterior relatar um conflito com outra mudança, repita essas etapas, começando com a leitura da política do IAM do projeto.
  17. A conta de serviço padrão do Compute Engine é criada automaticamente depois de ativar ou usar um serviço do Google Cloud que usa o Compute Engine.

    Para fins de teste, é possível anexar essa conta de serviço a um gatilho do Eventarc para representar a identidade do gatilho. Observe o formato de e-mail a ser usado ao criar um acionador:

    PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Substitua PROJECT_NUMBER pelo número do projeto do Google Cloud. Encontre o número do projeto na página Boas-vindas do console do Google Cloud ou executando o seguinte comando:

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

    A conta de serviço do Compute Engine recebe o papel básico de Editor (roles/editor) de modo automático no projeto. No entanto, se as concessões automáticas de papéis tiverem sido desativadas, consulte as instruções aplicáveis em Papéis e permissões para criar uma nova conta de serviço e conceder os papéis necessários.

  18. Conceda o papel de receptor de eventos do Eventarc (roles/eventarc.eventReceiver) no projeto à conta de serviço padrão do Compute Engine para que o gatilho do Eventarc possa receber eventos de provedores de eventos.
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role=roles/eventarc.eventReceiver
  19. Se você ativou o agente de serviço do Cloud Pub/Sub até 8 de abril de 2021, para oferecer compatibilidade com solicitações push autenticadas do Pub/Sub, conceda o papel de Criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator) ao agente de serviço. Caso contrário, esse papel é concedido por padrão:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-pubsub.iam.gserviceaccount.com \
        --role=roles/iam.serviceAccountTokenCreator
  20. Faça o download e instale a ferramenta de gerenciamento de código-fonte Git.

Criar um repositório padrão do Artifact Registry

Crie um repositório padrão do Artifact Registry para armazenar a imagem do contêiner:
gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

Substitua REPOSITORY por um nome exclusivo para o repositório.

Criar um bucket do Cloud Storage

No guia de início rápido, usamos o Cloud Storage como origem do evento. Para criar um bucket de armazenamento:

gsutil mb -l ${REGION} gs://events-quickstart-PROJECT_ID/

Depois que a origem do evento é criada, implante o serviço de receptor de eventos no Cloud Run.

Implantar o serviço de receptor de eventos no Cloud Run

Implante um serviço do Cloud Run que recebe e registra eventos. Para implantar o serviço de receptor de eventos de amostra:

  1. Clone o repositório do GitHub:

    Go

    git clone https://github.com/GoogleCloudPlatform/golang-samples.git
    cd golang-samples/eventarc/audit_storage
    

    Java

    git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
    cd java-docs-samples/eventarc/audit-storage
    

    .NET

    git clone https://github.com/GoogleCloudPlatform/dotnet-docs-samples.git
    cd dotnet-docs-samples/eventarc/audit-storage
    

    Node.js

    git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
    cd nodejs-docs-samples/eventarc/audit-storage
    

    Python

    git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
    cd python-docs-samples/eventarc/audit-storage
    
  2. Crie o contêiner e faça upload dele para o Cloud Build:

    gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/helloworld-events:v1
    
  3. Implante a imagem do contêiner no Cloud Run:

    gcloud run deploy helloworld-events \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/helloworld-events:v1 \
        --allow-unauthenticated
    

    Quando a implantação for bem-sucedida, a linha de comando exibirá o URL de serviço.

    Agora que você implantou o serviço de receptor de eventos chamado helloworld-events no Cloud Run, configure o gatilho.

Criar um gatilho do Eventarc

O gatilho do Eventarc envia eventos do bucket do Cloud Storage para o serviço helloworld-events do Cloud Run.

  1. Crie um gatilho que filtre eventos do Cloud Storage e que usem a conta de serviço padrão do Compute Engine do projeto do Google Cloud:

    gcloud eventarc triggers create events-quickstart-trigger \
        --destination-run-service=helloworld-events \
        --destination-run-region=${REGION} \
        --event-filters="type=google.cloud.audit.log.v1.written" \
        --event-filters="serviceName=storage.googleapis.com" \
        --event-filters="methodName=storage.objects.create" \
        --service-account=PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Isso gera um gatilho chamado events-quickstart-trigger.

    Ao criar um gatilho do Eventarc pela primeira vez em um projeto do Google Cloud, pode haver um atraso no provisionamento do agente de serviço do Eventarc. Esse problema geralmente pode ser resolvido ao tentar criar o acionador novamente. Para mais informações, consulte Erros de permissão negada.

  2. Para confirmar se events-quickstart-trigger foi criado, execute:

    gcloud eventarc triggers list --location=${REGION}

    O events-quickstart-trigger está listado com um destino que é o serviço do Cloud Run, helloworld-events.

Gerar e visualizar um evento

  1. Para gerar um evento, faça upload de um arquivo de texto para o Cloud Storage.

     echo "Hello World" > random.txt
     gsutil cp random.txt gs://events-quickstart-PROJECT_ID/random.txt
    

    O upload gera um evento e o serviço do Cloud Run registra a mensagem do evento.

  2. Para visualizar as entradas de registro relacionadas a eventos criadas pelo serviço, execute o seguinte comando:

    gcloud logging read 'textPayload: "Detected change in Cloud Storage bucket"'
    
  3. Procure uma entrada de registro semelhante a esta:

    Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
    

    Em que BUCKET_NAME é o nome do bucket do Cloud Storage.

Você implantou com sucesso um serviço de receptor de eventos no Cloud Run, criou um gatilho do Eventarc, gerou um evento a partir do Cloud Storage e o visualizou nos registros do Cloud Run.

Limpar

O Cloud Run não gera custos quando o serviço não está em uso, mas ainda é possível receber cobranças pelo armazenamento da imagem do contêiner no Artifact Registry, pelo armazenamento de arquivos no bucket do Cloud Storage e por recursos do Eventarc.

Você pode:

  1. Exclua a imagem do contêiner.

  2. Excluir o bucket de armazenamento.

  3. Excluir o gatilho do Eventarc.

Se preferir, exclua o projeto do Google Cloud para evitar cobranças. A exclusão do projeto do Google Cloud interrompe o faturamento de todos os recursos usados no projeto.

Delete a Google Cloud project:

gcloud projects delete PROJECT_ID

A seguir