Ce tutoriel explique comment utiliser Eventarc pour lire des événements à partir d'une source dans un projet Google Cloud et les acheminer vers une destination cible dans un autre projet Google Cloud. Cela est possible en utilisant Pub/Sub en tant que couche de transport inter-projets.
Objectifs
Au cours de ce tutoriel, vous allez :
Créez un sujet dans un projet, puis publiez-le dans ce sujet depuis un autre projet. Cela achemine les événements vers un service Cloud Run non authentifié à l'aide d'un déclencheur Eventarc.
Utilisez les notifications Pub/Sub pour Cloud Storage afin de publier des événements Cloud Storage d'un projet à un autre. Acheminez les événements vers un service Cloud Run non authentifié à l'aide d'un déclencheur Eventarc.
Utilisez les récepteurs Cloud Logging pour publier Cloud Audit Logs d'un projet à un autre. Acheminez les événements vers un service Cloud Run non authentifié à l'aide d'un déclencheur Eventarc.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
Les contraintes de sécurité définies par votre organisation peuvent vous empêcher d'effectuer les étapes suivantes. Pour obtenir des informations de dépannage, consultez la page Développer des applications dans un environnement Google Cloud limité.
Notez que vous aurez besoin de deux projets pour ce tutoriel. Les étapes suivantes s'appliquent aux deux projets.
- 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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Mettez à jour les composants gcloud :
gcloud components update
- Connectez-vous à votre compte :
gcloud auth login
Acheminer des événements Pub/Sub entre les projets
Pub/Sub étant un service distribué à l'échelle mondiale, vous pouvez créer un sujet dans un projet, publier ce sujet dans un autre projet, puis déclencher Eventarc qui achemine le message vers un service Cloud Run :
Définissez l'ID de projet Google Cloud sur votre deuxième projet :
gcloud config set project PROJECT_TWO_ID
Remplacez
PROJECT_TWO_ID
par l'ID de votre projet Google Cloud.Dans votre deuxième projet, procédez comme suit :
Activez les API Cloud Run et Eventarc :
gcloud services enable run.googleapis.com eventarc.googleapis.com
Définissez l'emplacement par défaut :
REGION=REGION
Remplacez
REGION
par un emplacement Eventarc compatible de votre choix. Exemple :us-central1
.Créez un sujet Pub/Sub
TOPIC=my-topic gcloud pubsub topics create $TOPIC
Déployez un service Cloud Run non authentifié à l'aide d'une image prédéfinie,
us-docker.pkg.dev/cloudrun/container/hello
:gcloud run deploy hello \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --allow-unauthenticated \ --region=$REGION
Lorsque l'URL du service s'affiche, cela signifie que le déploiement est terminé.
Connectez le sujet au service à l'aide d'un déclencheur 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
Cette action crée un déclencheur appelé
cross-project-trigger
.
Définissez l'ID de projet Google Cloud sur votre premier projet :
gcloud config set project PROJECT_ONE_ID
Remplacez
PROJECT_ONE_ID
par l'ID de votre projet Google Cloud.Dans votre premier projet, publiez un message sur le sujet du deuxième projet :
gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
Définissez l'ID de projet Google Cloud sur votre deuxième projet :
gcloud config set project PROJECT_TWO_ID
Dans votre deuxième projet, vérifiez que l'événement généré a été consigné :
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:hello" --format=json
Une entrée de journalisation semblable à la suivante est renvoyée :
"message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"
Acheminer des événements Cloud Storage entre les projets
Utilisez les notifications Pub/Sub pour Cloud Storage pour publier des événements d'un projet à un autre, puis acheminez les événements vers un service Cloud Run via un déclencheur Eventarc :
Définissez l'ID de projet Google Cloud sur votre premier projet :
gcloud config set project PROJECT_ONE_ID
Créez un bucket Cloud Storage :
PROJECT1=$(gcloud config get-value project) BUCKET=$PROJECT1-cross-project gcloud storage buckets create gs://$BUCKET --location=${REGION}
Créez une notification Pub/Sub pour le bucket dans le sujet de votre deuxième projet :
gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
Importez un fichier dans le bucket :
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET/random.txt
Définissez l'ID de projet Google Cloud sur votre deuxième projet :
gcloud config set project PROJECT_TWO_ID
Dans votre deuxième projet, vérifiez que l'événement généré a été consigné :
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:random.txt" --format=json
Une entrée de journalisation semblable à la suivante est renvoyée :
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", [...] }
Acheminer les événements Cloud Audit Logs entre les projets
Les requêtes adressées à votre service peuvent être déclenchées lorsqu'une entrée de journal d'audit créée est conforme aux critères de filtre du déclencheur. (Pour plus d'informations, consultez la section Déterminer des filtres d'événements pour Cloud Audit Logs.) Dans ce cas, lorsqu'une instance de VM Compute Engine est créée dans votre premier projet, une entrée de journal d'audit correspondant aux critères de filtre du déclencheur vous permet de capturer et d'acheminer un événement vers un service Cloud Run dans le deuxième projet :
Définissez l'ID de projet Google Cloud sur votre premier projet :
gcloud config set project PROJECT_ONE_ID
Dans votre premier projet, activez les types de journaux Lecture administrateur, Lecture de données et Écriture de données pour Compute Engine :
Notez qu'au niveau du projet, vous devez disposer du rôle Identity and Access Management (IAM)
roles/owner
pour configurer les journaux d'audit pour l'accès aux données pour vos ressources Google Cloud.Consultez la stratégie IAM de votre projet et stockez-la dans un fichier :
gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
Modifiez
/tmp/policy.yaml
, en ajoutant ou en modifiant uniquement la configuration des journaux d'audit des accès aux données.auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: compute.googleapis.com
Rédigez votre nouvelle stratégie IAM :
gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
Si la commande précédente signale un conflit avec une autre modification, répétez ces étapes en commençant par lire le stratégie IAM du projet.
Dans votre premier projet, créez un récepteur Cloud Logging pour acheminer Cloud Audit Logs vers le sujet de votre deuxième projet :
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"'
Un rappel semblable à celui-ci doit s'afficher :
Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
Définissez l'ID de projet Google Cloud sur votre deuxième projet :
gcloud config set project PROJECT_TWO_ID
Dans votre deuxième projet, attribuez le rôle au compte de service :
gcloud pubsub topics add-iam-policy-binding my-topic \ --member=SERVICE_ACCOUNT \ --role=roles/pubsub.publisher
Remplacez
SERVICE_ACCOUNT
par l'adresse e-mail du compte de service renvoyée à l'étape précédente.Définissez l'ID de projet Google Cloud sur votre premier projet :
gcloud config set project PROJECT_ONE_ID
Dans votre premier projet, créez une instance de VM Compute Engine.
Si vous utilisez la console Google Cloud pour créer l'instance de VM, vous pouvez accepter les valeurs par défaut pour ce tutoriel.
Définissez l'ID de projet Google Cloud sur votre deuxième projet :
gcloud config set project PROJECT_TWO_ID
Dans votre deuxième projet, vérifiez que l'événement généré a été consigné :
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:beta.compute.instances.insert" --format=json
Une entrée de journalisation semblable à la suivante est renvoyée :
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", } [...] }
Effectuer un nettoyage
Si vous avez créé un projet pour ce tutoriel, supprimez-le. Si vous avez utilisé un projet existant et que vous souhaitez le conserver sans les modifications du présent tutoriel, supprimez les ressources créées pour ce tutoriel.
Supprimer le projet
Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.
Pour supprimer le projet :
- 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.
Supprimer les ressources du tutoriel
Supprimez le service Cloud Run que vous avez déployé dans ce tutoriel :
gcloud run services delete SERVICE_NAME
Où
SERVICE_NAME
est le nom de service que vous avez choisi.Vous pouvez également supprimer des services Cloud Run à partir de Google Cloud Console.
Supprimez les configurations gcloud CLI par défaut que vous avez ajoutées lors de la configuration du tutoriel.
Exemple :
gcloud config unset run/region
ou
gcloud config unset project
Supprimez les autres ressources Google Cloud créées dans ce tutoriel :
Supprimez le déclencheur Eventarc :
Remplacezgcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
par le nom de votre déclencheur.Supprimez le sujet Pub/Sub :
Remplacezgcloud pubsub topics delete TOPIC TOPIC_ID
TOPIC_ID
par l'ID de votre sujet.Supprimez le récepteur Cloud Logging :
Remplacezgcloud logging sinks delete SINK_NAME
SINK_NAME
par le nom de votre récepteur.