Este tutorial mostra como usar o Eventarc para ler eventos de uma origem num projeto e encaminhá-los para um destino noutro projeto. Google Cloud Google Cloud Isto é possível através da utilização do Pub/Sub como uma camada de transporte entre projetos.
Encaminhe eventos Pub/Sub entre projetos
Uma vez que o Pub/Sub é um serviço distribuído globalmente, pode criar um tópico num projeto, publicar nesse tópico a partir de outro projeto e, em seguida, acionar o Eventarc, que encaminha a mensagem para um serviço do Cloud Run:
Defina o Google Cloud ID do projeto para o seu segundo projeto:
gcloud config set project PROJECT_TWO_ID
Substitua
PROJECT_TWO_ID
pelo ID do seu segundo Google Cloud projeto.No segundo projeto, faça o seguinte:
Ative as APIs Cloud Run e Eventarc:
gcloud services enable run.googleapis.com eventarc.googleapis.com
Predefina a localização:
REGION=REGION
Substitua
REGION
pela localização do Eventarc suportada à sua escolha. Por exemplo,us-central1
.Crie um tópico do Pub/Sub:
TOPIC=my-topic gcloud pubsub topics create $TOPIC
Implemente um serviço do Cloud Run não autenticado com uma imagem pré-criada
us-docker.pkg.dev/cloudrun/container/hello
:gcloud run deploy hello \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --allow-unauthenticated \ --region=$REGION
Quando vir o URL do serviço, a implementação está concluída.
Associe o tópico ao serviço com um acionador do Eventarc:
gcloud eventarc triggers create cross-project-trigger \ --destination-run-service=hello \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_TWO_ID/topics/$TOPIC
Esta ação cria um acionador denominado
cross-project-trigger
.
Defina o Google Cloud ID do projeto para o seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
Substitua
PROJECT_ONE_ID
pelo ID do seu primeiro Google Cloud projeto.No primeiro projeto, publique uma mensagem no tópico do segundo projeto:
gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
Defina o Google Cloud ID do projeto para o seu segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, confirme que o evento gerado foi registado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:hello" --format=json
É devolvida uma entrada de registo semelhante à seguinte:
"message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"
Encaminhe eventos do Cloud Storage entre projetos
Use notificações do Pub/Sub para o Cloud Storage para publicar eventos de um projeto para outro e, em seguida, encaminhar os eventos para um serviço do Cloud Run através de um acionador do Eventarc:
Defina o Google Cloud ID do projeto para o seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
Crie um contentor do Cloud Storage:
PROJECT1=$(gcloud config get-value project) BUCKET=$PROJECT1-cross-project gcloud storage buckets create gs://$BUCKET --location=${REGION}
Crie uma notificação Pub/Sub para o contentor no tópico do segundo projeto:
gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
Carregue um ficheiro para o contentor:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET/random.txt
Defina o Google Cloud ID do projeto para o seu segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, confirme que o evento gerado foi registado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:random.txt" --format=json
É devolvida uma entrada de registo semelhante à seguinte:
Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: { "kind": "storage#object", "id": "project1-cross-project/random.txt/1635327604259719", "selfLink": "https://www.googleapis.com/storage/v1/b/project1-cross-project/o/random.txt", "name": "random.txt", "bucket": "project1-cross-project", "generation": "1635327604259719", [...] }
Encaminhe eventos dos registos de auditoria do Google Cloud entre projetos
Os pedidos ao seu serviço podem ser acionados quando é criada uma entrada do registo de auditoria que corresponde aos critérios de filtro do acionador. (Para mais informações, consulte o artigo Determine os filtros de eventos para os registos de auditoria do Cloud.) Neste caso, quando é criada uma instância de VM do Compute Engine no seu primeiro projeto, uma entrada do registo de auditoria que corresponda aos critérios de filtro do acionador permite-lhe capturar e encaminhar um evento para um serviço do Cloud Run no segundo projeto:
Defina o Google Cloud ID do projeto para o seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
No seu primeiro projeto, ative os tipos de registos Admin Read, Data Read e Data Write para o Compute Engine:
Tenha em atenção que, ao nível do projeto, precisa da função de gestão de identidade e de acesso (IAM) para configurar os registos de auditoria de acesso a dados para os seus recursos.
roles/owner
Google CloudLeia a política IAM do seu projeto e armazene-a num ficheiro:
gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
Editar
/tmp/policy.yaml
, adicionando ou alterando apenas a configuração dos registos de auditoria de acesso aos dados.auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: compute.googleapis.com
Escreva a sua nova Política IAM:
gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
Se o comando anterior comunicar um conflito com outra alteração, repita estes passos, começando por ler a política de IAM do projeto.
No primeiro projeto, crie um destinatário do Cloud Logging para encaminhar os registos de auditoria do Google Cloud para o tópico no segundo projeto:
gcloud logging sinks create cross-project-sink \ pubsub.googleapis.com/projects/PROJECT_TWO_ID/topics/my-topic \ --log-filter='protoPayload.methodName="beta.compute.instances.insert"'
Deve ser devolvido um lembrete semelhante ao seguinte:
Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
Defina o Google Cloud ID do projeto para o seu segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, conceda a função à conta de serviço:
gcloud pubsub topics add-iam-policy-binding my-topic \ --member=SERVICE_ACCOUNT \ --role=roles/pubsub.publisher
Substitua
SERVICE_ACCOUNT
pelo endereço de email da conta de serviço devolvido no passo anterior.Defina o Google Cloud ID do projeto para o seu primeiro projeto:
gcloud config set project PROJECT_ONE_ID
No seu primeiro projeto, crie uma instância de VM do Compute Engine.
Se estiver a usar a Google Cloud consola para criar a instância da VM, pode aceitar as predefinições para os fins deste tutorial.
Defina o Google Cloud ID do projeto para o seu segundo projeto:
gcloud config set project PROJECT_TWO_ID
No segundo projeto, confirme que o evento gerado foi registado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:beta.compute.instances.insert" --format=json
É devolvida uma entrada de registo semelhante à seguinte:
Received event of type google.cloud.pubsub.topic.v1.messagePublished. Eventdata: { "logName": "projects/workflows-atamel/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1635330842489-5cf5321f4f454-ecc363cd-3883c08d", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "methodName": "beta.compute.instances.insert", } [...] }