Receba eventos através dos registos de auditoria do Google Cloud (CLI gcloud)

Este início rápido mostra como receber eventos do Cloud Storage num serviço do Cloud Run não autenticado através do Eventarc.

Pode concluir este guia de início rápido através da Google Cloud CLI. Para obter instruções sobre como usar a consola, consulte o artigo Crie um acionador com a Google Cloud consola.

Neste início rápido, 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 de evento.

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

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. Enable the Artifact Registry, Cloud Build, Cloud Run, Eventarc, and Pub/Sub 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 run.googleapis.com eventarc.googleapis.com pubsub.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, Cloud Run, Eventarc, and Pub/Sub 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 run.googleapis.com eventarc.googleapis.com pubsub.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 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}
  17. 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.

  18. Ative os tipos de registos Admin Read, Data Read e Data Write dos registos de auditoria na nuvem no Google Cloud Storage.

    Tenha em atenção que, ao nível do projeto, precisa da função de gestão de identidades e acessos para configurar os registos de auditoria de acesso a dados para os seus recursos.roles/owner Google Cloud

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

  20. 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
  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. Transfira e instale a ferramenta de gestão de código-fonte do Git.
  23. Crie um repositório padrão do Artifact Registry

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

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

    Crie um contentor do Cloud Storage

    Este início rápido usa o Cloud Storage como origem de eventos. Para criar um contentor de armazenamento:

    gcloud storage buckets create gs://events-quickstart-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:

    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/helloworld-events:v1
    3. Implemente a imagem do contentor no Cloud Run:

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

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

      Agora que implementou o seu serviço de receção de eventos denominado helloworld-events no Cloud Run, pode configurar o seu 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

    1. Crie um acionador que filtre eventos do Cloud Storage e que use a Google Cloud conta de serviço predefinida do Compute Engine do projeto:

      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

      Esta ação cria um acionador denominado events-quickstart-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-quickstart-trigger foi criado com êxito, execute o seguinte comando:

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

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

    Gere e veja um evento

    1. Para gerar um evento, carregue um ficheiro de texto para o Cloud Storage:

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

      O carregamento gera um evento e o serviço do Cloud Run regista a mensagem do evento.

    2. Para ver as entradas de registo relacionadas com eventos criadas pelo seu serviço, execute o seguinte comando:

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

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

      em que 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?