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:
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.
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.
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.
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.
- 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
- Aktualisieren Sie die gcloud-Komponenten:
gcloud components update
- 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:
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.Gehen Sie im zweiten Projekt so vor:
Aktivieren Sie die Cloud Run und Eventarc APIs.
gcloud services enable run.googleapis.com eventarc.googleapis.com
Legen Sie den Standardstandort fest:
REGION=REGION
Ersetzen Sie
REGION
durch den unterstützten Eventarc-Standort Ihrer Wahl. Beispiel:us-central1
.Pub/Sub-Thema erstellen
TOPIC=my-topic gcloud pubsub topics create $TOPIC
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.
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.
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.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"
Legen Sie die Google Cloud-Projekt-ID auf Ihr zweites Projekt fest:
gcloud config set project PROJECT_TWO_ID
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:
Legen Sie als Google Cloud-Projekt-ID Ihr erstes Projekt fest:
gcloud config set project PROJECT_ONE_ID
Erstellen Sie einen Cloud Storage-Bucket:
PROJECT1=$(gcloud config get-value project) BUCKET=$PROJECT1-cross-project gcloud storage buckets create gs://$BUCKET --location=${REGION}
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
Laden Sie eine Datei in den Bucket hoch:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET/random.txt
Legen Sie die Google Cloud-Projekt-ID auf Ihr zweites Projekt fest:
gcloud config set project PROJECT_TWO_ID
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:
Legen Sie als Google Cloud-Projekt-ID Ihr erstes Projekt fest:
gcloud config set project PROJECT_ONE_ID
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.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
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
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.
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.
Legen Sie die Google Cloud-Projekt-ID auf Ihr zweites Projekt fest:
gcloud config set project PROJECT_TWO_ID
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.Legen Sie als Google Cloud-Projekt-ID Ihr erstes Projekt fest:
gcloud config set project PROJECT_ONE_ID
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.
Legen Sie die Google Cloud-Projekt-ID auf Ihr zweites Projekt fest:
gcloud config set project PROJECT_TWO_ID
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:
- 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.
Anleitungsressourcen löschen
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.
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
Löschen Sie sonstige Google Cloud-Ressourcen, die in dieser Anleitung erstellt wurden:
Löschen Sie den Eventarc-Trigger:
Ersetzen Siegcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
durch den Namen des Triggers.Löschen Sie das Pub/Sub-Thema:
Ersetzen Siegcloud pubsub topics delete TOPIC TOPIC_ID
TOPIC_ID
durch die ID Ihres Themas.Löschen Sie die Cloud Logging-Senke:
Ersetzen Siegcloud logging sinks delete SINK_NAME
SINK_NAME
durch den Namen Ihrer Senke.