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