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:
Criar um bucket do Cloud Storage para ser a origem do evento.
Implantar um serviço de receptor de eventos no Cloud Run
Criar um gatilho do Eventarc.
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.
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:
-
Editor do Cloud Build (
roles/cloudbuild.builds.editor
) -
Administrador do Cloud Run (
roles/run.admin
) -
Administrador do Eventarc (
roles/eventarc.admin
) -
Acessador de exibição de registros (
roles/logging.viewAccessor
) -
Administrador de projetos do IAM (
roles/resourcemanager.projectIamAdmin
) -
Administrador da conta de serviço (
roles/iam.serviceAccountAdmin
) -
Usuário da conta de serviço (
roles/iam.serviceAccountUser
) -
Administrador do Service Usage (
roles/serviceusage.serviceUsageAdmin
) -
Administrador de armazenamento (
roles/storage.admin
)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Conclua as etapas a seguir usando o console do Google Cloud ou a gcloud CLI:
Console
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs.
- 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:
-
No console do Google Cloud, acesse a página Contas de serviço.
- Clique em Criar conta de serviço.
-
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.
- Opcional: digite uma descrição da conta de serviço.
-
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.
- 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.
- Quando terminar de adicionar papéis, clique em Continuar e Concluído para terminar de criar a conta de serviço.
gcloud
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:
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 - Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
-
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Artifact Registry, Cloud Build, Logging, Pub/Sub, Cloud Run, Cloud Storage, and Eventarc APIs:
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 - Atualize os componentes
gcloud
:gcloud components update
- Faça login usando sua conta:
gcloud auth login
- 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
- Para configurar quais acessos aos dados serão gravados nos registros de auditoria, ative os
tipos de registro
ADMIN_READ
,DATA_READ
eDATA_WRITE
para o serviçostorage.googleapis.com
:- Leia a política de IAM do projeto e guarde-a em um arquivo:
gcloud projects get-iam-policy PROJECT_ID > /tmp/policy.yaml
- 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
- Grave a nova política de IAM:
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.gcloud projects set-iam-policy PROJECT_ID /tmp/policy.yaml
- Leia a política de IAM do projeto e guarde-a em um arquivo:
- Crie uma conta de serviço para o projeto:
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.gcloud iam service-accounts create sample-service-account \ --description="A sample service account" \ --display-name="Sample service account"
- Para confirmar se a
sample-service-account
foi criada, execute: A saída será semelhante a esta:gcloud iam service-accounts list
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
- 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
- No console do Google Cloud, acesse a página Repositórios.
- Clique em Criar repositório.
- Configurar seu repositório:
- Insira um nome exclusivo.
- Em Formato, escolha Docker.
- Em Modo, escolha Padrão.
- Em Tipo de local, escolha Região.
- Na lista Região, selecione us-central1 (Iowa).
- 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
- No console do Google Cloud, acesse a página Buckets.
- Clique em Criar bucket.
- Insira as informações do bucket e clique em Continuar para concluir cada etapa:
- Insira um nome exclusivo. Por exemplo,
eventarcbucket
. - Selecione Região como o Tipo de local.
- Selecione us-central1 (Iowa) como o Local.
- Selecione Padrão na classe de armazenamento padrão.
- Selecione Uniforme para Controle de acesso.
- Insira um nome exclusivo. Por exemplo,
- Clique em Criar.
gcloud
gcloud storage buckets create gs://events-tutorial-PROJECT_ID/ --location=$REGION
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
- Para clonar o repositório de exemplo na sua conta do GitHub, siga estas instruções:
- No GitHub, acesse GoogleCloudPlatform/golang-samples.
- Clique em Bifurcar.
- Se solicitado, selecione o local em que você quer clonar o repositório.
- No GitHub, acesse GoogleCloudPlatform/java-docs-samples.
- Clique em Bifurcar.
- Se solicitado, selecione o local em que você quer clonar o repositório.
- No GitHub, acesse GoogleCloudPlatform/dotnet-docs-samples.
- Clique em Bifurcar.
- Se solicitado, selecione o local em que você quer clonar o repositório.
- No GitHub, acesse GoogleCloudPlatform/nodejs-docs-samples.
- Clique em Bifurcar.
- Se solicitado, selecione o local em que você quer clonar o repositório.
- No GitHub, acesse GoogleCloudPlatform/python-docs-samples.
- Clique em Bifurcar.
- Se solicitado, selecione o local em que você quer clonar o repositório.
- No console do Google Cloud, abra a página serviços.
- Clique em Criar serviço para exibir o formulário Criar serviço.
- 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.
- Clique em Configurar com o Cloud Build para abrir o formulário Configurar com o Cloud Build.
- Se solicitado, ative a API Cloud Build e a API Artifact Analysis.
- Selecione GitHub como Repositório do repositório.
- Se solicitado, clique em Instalar o Google Cloud Build.
- Selecione o repositório do GitHub que você bifurcou como Repositório.
- Clique em Próxima.
- No campo Ramificação, digite
^main$
. - 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)
- Clique em Salvar.
- No formulário Criar serviço, digite um nome de serviço.
Por exemplo,
helloworld-events
. - Selecione us-central1(Iowa) como a Região em que o serviço estará localizado.
- 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.
- Selecione Exigir autenticação.
- Clique em Criar.
Go
Java
.NET
Node.js
Python
gcloud
- 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
- 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
- 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
- No Console do Google Cloud, acesse a página Gatilhos.
- Clique em Criar gatilho.
- 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.
- 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.
- Na lista Provedor de eventos, selecione Cloud Storage como origem dos eventos.
- Na lista de tipo de Evento, selecione storage.objects.create.
- Na lista Região, selecione us-central1 como a região da qual você quer receber eventos.
- Selecione a conta de serviço que você criou. Exemplo,
SERVICE_ACCOUNT_ID@PROJECT_ID
.iam.gserviceaccount.com. - Na lista Destino do evento, selecione Cloud Run.
- Na lista Selecione um serviço do Cloud Run, selecione helloworld-events.
- Clique em Criar. Também é possível criar um gatilho do Eventarc usando a página do console do Cloud Run.
gcloud
- Crie um gatilho que filtre eventos do Cloud Storage e que use a conta de serviço que você criou:
Substituagcloud 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
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
.
events-tutorial-trigger
. - Para confirmar se
events-tutorial-trigger
foi criado, execute:gcloud eventarc triggers list --location=$REGION
O gatilho,
events-tutorial-trigger
, está listado com um
destino de helloworld-events
.
Gerar e visualizar um evento
- Para gerar um evento:
Console
- Crie um arquivo de texto com o nome
random.txt
e o texto "Hello World". - No console do Google Cloud, acesse a página Buckets.
- Selecione o bucket de armazenamento que você criou.
- 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 gcloud storage cp random.txt gs://events-tutorial-PROJECT_ID/random.txt
- Crie um arquivo de texto com o nome
- Para visualizar a entrada de registro:
- No console do Google Cloud, abra a página serviços.
- Na lista de serviços, clique no nome do serviço que você criou para acessar a página Detalhes do serviço.
- 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.
- Procure uma entrada de registro semelhante a esta:
em queDetected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
é o nome do bucket do Cloud Storage. -
gcloud logging read "resource.labels.service_name=helloworld-events AND textPayload:random.txt" --format=json
- Procure uma entrada de registro semelhante a esta:
em queDetected change in Cloud Storage bucket: storage.googleapis.com/projects/_/buckets/BUCKET_NAME/objects/random.txt
BUCKET_NAME
é o nome do bucket do Cloud Storage.
Console
gcloud
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:
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