En este tutorial se muestra cómo usar Eventarc para leer eventos de una fuente de un proyecto Google Cloud y dirigirlos a un destino de otro proyecto Google Cloud . Para ello, puedes usar Pub/Sub como capa de transporte entre proyectos.
Objetivos
En este tutorial, aprenderás a hacer lo siguiente:
Crea un tema en un proyecto y, a continuación, publica en ese tema desde otro proyecto. De esta forma, los eventos se dirigen a un servicio de Cloud Run no autenticado mediante un activador de Eventarc.
Usa las notificaciones de Pub/Sub para Cloud Storage si quieres publicar eventos de Cloud Storage de un proyecto a otro. Dirige los eventos a un servicio de Cloud Run no autenticado mediante un activador de Eventarc.
Usa receptores de Cloud Logging para publicar registros de auditoría de Cloud de un proyecto a otro. Dirige los eventos a un servicio de Cloud Run no autenticado mediante un activador de Eventarc.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Antes de empezar
Es posible que las restricciones de seguridad definidas por tu organización te impidan completar los siguientes pasos. Para obtener información sobre cómo solucionar problemas, consulta el artículo Desarrollar aplicaciones en un entorno limitado Google Cloud .
Ten en cuenta que necesitarás dos proyectos para seguir este tutorial. Los siguientes pasos se aplican a ambos proyectos.
- 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.
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
-
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 theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Install the Google Cloud CLI.
-
Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.
-
Para inicializar gcloud CLI, ejecuta el siguiente comando:
gcloud init
- Actualiza los componentes de gcloud:
gcloud components update
- Inicia sesión con tu cuenta:
gcloud auth login
Define el Google Cloud ID de proyecto de tu segundo proyecto:
gcloud config set project PROJECT_TWO_ID
Sustituye
PROJECT_TWO_ID
por el ID de tu segundo proyectoGoogle Cloud .En el segundo proyecto, haz lo siguiente:
Habilita las APIs Cloud Run y Eventarc:
gcloud services enable run.googleapis.com eventarc.googleapis.com
Definir la ubicación predeterminada:
REGION=REGION
Sustituye
REGION
por la ubicación de Eventarc que quieras. Por ejemplo,us-central1
.Crea un tema de Pub/Sub:
TOPIC=my-topic gcloud pubsub topics create $TOPIC
Despliega un servicio de Cloud Run sin autenticar con una imagen prediseñada:
us-docker.pkg.dev/cloudrun/container/hello
gcloud run deploy hello \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --allow-unauthenticated \ --region=$REGION
Cuando veas la URL del servicio, el despliegue se habrá completado.
Conecta el tema al servicio con un activador de 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
De esta forma, se crea un activador llamado
cross-project-trigger
.
Define el Google Cloud ID de proyecto de tu primer proyecto:
gcloud config set project PROJECT_ONE_ID
Sustituye
PROJECT_ONE_ID
por el ID de tu primerGoogle Cloud proyecto.En tu primer proyecto, publica un mensaje en el tema del segundo proyecto:
gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
Define el Google Cloud ID de proyecto de tu segundo proyecto:
gcloud config set project PROJECT_TWO_ID
En el segundo proyecto, compruebe que se ha registrado el evento generado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:hello" --format=json
Se devuelve una entrada de registro similar a la siguiente:
"message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"
Define el Google Cloud ID de proyecto de tu primer proyecto:
gcloud config set project PROJECT_ONE_ID
Crea un segmento de Cloud Storage:
PROJECT1=$(gcloud config get-value project) BUCKET=$PROJECT1-cross-project gcloud storage buckets create gs://$BUCKET --location=${REGION}
Crea una notificación de Pub/Sub para el segmento en el tema de tu segundo proyecto:
gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
Sube un archivo al segmento:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET/random.txt
Define el Google Cloud ID de proyecto de tu segundo proyecto:
gcloud config set project PROJECT_TWO_ID
En el segundo proyecto, compruebe que se ha registrado el evento generado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:random.txt" --format=json
Se devuelve una entrada de registro similar a la siguiente:
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", [...] }
Define el Google Cloud ID de proyecto de tu primer proyecto:
gcloud config set project PROJECT_ONE_ID
En tu primer proyecto, habilita los tipos de registro Actividad de administración, Lectura de datos y Escritura de datos para Compute Engine:
Ten en cuenta que, a nivel de proyecto, necesitas el
roles/owner
rol Gestión de Identidades y Accesos (IAM) para configurar los registros de auditoría de acceso a datos de tus recursos. Google CloudLee la política de gestión de identidades y accesos de tu proyecto y guárdala en un archivo:
gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
Edita
/tmp/policy.yaml
, añadiendo o cambiando solo la configuración de los registros de auditoría de acceso a datos.auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: compute.googleapis.com
Escribe la nueva política de gestión de identidades y accesos:
gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
Si el comando anterior informa de un conflicto con otro cambio, repite estos pasos, empezando por leer la política de IAM del proyecto.
En tu primer proyecto, crea un receptor de Cloud Logging para enrutar los registros de auditoría de Cloud al tema de tu segundo proyecto:
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"'
Debería aparecer un recordatorio similar al siguiente:
Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
Define el Google Cloud ID de proyecto de tu segundo proyecto:
gcloud config set project PROJECT_TWO_ID
En tu segundo proyecto, asigna el rol a la cuenta de servicio:
gcloud pubsub topics add-iam-policy-binding my-topic \ --member=SERVICE_ACCOUNT \ --role=roles/pubsub.publisher
Sustituye
SERVICE_ACCOUNT
por la dirección de correo de la cuenta de servicio que has obtenido en el paso anterior.Define el Google Cloud ID de proyecto de tu primer proyecto:
gcloud config set project PROJECT_ONE_ID
En tu primer proyecto, crea una instancia de VM de Compute Engine.
Si usas la Google Cloud consola para crear la instancia de VM, puedes aceptar los valores predeterminados en este tutorial.
Define el Google Cloud ID de proyecto de tu segundo proyecto:
gcloud config set project PROJECT_TWO_ID
En el segundo proyecto, compruebe que se ha registrado el evento generado:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:beta.compute.instances.insert" --format=json
Se devuelve una entrada de registro similar a la siguiente:
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", } [...] }
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Elimina el servicio de Cloud Run que has desplegado en este tutorial:
gcloud run services delete SERVICE_NAME
Donde
SERVICE_NAME
es el nombre del servicio que has elegido.También puedes eliminar servicios de Cloud Run desde la Google Cloud consola.
Elimina las configuraciones predeterminadas de la CLI de gcloud que hayas añadido durante la configuración del tutorial.
Por ejemplo:
gcloud config unset run/region
o
gcloud config unset project
Elimina otros recursos de Google Cloud que hayas creado en este tutorial:
Elimina el activador de Eventarc:
Sustituyegcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
por el nombre de tu activador.Elimina el tema de Pub/Sub:
Sustituyegcloud pubsub topics delete TOPIC TOPIC_ID
TOPIC_ID
por el ID del tema.Elimina el receptor de Cloud Logging:
Sustituyegcloud logging sinks delete SINK_NAME
SINK_NAME
por el nombre del receptor.
Encaminar eventos de Pub/Sub entre proyectos
Como Pub/Sub es un servicio distribuido a nivel mundial, puedes crear un tema en un proyecto, publicar en ese tema desde otro proyecto y, a continuación, activar Eventarc, que enruta el mensaje a un servicio de Cloud Run:
Encaminar eventos de Cloud Storage entre proyectos
Usa las notificaciones de Pub/Sub en Cloud Storage para publicar eventos de un proyecto a otro y, a continuación, enruta los eventos a un servicio de Cloud Run mediante un activador de Eventarc:
Enrutar eventos de registros de auditoría de Cloud entre proyectos
Las solicitudes a tu servicio se pueden activar cuando se crea una entrada de registro de auditoría que coincida con los criterios de filtro del activador. Para obtener más información, consulta Determinar filtros de eventos para registros de auditoría de Cloud. En este caso, cuando se crea una instancia de VM de Compute Engine en tu primer proyecto, una entrada de registro de auditoría que coincida con los criterios de filtro del activador te permite capturar y enrutar un evento a un servicio de Cloud Run en el segundo proyecto:
Limpieza
Si has creado un proyecto para este tutorial, elimínalo. Si has usado un proyecto y quieres conservarlo sin los cambios añadidos en este tutorial, elimina los recursos creados para el tutorial.
Eliminar el proyecto
La forma más fácil de evitar que te cobren es eliminar el proyecto que has creado para el tutorial.
Para ello, sigue las instrucciones que aparecen a continuación: