Receber um evento dos Registros de auditoria do Cloud


Neste tutorial, mostramos como implantar um serviço autenticado do Cloud Run que recebe eventos do Cloud Storage usando os registros de auditoria do Cloud. Use este tutorial para implantar cargas de trabalho de produção. O gatilho Eventarc filtra eventos com base nas entradas de registros de auditoria do Cloud. Para mais informações, consulte Determinar filtros de evento para registros de auditoria do Cloud.

Conclua este tutorial usando o Console do Google Cloud ou a Google Cloud CLI.

Objetivos

Com este tutorial, você vai:

  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 do Eventarc.

  4. Gerar um evento fazendo upload de um arquivo no bucket do Cloud Storage e visualizá-lo nos registros do Cloud Run.

Custos

Neste documento, você usará os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custo baseada na projeção de uso deste tutorial, use a calculadora de preços. Novos usuários do Google Cloud podem estar qualificados para uma avaliação gratuita.

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.

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.

Conclua as etapas a seguir usando o console do Google Cloud ou a gcloud CLI:

Console

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  3. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  4. Ative as APIs Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage e Eventarc.

    Ative as APIs

  5. No console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar o seletor de projetos

  6. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  7. Ative as APIs Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage e Eventarc.

    Ative as APIs

  8. Para configurar quais acessos aos dados serão gravados nos registros de auditoria, ative as opções Leitura de administradores, Leitura de dados e Gravação de dados para o Google Cloud Storage:

    Vá para "Registros de Auditoria"

  9. No console do Google Cloud, acesse a página Contas de serviço.

    Acessar a página "Contas de serviço"

  10. Clique em Criar conta de serviço.
  11. Insira um nome de conta de serviço a ser exibido no Console do Google Cloud.

    O Console do Google Cloud gerará um ID de conta de serviço com base nesse nome. Edite o ID se for necessário. Não será possível alterar o ID depois.

  12. Opcional: digite uma descrição da conta de serviço.
  13. Se você não quiser definir controles de acesso agora, clique em Concluído para finalizar a criação da conta de serviço.

    Para definir os controles de acesso agora, clique em Criar e continuar e avance para a próxima etapa.

  14. Selecione os papéis Invocador do Cloud Run e Receptor de evento do Eventarc para conceder no projeto à conta de serviço associada ao gatilho do Eventarc de dois minutos.

    Para fins de teste, isso concede o papel de invocador do Cloud Run em todos os serviços e jobs do Cloud Run no projeto. No entanto, é possível conceder o papel no serviço. Para mais informações, consulte Conceder permissões de serviço do Cloud Run.

    Se você criar um gatilho para um serviço autenticado do Cloud Run sem conceder o papel de chamador do Cloud Run, o gatilho será criado com sucesso e estará ativo. No entanto, o acionador não funcionará conforme o esperado e uma mensagem semelhante à seguinte aparecerá nos registros:

    The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
  15. Quando terminar de adicionar papéis, clique em Continuar e Concluído para terminar de criar a conta de serviço.

