In dieser Anleitung wird gezeigt, wie Sie eine ereignisgesteuerte Cloud Functions-Funktion mit einem Cloud-Audit-Log-Trigger schreiben, bereitstellen und auslösen.
Eine der einzigartigen Funktionen von Cloud Functions (2. Generation) ist, dass die Funktionen durch Einträge von Cloud-Audit-Logs ausgelöst werden können. Viele Google Cloud-Produkte schreiben in Cloud-Audit-Logs, wenn wichtige produktspezifische Aktionen auftreten. Diese Logeinträge können die Ausführung von Cloud Functions in Echtzeit auslösen, sodass Nutzer automatisch verarbeiten und/oder darauf reagieren können.
Diese Logs werden von vielen verschiedenen Ereignissen in Google Cloud generiert und decken die meisten Google Cloud-Produkte ab. Daher können Sie in Cloud-Audit-Logs Trigger erstellen, die auf die meisten Statusänderungen in Google Cloud reagieren.
In dieser Anleitung erfahren Sie, wie Sie mithilfe von Cloud-Audit-Logs neu erstellte Compute Engine-Instanzen mit dem Namen der Entität (Person oder Dienstkonto) versehen, die sie erstellt hat.
Wenn Sie Cloud-Audit-Logs noch nicht kennen und weitere Informationen erhalten möchten, lesen Sie die Dokumentation zu Cloud-Audit-Logs.
Lernziele
- Schreiben Sie eine ereignisgesteuerten Cloud Functions-Funktion, die beim Erstellen einer Compute Engine-VM-Instanz ein Cloud-Audit-Logereignis empfängt.
- Lösen Sie die Funktion durch Erstellen einer Compute Engine-VM-Instanz aus. Anschließend wird die Instanz mit dem Namen der Entität (Person oder Dienstkonto) gekennzeichnet, die sie erstellt hat.
Kosten
In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:
- Cloud Functions
- Cloud Build
- Pub/Sub
- Artifact Registry
- Eventarc
- Cloud Logging
- Compute Engine
Weitere Informationen finden Sie unter Cloud Functions-Preise.
Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen.
Vorbereitung
- 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.
-
Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub APIs.
-
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.
-
Enable the Cloud Functions, Cloud Run, Cloud Build, Artifact Registry, Eventarc, Logging, Compute Engine, and Pub/Sub APIs.
- Installieren und initialisieren Sie das Cloud SDK.
- Aktualisieren Sie die
gcloud
-Komponenten: - Bereiten Sie die Entwicklungsumgebung vor.
gcloud components update
Benötigen Sie eine Eingabeaufforderung? Dazu steht die Google Cloud Shell zur Verfügung. Google Cloud Shell ist eine Befehlszeilenumgebung, in der das Google Cloud SDK bereits enthalten ist und daher nicht installiert werden muss. Das Google Cloud SDK ist außerdem auf den virtuellen Maschinen von Google Compute Engine vorinstalliert.
Vorbereitung
Öffnen Sie in der Google Cloud Console die Seite IAM und Verwaltung > Audit-Logs:
Aktivieren Sie die Cloud-Audit-Logs Administratorlesevorgänge, Datenlesevorgänge und Datenschreibvorgänge für die Compute Engine API:
Prüfen Sie, ob das Compute Engine-Dienstkonto die Rolle
Editor
hat. Dieses Dienstkonto wird als Dienstidentität für Cloud Functions verwendet:Zur Seite „IAM & Verwaltung > IAM“
Suchen Sie in der Tabelle nach dem Eintrag
PROJECT_NUMBER-compute@developer.gserviceaccount.com
und sehen Sie sich die SpalteRoles
an. Wenn die SpalteEditor
enthält, können Sie die folgenden Schritte überspringen. Andernfalls fahren Sie mit den nächsten Schritten fort und weisen dem Dienstkonto die erforderlichen Rollen zu.Weisen Sie dem Compute Engine-Dienstkonto des Projekts die Rolle
eventarc.eventReceiver
zu:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/eventarc.eventReceiver
Weisen Sie dem Compute Engine-Dienstkonto des Projekts die Rolle
run.invoker
zu, damit der Pub/Sub-Trigger die Funktion ausführen kann:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/run.invoker
Weisen Sie dem Compute Engine-Dienstkonto des Projekts die Rolle
compute.instanceAdmin
zu, damit der Funktionscode die erforderlichen Berechtigungen zum Abrufen von VM-Instanzen und zum Festlegen von Labels für sie hat:PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER=$(gcloud projects list --filter="project_id:$PROJECT_ID" --format='value(project_number)') # Allow service account token creation gcloud projects add-iam-policy-binding $PROJECT_ID \ --member serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \ --role roles/compute.instanceAdmin
Anwendung vorbereiten
Klonen Sie das Repository der Beispiel-App auf Ihren lokalen Computer:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Einfach loslegen (Go)
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Java
git clone https://github.com/GoogleCloudPlatform/java-docs-samples.git
Sie können auch das Beispiel als ZIP-Datei herunterladen und extrahieren.
Wechseln Sie in das Verzeichnis, das den Cloud Functions-Beispielcode für den Zugriff auf Cloud-Audit-Logs enthält:
Node.js
cd nodejs-docs-samples/functions/v2/autoLabelInstance/
Python
cd python-docs-samples/functions/v2/label_gce_instance/
Einfach loslegen (Go)
cd golang-samples/functions/functionsv2/label_gce_instance/
Java
cd java-docs-samples/functions/v2/label-compute-instance/
Sehen Sie sich den Beispielcode an:
Node.js
Python
Einfach loslegen (Go)
Java
Funktion bereitstellen
Führen Sie diesen Befehl in dem Verzeichnis mit dem Beispielcode (oder im Fall von Java die Datei pom.xml
) aus, um die Funktion mit einem Cloud-Audit-Logs-Trigger bereitzustellen:
Node.js
gcloud functions deploy nodejs-cal-function \ --gen2 \ --runtime=nodejs20 \ --region=REGION
\ --source=. \ --entry-point=autoLabelInstance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten Node.js-Version anzugeben und die Funktion auszuführen.
Python
gcloud functions deploy python-cal-function \ --gen2 \ --runtime=python312 \ --region=REGION
\ --source=. \ --entry-point=label_gce_instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten Python-Version anzugeben und die Funktion auszuführen.
Einfach loslegen (Go)
gcloud functions deploy go-cal-function \ --gen2 \ --runtime=go121 \ --region=REGION
\ --source=. \ --entry-point=label-gce-instance \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten Go-Version anzugeben und die Funktion auszuführen.
Java
gcloud functions deploy java-cal-function \ --gen2 \ --runtime=java17 \ --region=REGION
\ --source=. \ --entry-point=functions.AutoLabelInstance \ --memory=512MB \
--trigger-location=REGION
\
--trigger-event-filters="type=google.cloud.audit.log.v1.written" \
--trigger-event-filters="serviceName=compute.googleapis.com" \
--trigger-event-filters="methodName=v1.compute.instances.insert"
Verwenden Sie das Flag --runtime
, um die Laufzeit-ID einer unterstützten Java-Version anzugeben und die Funktion auszuführen.
Der obige Bereitstellungsbefehl gibt die folgenden Ereignisfilterparameter an, die der VM-Erstellung entsprechen:
type
: Der Ereignistyp von Cloud-Audit-Logs (google.cloud.audit.log.v1.written
).serviceName
: Der Name des Google Cloud-Dienstes, der den Logeintrag generiert hat, in diesem Fallcompute.googleapis.com
.methodName
: Der Name der API-Methode, die den Logeintrag generiert hat, in diesem Fallv1.compute.instances.insert
.
Funktion auslösen
Sobald die Funktion bereitgestellt ist, können Sie prüfen, ob sie funktioniert:
Erstellen Sie eine Compute Engine-VM-Instanz:
gcloud compute instances create
YOUR_INSTANCE_NAME
--zoneYOUR_ZONE
Alternativ können Sie die Google Cloud Console aufrufen und auf VM erstellen klicken.
Führen Sie den folgenden Befehl aus, um zu prüfen, ob die Instanz entsprechend beschriftet ist:
gcloud compute instances describe
YOUR_INSTANCE_NAME
\ --zoneYOUR_ZONE \ --format 'value(labels)'
Sie sollten ein Label mit dem Format
creator=YOURNAMEYOUR_DOMAIN
sehen.
Bereinigen
Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.
Projekt löschen
Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.
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.
Cloud Functions-Funktion löschen
Durch das Löschen von Cloud Functions-Funktionen werden keine in Cloud Storage gespeicherten Ressourcen entfernt.
Führen Sie den folgenden Befehl aus, um die in dieser Anleitung erstellte Cloud Functions-Funktion zu löschen:
Node.js
gcloud functions delete nodejs-cal-function --gen2 --region REGION
Python
gcloud functions delete python-cal-function --gen2 --region REGION
Einfach loslegen (Go)
gcloud functions delete go-cal-function --gen2 --region REGION
Java
gcloud functions delete java-cal-function --gen2 --region REGION
Sie können Cloud Functions-Funktionen auch über die Google Cloud Console löschen.
Compute Engine-VM-Instanz löschen
Führen Sie den folgenden Befehl aus, um die in dieser Anleitung erstellte Compute Engine-VM-Instanz zu löschen:
gcloud compute instances deleteYOUR_INSTANCE_NAME
--zoneYOUR_ZONE