Ereignisse in Google Cloud-Projekten weiterleiten


In dieser Anleitung erfahren Sie, wie Sie mit Eventarc Ereignisse aus einer Quelle in einem Google Cloud-Projekt lesen und an ein Zielziel in einem anderen Google Cloud-Projekt weiterleiten. Dies ist durch die Verwendung von Pub/Sub als projektübergreifende Transportebene möglich.

Ziele

In dieser Anleitung wird Folgendes beschrieben:

  1. Erstellen Sie ein Thema in einem Projekt und veröffentlichen Sie dann in dieses Thema aus einem anderen Projekt. Dabei werden Ereignisse mithilfe eines Eventarc-Triggers an einen nicht authentifizierten Cloud Run-Dienst weitergeleitet.

  2. Verwenden Sie Pub/Sub-Benachrichtigungen für Cloud Storage, um Cloud Storage-Ereignisse von einem Projekt in einem anderen Projekt zu veröffentlichen. Leiten Sie die Ereignisse mithilfe eines Eventarc-Triggers an einen nicht authentifizierten Cloud Run-Dienst weiter.

  3. Verwenden Sie Cloud Logging-Senken, um Cloud-Audit-Logs von einem Projekt in einem anderen Projekt zu veröffentlichen. Leiten Sie die Ereignisse mithilfe eines Eventarc-Triggers an einen nicht authentifizierten Cloud Run-Dienst weiter.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Vorbereitung

Von Ihrer Organisation definierte Sicherheitsbeschränkungen verhindern möglicherweise, dass die folgenden Schritte ausgeführt werden. Informationen zur Fehlerbehebung finden Sie unter Anwendungen in einer eingeschränkten Google Cloud-Umgebung entwickeln.

Beachten Sie, dass Sie für diese Anleitung zwei Projekte benötigen. Die folgenden Schritte gelten für beide Projekte.

  1. 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.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Install the Google Cloud CLI.
  5. To initialize the gcloud CLI, run the following command:

    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. Make sure that billing is enabled for your Google Cloud project.

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init
  10. Aktualisieren Sie die gcloud-Komponenten:
    gcloud components update
  11. Melden Sie sich mit Ihrem Konto an:
    gcloud auth login

Pub/Sub-Ereignisse projektübergreifend weiterleiten

Da Pub/Sub ein global verteilter Dienst ist, können Sie ein Thema in einem Projekt erstellen, in dieses Thema aus einem anderen Projekt veröffentlichen und dann Eventarc auslösen, wodurch die Nachricht an einen Cloud Run-Dienst weitergeleitet wird:

Projektübergreifende Ereignisfunktionen: Cloud Pub/Sub und Eventarc

  1. Legen Sie die Google Cloud-Projekt-ID auf Ihr zweites Projekt fest:

    gcloud config set project PROJECT_TWO_ID

    Ersetzen Sie PROJECT_TWO_ID durch die ID Ihres zweiten Google Cloud-Projekts.

  2. Gehen Sie im zweiten Projekt so vor:

    1. Aktivieren Sie die Cloud Run und Eventarc APIs.

      gcloud services enable run.googleapis.com eventarc.googleapis.com
    2. Legen Sie den Standardstandort fest:

      REGION=REGION

      Ersetzen Sie REGION durch den unterstützten Eventarc-Standort Ihrer Wahl. Beispiel: us-central1.

    3. Pub/Sub-Thema erstellen

      TOPIC=my-topic
      gcloud pubsub topics create $TOPIC
    4. So stellen Sie einen nicht authentifizierten Cloud Run-Dienst mit einem vordefinierten Image bereit:us-docker.pkg.dev/cloudrun/container/hello

      gcloud run deploy hello \
          --image=us-docker.pkg.dev/cloudrun/container/hello \
          --allow-unauthenticated \
          --region=$REGION

      Wenn die Dienst-URL angezeigt wird, wurde sie erfolgreich bereitgestellt.

    5. Verbinden Sie das Thema über einen Eventarc-Trigger mit dem Dienst:

      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

      Dadurch wird ein Trigger mit dem Namen cross-project-trigger erstellt.

  3. Legen Sie als Google Cloud-Projekt-ID Ihr erstes Projekt fest:

    gcloud config set project PROJECT_ONE_ID

    Ersetzen Sie PROJECT_ONE_ID durch die ID Ihres ersten Google Cloud-Projekts.

  4. Veröffentlichen Sie im ersten Projekt eine Nachricht zum Thema im zweiten Projekt:

    gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
  5. Legen Sie die Google Cloud-Projekt-ID auf Ihr zweites Projekt fest:

    gcloud config set project PROJECT_TWO_ID
  6. Prüfen Sie im zweiten Projekt, ob das generierte Ereignis protokolliert wurde:

    gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:hello" --format=json

    Es wird ein Logging-Eintrag ähnlich dem folgenden zurückgegeben:

    "message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"

