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.

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 zweitenGoogle 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. 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 erstenGoogle 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 Identity and Access Management (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.` 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 -Konsole 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",
      }
    [...]
    }