Receba um evento dos registos de auditoria da nuvem


Este tutorial mostra como implementar um serviço do Cloud Run autenticado que recebe eventos do Cloud Storage através dos registos de auditoria do Google Cloud. Use este tutorial para implementar cargas de trabalho de produção. O acionador do Eventarc filtra eventos com base nas entradas dos registos de auditoria do Google Cloud. Para mais informações, consulte o artigo Determine os filtros de eventos para os registos de auditoria do Cloud.

Pode concluir este tutorial através da Google Cloud consola ou da CLI Google Cloud.

Objetivos

Neste tutorial, vai:

  1. Crie um contentor do Cloud Storage para ser a origem de eventos.

  2. Implemente um serviço de receção de eventos no Cloud Run.

  3. Crie um acionador do Eventarc.

  4. Gere um evento carregando um ficheiro para o contentor do Cloud Storage e veja-o nos registos do Cloud Run.

Custos

Neste documento, usa os seguintes componentes faturáveis do Google Cloud:

Para gerar uma estimativa de custos com base na sua utilização projetada, use a calculadora de preços.

Os novos Google Cloud utilizadores podem ser elegíveis para uma avaliação gratuita.

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.

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.

Tenha em atenção que, por predefinição, as autorizações do Cloud Build incluem autorizações para carregar e transferir artefactos do Artifact Registry.

Autorizações necessárias

Para receber as autorizações de que precisa para concluir este tutorial, 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.

Conclua os seguintes passos através da Google Cloud consola ou da CLI gcloud:

Consola

  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. In the Google Cloud console, on the project selector page, select or create 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.

    Go to project selector

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

  4. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create 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.

    Go to project selector

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

  7. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the APIs

  8. Para configurar o acesso aos dados que é registado nos seus registos de auditoria, ative os tipos de registos Admin Read, Data Read e Data Write para o Google Cloud Storage:

    Aceder aos registos de auditoria

  9. Na Google Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  10. Clique em Criar conta de serviço.
  11. Introduza um nome da conta de serviço a apresentar na Google Cloud consola.

    A Google Cloud consola gera um ID da conta de serviço com base neste nome. Edite o ID, se necessário. Não pode alterar o ID posteriormente.

  12. Opcional: introduza uma descrição da conta de serviço.
  13. Se não quiser definir controlos de acesso agora, clique em Concluído para terminar a criação da conta de serviço.

    Para definir os controlos de acesso agora, clique em Criar e continuar e continue para o passo seguinte.

  14. Selecione as funções Cloud Run Invoker e Eventarc Event Receiver para conceder no projeto à conta de serviço associada ao seu acionador do Eventarc.

    Para fins de teste, isto concede a função Cloud Run Invoker a todos os serviços e trabalhos do Cloud Run no projeto. No entanto, pode conceder a função no serviço. Para mais informações, consulte o artigo Conceda autorizações de serviço do Cloud Run.

    Tenha em atenção que, se criar um acionador para um serviço do Cloud Run autenticado sem conceder a função de invocador do Cloud Run, o acionador é criado com êxito e está ativo. No entanto, o acionador não funciona como esperado e é apresentada uma mensagem semelhante à seguinte nos registos:

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