Cloud Storage-Ereignisse projektübergreifend weiterleiten

Verwenden Sie Pub/Sub-Benachrichtigungen für Cloud Storage, um Ereignisse aus einem Projekt in einem anderen Projekt zu veröffentlichen und die Ereignisse dann über einen Eventarc-Trigger an einen Cloud Run-Dienst weiterzuleiten:

Projektübergreifende Ereignisfunktionen: Cloud Storage und Eventarc

  1. Legen Sie als Google Cloud-Projekt-ID Ihr erstes Projekt fest:

    gcloud config set project PROJECT_ONE_ID
  2. Erstellen Sie einen Cloud Storage-Bucket:

    PROJECT1=$(gcloud config get-value project)
    BUCKET=$PROJECT1-cross-project
    gcloud storage buckets create gs://$BUCKET --location=${REGION}
  3. Erstellen Sie eine Pub/Sub-Benachrichtigung für den Bucket zum Thema in Ihrem zweiten Projekt:

    gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
  4. Laden Sie eine Datei in den Bucket hoch:

    echo "Hello World" > random.txt
    gcloud storage cp random.txt gs://$BUCKET/random.txt
  5. Legen Sie die Google Cloud-Projekt-ID auf Ihr zweites Projekt fest:

    gcloud config set project PROJECT_TWO_ID
  6. Prüfen Sie im zweiten Projekt, ob das generierte Ereignis protokolliert wurde:

    gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:random.txt" --format=json

    Es wird ein Logging-Eintrag ähnlich dem folgenden zurückgegeben:

    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",
    [...]
    }

Cloud-Audit-Logereignisse projektübergreifend weiterleiten

Anfragen an Ihren Dienst können ausgelöst werden, wenn ein Audit-Logeintrag erstellt wird, der den Filterkriterien des Triggers entspricht. Weitere Informationen finden Sie unter Ereignisfilter für Cloud-Audit-Logs ermitteln. Wenn in Ihrem ersten Projekt eine Compute Engine-VM-Instanz erstellt wird, können Sie mit einem Audit-Logeintrag, der den Filterkriterien des Triggers entspricht, ein Ereignis erfassen und an einen Cloud Run-Dienst im zweiten Projekt weiterleiten:

