Événements de routage sur les projets Google Cloud


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 :

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

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

  3. 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. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

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.

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Installez Google Cloud CLI.
  5. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  6. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  7. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  8. Installez Google Cloud CLI.
  9. Pour initialiser gcloudCLI, exécutez la commande suivante :

    gcloud init
  10. Mettez à jour les composants gcloud :
    gcloud components update
  11. 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 :

Événements inter-projets : Cloud Pub/Sub et Eventarc

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

  2. Dans votre deuxième projet, procédez comme suit :

    1. Activez les API Cloud Run et Eventarc :

      gcloud services enable run.googleapis.com eventarc.googleapis.com
      
    2. Définissez l'emplacement par défaut :

      REGION=REGION
      

      Remplacez REGION par un emplacement Eventarc compatible de votre choix. Exemple : us-central1.

    3. Créez un sujet Pub/Sub

      TOPIC=my-topic
      gcloud pubsub topics create $TOPIC
      
    4. 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é.

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

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

  4. 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"
    
  5. Définissez l'ID de projet Google Cloud sur votre deuxième projet :

    gcloud config set project PROJECT_TWO_ID
    
  6. 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 :

Événements inter-projets : Cloud Storage et Eventarc

  1. Définissez l'ID de projet Google Cloud sur votre premier projet :

    gcloud config set project PROJECT_ONE_ID
    
  2. Créez un bucket Cloud Storage :

    PROJECT1=$(gcloud config get-value project)
    BUCKET=$PROJECT1-cross-project
    gsutil mb -l $REGION gs://$BUCKET
    
  3. Créez une notification Pub/Sub pour le bucket dans le sujet de votre deuxième projet :

    gsutil notification create -t projects/PROJECT_TWO_ID/topics/$TOPIC -f json gs://$BUCKET
    
  4. Importez un fichier dans le bucket :

    echo "Hello World" > random.txt
    gsutil cp random.txt gs://$BUCKET/random.txt
    
  5. Définissez l'ID de projet Google Cloud sur votre deuxième projet :

    gcloud config set project PROJECT_TWO_ID
    
  6. 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 :

Événements inter-projets : Cloud Audit Logs et Eventarc

  1. Définissez l'ID de projet Google Cloud sur votre premier projet :

    gcloud config set project PROJECT_ONE_ID
    
  2. 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.

    1. 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
      
    2. 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
      
    3. 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.

  3. 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.
    
  4. Définissez l'ID de projet Google Cloud sur votre deuxième projet :

    gcloud config set project PROJECT_TWO_ID
    
  5. 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.

  6. Définissez l'ID de projet Google Cloud sur votre premier projet :

    gcloud config set project PROJECT_ONE_ID
    
  7. Dans votre premier projet, créez une instance de VM Compute Engine.

    Si vous utilisez Google Cloud Console pour créer l'instance de VM, vous pouvez accepter les valeurs par défaut pour ce tutoriel.

  8. Définissez l'ID de projet Google Cloud sur votre deuxième projet :

    gcloud config set project PROJECT_TWO_ID
    
  9. 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 :

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Supprimer les ressources du tutoriel

  1. Supprimez le service Cloud Run que vous avez déployé dans ce tutoriel :

    gcloud run services delete SERVICE_NAME

    SERVICE_NAME est le nom de service que vous avez choisi.

    Vous pouvez également supprimer des services Cloud Run à partir de Google Cloud Console.

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

  3. Supprimez les autres ressources Google Cloud créées dans ce tutoriel :

    • Supprimez le déclencheur Eventarc :

      gcloud eventarc triggers delete TRIGGER_NAME
      
      Remplacez TRIGGER_NAME par le nom de votre déclencheur.

    • Supprimez le sujet Pub/Sub :

      gcloud pubsub topics delete TOPIC TOPIC_ID
      
      Remplacez TOPIC_ID par l'ID de votre sujet.

    • Supprimez le récepteur Cloud Logging :

      gcloud logging sinks delete SINK_NAME
      
      Remplacez SINK_NAME par le nom de votre récepteur.

Étape suivante