1. Übersicht
In modernen Unternehmen steigt die Menge an Daten, die aus verschiedenen Quellen eingehen, ständig. Dazu müssen diese Daten oft unter Quarantäne gestellt und klassifiziert werden, um sie strategisch zu speichern und zu schützen. Das ist eine Aufgabe, die schnell kostspielig und unmöglich wird, wenn sie manuell erfolgt.
In diesem Codelab sehen wir uns an, wie wir in Cloud Storage hochgeladene Daten automatisch klassifizieren und in einen entsprechenden Speicher-Bucket verschieben können. Dazu verwenden wir Cloud Pub/Sub, Cloud Functions, Cloud Data Loss Prevention und Cloud Storage.
Aufgaben
- Cloud Storage-Buckets zur Verwendung als Teil der Quarantäne- und Klassifizierungspipeline erstellen
- Eine einfache Funktion in Cloud Functions zum Aufrufen der DLP API beim Hochladen von Dateien erstellen
- Erstellen Sie ein Pub/Sub-Thema und ein Abo, damit Sie benachrichtigt werden, wenn die Dateiverarbeitung abgeschlossen ist.
- Beispieldateien in den Quarantäne-Bucket hochladen, um eine Cloud Function aufzurufen
- Mit der DLP API können Sie die Dateien prüfen und klassifizieren und sie in den entsprechenden Bucket verschieben.
Voraussetzungen
- Ein Google Cloud-Projekt mit eingerichteter Abrechnung. Wenn Sie noch kein Konto haben, müssen Sie eins erstellen.
2. Einrichtung
In diesem Codelab stellen wir verschiedene Cloud-Ressourcen und -Dienste über die Befehlszeile über Cloud Shell bereit und verwalten sie. Dadurch werden Cloud Shell und der Cloud Shell-Editor geöffnet und das zugehörige Projekt-Repository wird geklont:
Verwenden Sie das richtige Projekt, indem Sie es mit gcloud config set project [PROJECT_ID] festlegen.
APIs aktivieren
Aktivieren Sie die erforderlichen APIs in Ihrem Google Cloud-Projekt:
- Cloud Functions API: Verwaltet einfache von Nutzern bereitgestellte Funktionen, die in Reaktion auf Ereignisse ausgeführt werden.
- Cloud Data Loss Prevention (DLP) API: Bietet Methoden zum Erkennen, zur Risikoanalyse und zur De-Identifizierung von Fragmenten von datenschutzrechtlich sensiblen Daten in Text, Bildern und Google Cloud-Speicher-Repositories.
- Cloud Storage: Google Cloud Storage ist ein RESTful-Dienst zum Speichern Ihrer Daten in der Infrastruktur von Google und für den Zugriff auf diese Daten.
Berechtigungen für Dienstkonten
Ein Dienstkonto ist eine spezielle Art von Konto, das von Anwendungen und virtuellen Maschinen für autorisierte API-Aufrufe verwendet wird.
App Engine-Standarddienstkonto
Das App Engine-Standarddienstkonto wird verwendet, um Aufgaben in Ihrem Cloud-Projekt im Auftrag Ihrer Anwendungen auszuführen, die in App Engine ausgeführt werden. Dieses Dienstkonto ist standardmäßig in Ihrem Projekt mit der Rolle „Bearbeiter“ vorhanden.
Zuerst weisen wir unserem Dienstkonto die Rolle „DLP-Administrator“ zu, die zum Verwalten von Jobs zur Verhinderung von Datenverlust erforderlich ist:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \ --role roles/dlp.admin
Weisen Sie dem Dienstkonto schließlich die Rolle „DLP API Service Agent“ zu, damit es Berechtigungen für BigQuery, Storage, Datastore, Pub/Sub und Key Management Service erhält:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \ --role roles/dlp.serviceAgent
DLP-Dienstkonto
Zusätzlich zum App Engine-Dienstkonto verwenden wir auch ein DLP-Dienstkonto. Dieses Dienstkonto wurde automatisch erstellt, als die DLP API aktiviert wurde, und hat anfangs keine Rollen. Weisen wir ihm die Rolle „Betrachter“ zu:
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:service-`gcloud projects list --filter="PROJECT_ID:$GOOGLE_CLOUD_PROJECT" --format="value(PROJECT_NUMBER)"`@dlp-api.iam.gserviceaccount.com \ --role roles/viewer
3. Cloud Storage-Buckets
Jetzt müssen wir drei Cloud Storage-Buckets zum Speichern unserer Daten erstellen:
- Quarantäne-Bucket: Hier werden unsere Daten zuerst hochgeladen.
- Bucket für sensible Daten: Die Daten, die von der DLP API als sensibel eingestuft werden, werden hierher verschoben.
- Bucket für nicht vertrauliche Daten: Die Daten, die von der DLP API als nicht vertraulich eingestuft werden, werden hierhin verschoben.
Mit dem gsutil-Befehl können wir alle drei Buckets auf einmal erstellen:
gsutil mb gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
Notieren Sie sich die Namen der Buckets, die Sie gerade erstellt haben. Wir benötigen sie später.
4. Pub/Sub-Thema und ‑Abo
Cloud Pub/Sub bietet asynchrones m:n-Messaging zwischen Anwendungen. Ein Publisher erstellt eine Nachricht und veröffentlicht sie in einem Nachrichtenfeed, der als Thema bezeichnet wird. Ein Abonnent erhält diese Nachrichten über ein Abo. Basierend auf diesem Abo wird in unserem Fall eine Cloud-Funktion Dateien nach Ausführung eines DLP-Jobs in die entsprechenden Buckets verschieben.
Erstellen wir zuerst ein Thema. Hier wird jedes Mal eine Nachricht veröffentlicht, wenn eine Datei unserem Quarantäne-Speicher-Bucket hinzugefügt wird. Wir nennen es „classify-topic“.
gcloud pubsub topics create classify-topic
Ein Abo wird benachrichtigt, wenn eine Nachricht zum Thema veröffentlicht wird. Erstellen wir ein Pub/Sub-Abo mit dem Namen „classify-sub“:
gcloud pubsub subscriptions create classify-sub --topic classify-topic
Dieses Abo löst eine zweite Cloud-Funktion aus, die einen DLP-Job startet, der die Datei prüft und an den richtigen Ort verschiebt.
5. Cloud Functions
Mit Cloud Functions können wir einfache, ereignisbasierte, asynchrone Funktionen bereitstellen, die auf einen einzelnen Zweck ausgerichtet sind. Dabei muss keine Server- oder Laufzeitumgebung verwaltet werden. Wir stellen zwei Cloud Functions-Funktionen mit der bereitgestellten Datei main.py bereit, die sich in dlp-cloud-functions-tutorials/gcs-dlp-classification-python/ befindet.
Variablen ersetzen
Bevor wir unsere Funktionen erstellen können, müssen wir einige Variablen in unserer Datei main.py ersetzen.
Passen Sie im Cloud Shell-Editor die Datei „main.py“ an, indem Sie die Werte für die Projekt-ID und die Bucket-Variablen in den Zeilen 28 bis 34 durch die entsprechenden zuvor erstellten Buckets ersetzen:
main.py
PROJECT_ID = '[PROJECT_ID_HOSTING_STAGING_BUCKET]'
"""The bucket the to-be-scanned files are uploaded to."""
STAGING_BUCKET = '[YOUR_QUARANTINE_BUCKET]'
"""The bucket to move "sensitive" files to."""
SENSITIVE_BUCKET = '[YOUR_SENSITIVE_DATA_BUCKET]'
"""The bucket to move "non sensitive" files to."""
NONSENSITIVE_BUCKET = '[YOUR_NON_SENSITIVE_DATA_BUCKET]'
Ersetzen Sie außerdem den Wert für die Pub/Sub-Themenvariable durch das im vorherigen Schritt erstellte Pub/Sub-Thema:
""" Pub/Sub topic to notify once the DLP job completes."""
PUB_SUB_TOPIC = 'classify-topic'
Funktionen bereitstellen
Wechseln Sie in Cloud Shell in das Verzeichnis „gcs-dlp-classification-python“, in dem sich die Datei main.py befindet:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/gcs-dlp-classification-python
Es ist an der Zeit, einige Funktionen bereitzustellen.
Stellen Sie zuerst die Funktion create_DLP_job bereit und ersetzen Sie [YOUR_QUARANTINE_BUCKET] durch den richtigen Bucket-Namen. Diese Funktion wird ausgelöst, wenn neue Dateien in den dafür vorgesehenen Cloud Storage-Quarantäne-Bucket hochgeladen werden. Für jede hochgeladene Datei wird ein DLP-Job erstellt:
gcloud functions deploy create_DLP_job --runtime python37 \ --trigger-event google.storage.object.finalize \ --trigger-resource [YOUR_QUARANTINE_BUCKET]
Als Nächstes stellen wir die resolve_DLP-Funktion bereit und geben unser Thema als Trigger dafür an. Diese Funktion überwacht die Pub/Sub-Benachrichtigung, die vom nachfolgenden DLP-Job aus der Funktion oben initiiert wird. Sobald die Funktion eine Pub/Sub-Benachrichtigung erhält, ruft sie die Ergebnisse des DLP-Jobs ab und verschiebt die Datei entsprechend in den Bucket für sensible oder nicht sensible Daten:
gcloud functions deploy resolve_DLP --runtime python37 \ --trigger-topic classify-topic
Bestätigen
Prüfen Sie mit dem Befehl gcloud functions describe, ob beide Cloud-Funktionen erfolgreich bereitgestellt wurden:
gcloud functions describe create_DLP_job
gcloud functions describe resolve_DLP
Die Ausgabe lautet ACTIVE, wenn die Bereitstellung erfolgreich war.
6. Mit Beispieldaten testen
Nachdem alle Teile eingerichtet sind, können wir die Einrichtung mit einigen Beispieldateien testen. Wechseln Sie in Cloud Shell in das Verzeichnis sample_data:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/sample_data
Unsere Beispieldateien bestehen aus TXT- und CSV-Dateien mit verschiedenen Daten. Die Dateien mit dem Präfix „sample_s“ enthalten sensible Daten, die Dateien mit dem Präfix „sample_n“ nicht. Die Datei „sample_s20.csv“ enthält beispielsweise Daten, die wie US-amerikanische Sozialversicherungsnummern formatiert sind:
sample_s20.csv
Name,SSN,metric 1,metric 2
Maria Johnson,284-73-5110,5,43
Tyler Parker,284-73-5110,8,17
Maria Johnson,284-73-5110,54,63
Maria Johnson,245-25-8698,53,19
Tyler Parker,475-15-8499,6,67
Maria Johnson,719-12-6560,75,83
Maria Johnson,616-69-3226,91,13
Tzvika Roberts,245-25-8698,94,61
Die Daten in sample_n15.csv würden hingegen nicht als vertraulich eingestuft:
sample_n15.csv
record id,metric 1,metric 2,metric 3
1,59,93,100
2,53,13,17
3,59,67,53
4,52,93,34
5,14,22,88
6,18,88,3
7,32,49,5
8,93,46,14
Um zu sehen, wie unsere Einrichtung unsere Dateien behandelt, laden wir alle Testdateien in unsere Quarantäne hoch.
Bucket:
gsutil -m cp * gs://[YOUR_QUARANTINE_BUCKET]
Zuerst befinden sich unsere Dateien in dem Quarantäne-Bucket, in den wir sie hochgeladen haben. Um dies zu überprüfen, listen Sie den Inhalt des Quarantäne-Buckets direkt nach dem Hochladen der Dateien auf:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
Um die Reihe der Ereignisse zu sehen, die wir ausgelöst haben, rufen Sie zuerst die Seite „Cloud Functions“ auf:
Klicken Sie für die Funktion create_DLP_job auf das Menü „Aktionen“ und wählen Sie „Logs ansehen“ aus:

In unserem Log für diese Funktion sehen wir mindestens vier Einträge für jede unserer Dateien, die Folgendes angeben:
- Die Funktionsausführung wurde gestartet.
- Die Funktion wurde für eine bestimmte Datei ausgelöst.
- Ein Job wurde erstellt
- Die Funktion wurde vollständig ausgeführt.

Sobald die Funktion „create_DLP_job“ für jede Datei abgeschlossen ist, wird ein entsprechender DLP-Job gestartet. Rufen Sie die Seite „DLP-Jobs“ auf, um eine Liste der DLP-Jobs in der Warteschlange aufzurufen:
Sie sehen eine Liste der Jobs mit dem Status „Ausstehend“, „Wird ausgeführt“ oder „Abgeschlossen“. Jede entspricht einer der von uns hochgeladenen Dateien:

Sie können auf die ID eines dieser Jobs klicken, um weitere Details aufzurufen.
Wenn Sie zur Cloud Functions-Seite zurückkehren und die Logs für die Funktion „resolve_DLP“ aufrufen, sehen Sie mindestens acht Einträge für jede Datei. Diese geben Folgendes an:
- Die Funktionsausführung wurde gestartet.
- Pub/Sub-Benachrichtigung erhalten
- Der Name des entsprechenden DLP-Jobs
- Ein Statuscode
- Die Anzahl der Instanzen sensibler Daten (falls vorhanden)
- Der Bucket, in den die Datei verschoben wird
- Der DLP-Job hat das Parsen der Datei abgeschlossen
- Die Funktion wurde vollständig ausgeführt.