gcloud

  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. Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com 
          logging.googleapis.com  pubsub.googleapis.com  run.googleapis.com 
          storage.googleapis.com  and eventarc.googleapis.com
  8. Install the Google Cloud CLI.

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

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

    gcloud init
  11. 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.

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

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

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com 
          logging.googleapis.com  pubsub.googleapis.com  run.googleapis.com 
          storage.googleapis.com  and eventarc.googleapis.com
  14. Atualize os componentes de gcloud:
    gcloud components update
  15. Inicie sessão com a sua conta:
    gcloud auth login
    
  16. 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
  17. Para configurar o acesso a dados que é registado nos seus registos de auditoria, ative os tipos de registos ADMIN_READ, DATA_READ e DATA_WRITE para o serviço storage.googleapis.com:
    1. Leia a política IAM do seu projeto e armazene-a num ficheiro:
      gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
    2. Edite a sua política em /tmp/policy.yaml, adicionando ou alterando apenas a configuração dos registos de auditoria de acesso a dados.
      auditConfigs:
      - auditLogConfigs:
      - logType: ADMIN_READ
      - logType: DATA_WRITE
      - logType: DATA_READ
      service: storage.googleapis.com
    3. Escreva a sua nova Política IAM:
      gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
      Se o comando anterior comunicar um conflito com outra alteração, então repita estes passos, começando por ler a política de IAM do projeto.
  18. 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 demorar até sete minutos antes de poder usá-la. Se tentar usar uma conta de serviço imediatamente após a sua criação e receber um erro, aguarde, pelo menos, 60 segundos e tente novamente.
  19. Para confirmar que sample-service-account foi criado, execute:
    gcloud iam service-accounts list
    O resultado deve ser semelhante ao seguinte:
    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
  20. Conceda as funções de invocador do Cloud Run (run.invoker) e de recetor de eventos do Eventarc (roles/eventarc.eventReceiver) no projeto à conta de serviço associada ao acionador 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 PROJECT_ID pelo ID do seu Google Cloud projeto.

    Para fins de teste, isto concede a função Cloud Run Invoker a todos os serviços e trabalhos do Cloud Run no projeto. No entanto, pode conceder a função no serviço. Para mais informações, consulte o artigo Conceda autorizações de serviço do Cloud Run.

    Tenha em atenção que, se criar um acionador para um serviço do Cloud Run autenticado sem conceder a função de invocador do Cloud Run, o acionador é criado com êxito e está ativo. No entanto, o acionador não funciona como esperado e é apresentada uma mensagem semelhante à seguinte nos registos:

    The request was not authenticated. Either allow unauthenticated invocations or set the proper Authorization header.
  21. Crie um repositório padrão do Artifact Registry

    Crie um repositório padrão do Artifact Registry para armazenar a sua imagem de contentor.

    Consola

    1. Na Google Cloud consola, aceda à página Repositórios.

      Aceda a Repositórios

    2. Clique em Criar repositório.
    3. Configure o seu repositório:
      1. Introduza um Nome exclusivo.
      2. Em Formato, escolha Docker.
      3. Em Modo, escolha Padrão.
      4. Para Tipo de localização, escolha Região.
      5. Na lista Região, selecione us-central1 (Iowa).
    4. Aceite as outras predefiniçõ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 contentor do Cloud Storage

    Este tutorial usa o Cloud Storage como origem de eventos. Para criar um contentor de armazenamento:

    Consola

    1. Na Google Cloud consola, aceda à página Recipientes.

      Aceda a Recipientes

    2. Clique em Criar contentor.
    3. Introduza as informações do seu contentor e clique em Continuar para concluir cada passo:
      1. Introduza um Nome exclusivo. Por exemplo, eventarcbucket.
      2. Selecione Região como Tipo de localização.
      3. Selecione us-central1 (Iowa) como Localização.
      4. Selecione Padrão para a classe de armazenamento predefinida.
      5. Selecione Uniforme para Controlo de acesso.
    4. Clique em Criar.

    gcloud

    gcloud storage buckets create gs://events-tutorial-PROJECT_ID/ --location=$REGION

    Depois de criar a origem de eventos, pode implementar o serviço de receção de eventos no Cloud Run.

    Implemente o serviço de receção de eventos no Cloud Run

    Implemente um serviço do Cloud Run que receba e registe eventos. Para implementar o serviço de recetor de eventos de exemplo:

    Consola

    1. Clone o repositório de exemplo para a sua conta do GitHub:
    2. Go

      1. No GitHub, navegue para GoogleCloudPlatform/golang-samples
      2. Clique em Criar ramificação.
      3. Captura de ecrã do botão Criar ramificação.
      4. Se lhe for pedido, selecione a localização onde quer criar uma ramificação do repositório.

      Java

      1. No GitHub, navegue para GoogleCloudPlatform/java-docs-samples.
      2. Clique em Criar ramificação.
      3. Captura de ecrã do botão Criar ramificação.
      4. Se lhe for pedido, selecione a localização onde quer criar uma ramificação do repositório.

      .NET

      1. No GitHub, navegue para GoogleCloudPlatform/dotnet-docs-samples.
      2. Clique em Criar ramificação.
      3. Captura de ecrã do botão Criar ramificação.
      4. Se lhe for pedido, selecione a localização onde quer criar uma ramificação do repositório.

      Node.js

      1. No GitHub, navegue para GoogleCloudPlatform/nodejs-docs-samples.
      2. Clique em Criar ramificação.
      3. Captura de ecrã do botão Criar ramificação.
      4. Se lhe for pedido, selecione a localização onde quer criar uma ramificação do repositório.

      Python

      1. No GitHub, navegue para GoogleCloudPlatform/python-docs-samples.
      2. Clique em Criar ramificação.
      3. Captura de ecrã do botão Criar ramificação.
      4. Se lhe for pedido, selecione a localização onde quer criar uma ramificação do repositório.
    3. Na Google Cloud consola, aceda à página Serviços.
    4. Aceder a Serviços

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

      As alterações ao seu repositório do GitHub são automaticamente incorporadas em imagens de contentores no Artifact Registry e implementadas no Cloud Run.

    7. Clique em Configurar com o Cloud Build para abrir o formulário Configurar com o Cloud Build.
      1. Se lhe for pedido, ative a API Cloud Build e a API Artifact Analysis.
      2. Selecione GitHub como o fornecedor de repositórios.
      3. Se lhe for pedido, clique em Instalar o Google Cloud Build.
      4. Selecione o repositório do GitHub que bifurcou como o repositório.
      5. Clicar em Seguinte.
      6. No campo Ramo, introduza ^main$.
      7. Selecione Dockerfile como o Tipo de compilação e indique a localização de origem do Dockerfile:
        • eventarc/audit-storage/Dockerfile

          ou

        • eventarc/audit_storage/Dockerfile(Go)
      8. Clique em Guardar.
    8. No formulário Criar serviço, introduza um nome do serviço. Por exemplo, helloworld-events.
    9. Selecione us-central1(Iowa) como a Região onde quer que o seu serviço esteja localizado.
    10. Selecione qualquer uma das opções de Ingress com base no tráfego de entrada que quer permitir no serviço 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 contentor e carregue-o para o Cloud Build:
      gcloud builds submit --tag $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
      
    3. Implemente a imagem do contentor no Cloud Run:
      gcloud run deploy $SERVICE_NAME \
          --image $REGION-docker.pkg.dev/PROJECT_ID/REPOSITORY/$SERVICE_NAME:v1
      

      No comando para permitir invocações não autenticadas, introduza n.

      Quando a implementação é bem-sucedida, a linha de comandos apresenta o URL do serviço.

    Agora que implementou o serviço de receção de eventos denominado helloworld-events no Cloud Run, pode configurar o acionador.

    Crie um acionador do Eventarc

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

    Consola

    1. Na Google Cloud consola, aceda à página Acionadores.

      Aceda a Acionadores

    2. Clique em Criar acionador.
    3. Escreva um Nome do acionador.

      Este é o ID do acionador e tem de começar com uma letra. Pode conter até 63 letras minúsculas, números ou hífenes.

    4. Selecione um Tipo de acionador:
      • Originais: filtra eventos enviados por Google Cloud fornecedores (diretamente ou através de entradas dos registos de auditoria na nuvem) ou fornecedores através de mensagens do Pub/Sub.
      • Terceiros: filtra eventos enviados por fornecedores de terceiros.
    5. Na lista Fornecedor de eventos, selecione Cloud Storage como a origem dos eventos.
    6. Na lista Tipo de evento, selecione storage.objects.create.
    7. Na lista Região, selecione us-central1 como a região a partir da qual receber eventos.
    8. Selecione a conta de serviço que criou. Por exemplo, SERVICE_ACCOUNT_ID@PROJECT_ID.iam.gserviceaccount.com.
    9. Na lista Destino do evento, selecione Cloud Run.
    10. Na lista Selecionar um serviço do Cloud Run, selecione helloworld-events.
    11. Clique em Criar.
    12. Tenha em atenção que também pode criar um acionador do Eventarc através da página da consola do Cloud Run.

    gcloud

    1. Crie um acionador que filtre eventos do Cloud Storage e que use a conta de serviço que 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 Google Cloud ID do projeto.

      Onde:

      • type: especifica que os registos de auditoria são criados quando os critérios de filtro do acionador são cumpridos.
      • serviceName: o serviço que escreve o registo de auditoria, que é o Cloud Storage.
      • methodName: a operação que está a ser auditada, que é storage.objects.create.
      Esta ação cria um acionador denominado events-tutorial-trigger.
    2. Para confirmar que events-tutorial-trigger foi criado com êxito, execute o seguinte comando:
      gcloud eventarc triggers list --location=$REGION
    3. O acionador events-tutorial-trigger está listado com um objetivo de helloworld-events.

    Gere e veja um evento

    1. Para gerar um evento:

      Consola

      1. Crie um ficheiro de texto com o nome de ficheiro random.txt e o texto "Olá mundo".
      2. Na Google Cloud consola, aceda à página Recipientes.

        Aceda a Recipientes

      3. Selecione o contentor de armazenamento que criou.
      4. No separador Objetos, clique em Carregar ficheiros e carregue o ficheiro random.txt.

      gcloud

      Carregue um ficheiro de texto para o Cloud Storage:

      echo "Hello World" > random.txt
      gcloud storage cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
    2. Para ver a entrada do registo:
    3. Consola

      1. Na Google Cloud consola, aceda à página Serviços.

        Aceder a Serviços

      2. Na lista de serviços, clique no nome do serviço que criou para aceder à respetiva página de Detalhes do serviço.
      3. Clique no separador Registos para obter os registos de pedidos e contentores de todas as revisões deste serviço. Pode filtrar por nível de gravidade do registo.
      4. Procure uma entrada de registo semelhante a:
        Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
        onde BUCKET_NAME é o nome do contentor 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 registo semelhante a:
        Detected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
        onde BUCKET_NAME é o nome do contentor do Cloud Storage.

    Implementou com êxito um serviço de receção de eventos no Cloud Run, criou um acionador do Eventarc, gerou um evento a partir do Cloud Storage e viu-o nos registos do Cloud Run.

    Limpar

    Embora o Cloud Run não cobre custos quando o serviço não está a ser usado, ainda pode ser-lhe cobrado o armazenamento da imagem do contentor no Artifact Registry, o armazenamento de ficheiros no seu contentor do Cloud Storage e os recursos do Eventarc.

    Pode:

    1. Elimine a imagem de contentor.

    2. Elimine o contentor de armazenamento.

    3. Elimine o acionador do Eventarc.

    Em alternativa, pode eliminar o seu Google Cloud projeto para evitar incorrer em custos. A eliminação do seu Google Cloud projeto 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?