Projektübergreifende Ereignisfunktionen: Cloud-Audit-Logs und Eventarc

  1. Legen Sie als Google Cloud-Projekt-ID Ihr erstes Projekt fest:

    gcloud config set project PROJECT_ONE_ID
  2. Aktivieren Sie im ersten Projekt die Logtypen Lesen durch Administrator, Daten lesen und Daten schreiben für Compute Engine:

    Beachten Sie, dass Sie auf Projektebene die Rolle roles/owner der Identitäts- und Zugriffsverwaltung (IAM) benötigen, um Audit-Logs für den Datenzugriff für Ihre Google Cloud-Ressourcen zu konfigurieren.

    1. Lesen Sie die IAM-Richtlinie des Projekts und speichern Sie sie in einer Datei:

      gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
      
    2. Bearbeiten Sie /tmp/policy.yaml und fügen Sie nur die Konfiguration der Audit-Logs für den Datenzugriff hinzu oder ändern Sie sie.

      auditConfigs:
      - auditLogConfigs:
        - logType: ADMIN_READ
        - logType: DATA_READ
        - logType: DATA_WRITE
        service: compute.googleapis.com
      
    3. Schreiben Sie die neue IAM-Richtlinie:

      gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
      

      Wenn der vorhergehende Befehl einen Konflikt mit einer anderen Änderung meldet, wiederholen Sie diese Schritte, beginnend mit dem Lesen der IAM-Richtlinie des Projekts.

  3. Erstellen Sie im ersten Projekt eine Cloud Logging-Senke, um Cloud-Audit-Logs an das Thema im zweiten Projekt weiterzuleiten:

    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"'

    Es sollte eine Erinnerung wie die folgende zurückgegeben werden:

    Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
  4. Legen Sie die Google Cloud-Projekt-ID auf Ihr zweites Projekt fest:

    gcloud config set project PROJECT_TWO_ID
  5. Weisen Sie dem Dienstkonto im zweiten Projekt die Rolle zu:

    gcloud pubsub topics add-iam-policy-binding my-topic \
        --member=SERVICE_ACCOUNT \
        --role=roles/pubsub.publisher

    Ersetzen Sie SERVICE_ACCOUNT durch die im vorherigen Schritt zurückgegebene E-Mail-Adresse des Dienstkontos.

  6. Legen Sie als Google Cloud-Projekt-ID Ihr erstes Projekt fest:

    gcloud config set project PROJECT_ONE_ID
  7. Erstellen Sie in Ihrem ersten Projekt eine Compute Engine-VM-Instanz.

    Wenn Sie die Google Cloud Console zum Erstellen der VM-Instanz verwenden, können Sie die Standardwerte für diese Anleitung akzeptieren.

  8. Legen Sie die Google Cloud-Projekt-ID auf Ihr zweites Projekt fest:

    gcloud config set project PROJECT_TWO_ID
  9. Prüfen Sie im zweiten Projekt, ob das generierte Ereignis protokolliert wurde:

    gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:beta.compute.instances.insert" --format=json

    Es wird ein Logging-Eintrag ähnlich dem folgenden zurückgegeben:

    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",
      }
    [...]
    }

Bereinigen

Wenn Sie ein neues Projekt für diese Anleitung erstellt haben, löschen Sie das Projekt. Wenn Sie ein vorhandenes Projekt verwendet haben und es beibehalten möchten, ohne die Änderungen in dieser Anleitung hinzuzufügen, löschen Sie die für die Anleitung erstellten Ressourcen.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Anleitungsressourcen löschen

  1. Löschen Sie den Cloud Run-Dienst, den Sie in dieser Anleitung bereitgestellt haben:

    gcloud run services delete SERVICE_NAME

    Dabei ist SERVICE_NAME der von Ihnen ausgewählte Dienstname.

    Sie können Cloud Run-Dienste auch über die Google Cloud Console löschen.

  2. Entfernen Sie gcloud CLI-Standardkonfigurationen, die Sie während der Einrichtung der Anleitung hinzugefügt haben.

    Beispiel:

    gcloud config unset run/region

    oder

    gcloud config unset project

  3. Löschen Sie sonstige Google Cloud-Ressourcen, die in dieser Anleitung erstellt wurden:

    • Löschen Sie den Eventarc-Trigger:

      gcloud eventarc triggers delete TRIGGER_NAME
      
      Ersetzen Sie TRIGGER_NAME durch den Namen des Triggers.

    • Löschen Sie das Pub/Sub-Thema:

      gcloud pubsub topics delete TOPIC TOPIC_ID
      
      Ersetzen Sie TOPIC_ID durch die ID Ihres Themas.

    • Löschen Sie die Cloud Logging-Senke:

      gcloud logging sinks delete SINK_NAME
      
      Ersetzen Sie SINK_NAME durch den Namen Ihrer Senke.

Nächste Schritte