gcloud

  1. Faça login na sua conta do Google Cloud. Se você começou a usar o Google Cloud agora, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
  2. Instale a CLI do Google Cloud.
  3. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  4. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  5. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  6. Ative as APIs Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage e Eventarc:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com 
     logging.googleapis.com  pubsub.googleapis.com  run.googleapis.com  storage.googleapis.com e eventarc.googleapis.com
  7. Instale a CLI do Google Cloud.
  8. Para inicializar a CLI gcloud, execute o seguinte comando:

    gcloud init
  9. Crie ou selecione um projeto do Google Cloud.

    • Crie um projeto do Google Cloud:

      gcloud projects create PROJECT_ID

      Substitua PROJECT_ID por um nome para o projeto do Google Cloud que você está criando.

    • Selecione o projeto do Google Cloud que você criou:

      gcloud config set project PROJECT_ID

      Substitua PROJECT_ID pelo nome do projeto do Google Cloud.

  10. Verifique se a cobrança está ativada para o seu projeto do Google Cloud.

  11. Ative as APIs Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage e Eventarc:

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com 
     logging.googleapis.com  pubsub.googleapis.com  run.googleapis.com  storage.googleapis.com e eventarc.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 tutorial:
    export REGION=us-central1
    gcloud config set run/region ${REGION}
    gcloud config set run/platform managed
    gcloud config set eventarc/location ${REGION}
    export SERVICE_NAME=helloworld-events
    
  15. Para configurar quais acessos aos dados serão gravados nos registros de auditoria, ative os tipos de registro ADMIN_READ, DATA_READ e DATA_WRITE para o serviço storage.googleapis.com:
    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. Editar 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. Grave a nova política de IAM:
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      Se o comando anterior relatar um conflito com outra alteração, repita essas etapas, começando com a leitura da política de IAM do projeto.
  16. Crie uma conta de serviço para o projeto:
    gcloud iam service-accounts create sample-service-account \
        --description="A sample service account" \
        --display-name="Sample service account"
    Depois de criar uma conta de serviço, pode levar até sete minutos para que você possa usá-la. Se você tentar usar imediatamente uma conta de serviço depois de criá-la e receber um erro, aguarde pelo menos 60 segundos e tente novamente.
  17. Para confirmar se a sample-service-account foi criada, execute:
    gcloud iam service-accounts list
    A saída será semelhante a esta:
    DISPLAY NAME                     EMAIL                                                               DISABLED
    Default compute service account  PROJECT_NUMBER-compute@developer.gserviceaccount.com                False
    Sample service account           sample-service-account@PROJECT_ID.iam.gserviceaccount.com           False
  18. Conceda os papéis de Invocador do Cloud Run (run.invoker) e Receptor de evento do Eventarc (roles/eventarc.eventReceiver ) no projeto para a conta de serviço associada ao gatilho do Eventarc:
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/run.invoker"
    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:sample-service-account@PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/eventarc.eventReceiver"

    Substitua o PROJECT_ID pelo ID do projeto do Google Cloud.

    Para fins de teste, isso concede o papel de Invocador do Cloud Run em todos os serviços e jobs do Cloud Run no projeto. No entanto, é possível conceder o papel no serviço. Para mais informações, consulte Conceder permissões de serviço do Cloud Run.

    Se você criar um gatilho para um serviço autenticado do Cloud Run sem conceder o papel de chamador do Cloud Run, o gatilho será criado com sucesso e estará ativo. No entanto, o acionador não funcionará conforme o esperado e uma mensagem semelhante à seguinte aparecerá nos registros:

    The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.

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 do Docker.

Console

  1. No console do Google Cloud, acesse a página Repositórios.

    Acessar repositórios

  2. Clique em Criar repositório.
  3. Configurar seu repositório:
    1. Insira um nome exclusivo.
    2. Em Formato, escolha Docker.
    3. Em Modo, escolha Padrão.
    4. Em Tipo de local, escolha Região.
    5. Na lista Região, selecione us-central1 (Iowa).
  4. Aceite todos os padrões e clique em Criar.

gcloud

gcloud artifacts repositories create REPOSITORY \
    --repository-format=docker \
    --location=$REGION

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

crie um bucket do Cloud Storage

Este tutorial usa o Cloud Storage como origem do evento. Para criar um bucket de armazenamento:

Console

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

    Acessar buckets

  2. Clique em Criar bucket.
  3. Insira as informações do bucket e clique em Continuar para concluir cada etapa:
    1. Insira um nome exclusivo. Por exemplo, eventarcbucket.
    2. Selecione Região como o Tipo de local.
    3. Selecione us-central1 (Iowa) como o Local.
    4. Selecione Padrão na classe de armazenamento padrão.
    5. Selecione Uniforme para Controle de acesso.
  4. Clique em Criar.

gcloud

gsutil mb -l $REGION gs://events-tutorial-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:

Console

  1. Para clonar o repositório de exemplo na sua conta do GitHub, siga estas instruções:
  2. Go

    1. No GitHub, acesse GoogleCloudPlatform/golang-samples.
    2. Clique em Bifurcar.
    3. Captura de tela do botão de divisão.
    4. Se solicitado, selecione o local em que você quer clonar o repositório.

    Java

    1. No GitHub, acesse GoogleCloudPlatform/java-docs-samples.
    2. Clique em Bifurcar.
    3. Captura de tela do botão de divisão.
    4. Se solicitado, selecione o local em que você quer clonar o repositório.

    .NET

    1. No GitHub, acesse GoogleCloudPlatform/dotnet-docs-samples.
    2. Clique em Bifurcar.
    3. Captura de tela do botão de divisão.
    4. Se solicitado, selecione o local em que você quer clonar o repositório.

    Node.js

    1. No GitHub, acesse GoogleCloudPlatform/nodejs-docs-samples.
    2. Clique em Bifurcar.
    3. Captura de tela do botão de divisão.
    4. Se solicitado, selecione o local em que você quer clonar o repositório.

    Python

    1. No GitHub, acesse GoogleCloudPlatform/python-docs-samples.
    2. Clique em Bifurcar.
    3. Captura de tela do botão de divisão.
    4. Se solicitado, selecione o local em que você quer clonar o repositório.
  3. No console do Google Cloud, abra a página serviços.
  4. Acessar Serviços

  5. Clique em Criar serviço para exibir o formulário Criar serviço.
  6. Selecione Implantar continuamente a partir de um repositório.

    As mudanças no repositório do GitHub são automaticamente integradas às imagens de contêiner no Artifact Registry e implantadas no Cloud Run.

  7. Clique em Configurar com o Cloud Build para abrir o formulário Configurar com o Cloud Build.
    1. Se solicitado, ative a API Cloud Build e a API Artifact Analysis.
    2. Selecione GitHub como Repositório do repositório.
    3. Se solicitado, clique em Instalar o Google Cloud Build.
    4. Selecione o repositório do GitHub que você bifurcou como Repositório.
    5. Clique em Next.
    6. No campo Ramificação, digite ^main$.
    7. Selecione Dockerfile como o Tipo de versão e forneça o local de origem do Dockerfile:
      • eventarc/audit-storage/Dockerfile

        ou

      • eventarc/audit_storage/Dockerfile(Go)
    8. Clique em Salvar.
  8. No formulário Criar serviço, digite um nome de serviço. Por exemplo, helloworld-events.
  9. Selecione us-central1(Iowa) como a Região em que o serviço estará localizado.
  10. Selecione qualquer uma das opções de Entrada com base no tráfego de entrada que você quer permitir no serviço do Cloud Run.
  11. Selecione Exigir autenticação.
  12. Clique em Criar.