Sobald alle Aufrufe der Funktion „resolve_DLP“ abgeschlossen sind, sehen Sie sich den Inhalt des Quarantäne-Buckets noch einmal an:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
Dieses Mal sollte es vollständig leer sein. Wenn Sie denselben Befehl wie oben für die anderen Buckets ausführen, werden Sie feststellen, dass unsere Dateien perfekt in die entsprechenden Buckets aufgeteilt sind.
7. Bereinigen
Nachdem wir gesehen haben, wie die DLP API in Verbindung mit Cloud Functions zum Klassifizieren von Daten verwendet wird, bereinigen wir unser Projekt von allen Ressourcen, die wir erstellt haben.
Projekt löschen
Wenn Sie möchten, können Sie das gesamte Projekt löschen. Rufen Sie in der GCP Console die Seite Cloud Resource Manager auf:
Wählen Sie in der Projektliste das Projekt aus, in dem wir gearbeitet haben, und klicken Sie auf Löschen. Sie werden aufgefordert, die Projekt-ID einzugeben. Geben Sie sie ein und klicken Sie auf Herunterfahren.
Alternativ können Sie das gesamte Projekt direkt über Cloud Shell mit gcloud löschen:
gcloud projects delete [PROJECT_ID]
Wenn Sie die einzelnen Komponenten lieber einzeln löschen möchten, fahren Sie mit dem nächsten Abschnitt fort.
Cloud Functions
Löschen Sie beide Cloud Functions-Funktionen mit gcloud:
gcloud functions delete -q create_DLP_job && gcloud functions delete -q resolve_DLP
Storage-Buckets
Entfernen Sie alle hochgeladenen Dateien und löschen Sie die Buckets mit gsutil:
gsutil rm -r gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
Pub/Sub
Löschen Sie zuerst das Pub/Sub-Abo mit gcloud:
gcloud pubsub subscriptions delete classify-sub
Löschen Sie das Pub/Sub-Thema schließlich mit gcloud:
gcloud pubsub topics delete classify-topic
8. Glückwunsch!
Hurra! Du hast es geschafft. Sie haben gelernt, wie Sie die DLP API zusammen mit Cloud Functions verwenden, um die Klassifizierung von Dateien zu automatisieren.
Behandelte Themen
- Wir haben Cloud Storage-Buckets zum Speichern unserer vertraulichen und nicht vertraulichen Daten erstellt.
- Wir haben ein Pub/Sub-Thema und ein Abo erstellt, um eine Cloud Functions-Funktion auszulösen.
- Wir haben Cloud Functions erstellt, die einen DLP-Job starten, mit dem Dateien anhand der darin enthaltenen sensiblen Daten kategorisiert werden.
- Wir haben Testdaten hochgeladen und die Stackdriver-Logs unserer Cloud Functions-Funktionen geprüft, um den Prozess in Aktion zu sehen.