gcloud

  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/$SERVICE_NAME:v1
    
  3. Implante a imagem do contêiner no Cloud Run:
    gcloud run deploy $SERVICE_NAME \
        --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
    

    No prompt para permitir invocações não autenticadas, digite n.

    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.

Console

  1. No Console do Google Cloud, acesse a página Gatilhos.

    Acessar gatilhos

  2. Clique em Criar gatilho.
  3. Digite um Nome de acionador.

    Esse é o ID do gatilho e precisa começar com uma letra. Ele pode conter até 63 letras minúsculas, números ou hifens.

  4. Selecione um Tipo de gatilho:
    • Próprio: filtra eventos enviados de provedores do Google Cloud (diretamente ou por entradas de Registros de auditoria do Cloud) ou provedores que usam mensagens do Pub/Sub.
    • Terceiros: filtra eventos enviados de provedores de terceiros.
  5. Na lista Provedor de eventos, selecione Cloud Storage como origem dos eventos.
  6. Na lista de tipo de Evento, selecione storage.objects.create.
  7. Na lista Região, selecione us-central1 como a região da qual você quer receber eventos.
  8. Selecione a conta de serviço que você criou. Por exemplo, SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com.
  9. Na lista Destino do evento, selecione Cloud Run.
  10. Na lista Selecione um serviço do Cloud Run, selecione helloworld-events.
  11. Clique em Criar.
  12. Também é possível criar um gatilho do Eventarc usando a página do console do Cloud Run.

gcloud

  1. Crie um gatilho que filtre eventos do Cloud Storage e que use a conta de serviço que você criou:
    gcloud eventarc triggers create events-tutorial-trigger \
        --destination-run-service=$SERVICE_NAME \
        --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=sample-service-account@PROJECT_ID.iam.gserviceaccount.com
    Substitua PROJECT_ID pelo ID do projeto do Google Cloud.

    Em que:

    • type: especifica que os registros de auditoria são criados quando os critérios de filtro do acionador são atendidos.
    • serviceName: o serviço que grava o registro de auditoria, que é o Cloud Storage.
    • methodName: a operação que está sendo auditada, que é storage.objects.create.
    Isso gera um gatilho chamado events-tutorial-trigger.
  2. Para confirmar se events-tutorial-trigger foi criado, execute:
    gcloud eventarc triggers list --location=$REGION
  3. O gatilho, events-tutorial-trigger, está listado com um destino de helloworld-events.

Gerar e visualizar um evento

  1. Para gerar um evento:

    Console

    1. Crie um arquivo de texto com o nome random.txt e o texto "Hello World".
    2. No console do Google Cloud, acesse a página Buckets.

      Acessar buckets

    3. Selecione o bucket de armazenamento que você criou.
    4. Na guia Objetos, clique em Fazer upload de arquivos e faça o upload do arquivo random.txt.

    gcloud

    Faça upload de um arquivo de texto para o Cloud Storage:

    echo "Hello World" > random.txt
    gsutil cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
  2. Para visualizar a entrada de registro:
  3. Console

    1. No console do Google Cloud, abra a página serviços.

      Acessar Serviços

    2. Na lista de serviços, clique no nome do serviço que você criou para acessar a página Detalhes do serviço.
    3. Clique na guia Registros para receber os registros de solicitação e contêiner para todas as revisões desse serviço. É possível filtrar por nível de gravidade de registro.
    4. 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.

    gcloud

    1. gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
    2. 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.

É possível:

  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.

Exclua um projeto do Google Cloud:

gcloud projects delete PROJECT_ID

A seguir