Automatische Klassifizierung von Daten, die mit der DLP API und Cloud Functions in Cloud Storage hochgeladen wurden

1. Übersicht

In modernen Unternehmen geht eine ständig wachsende Menge an Daten aus einer Vielzahl von Quellen ein. Dies erfordert häufig die Quarantäne und Klassifizierung dieser Daten, um sie strategisch zu speichern und zu schützen – eine Aufgabe, die schnell kostspielig und unmöglich wird, wenn sie manuell bleiben.

In diesem Codelab erfahren Sie, wie Sie in Cloud Storage hochgeladene Daten automatisch klassifizieren und in einen entsprechenden Storage-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 Cloud Functions-Funktion erstellen, die beim Hochladen von Dateien die DLP API aufruft
  • Erstellen Sie ein Pub/Sub-Thema und -Abo, damit Sie benachrichtigt werden, wenn die Dateiverarbeitung abgeschlossen ist.
  • Beispieldateien in den Quarantäne-Bucket hochladen, um eine Cloud Functions-Funktion aufzurufen
  • Verwenden Sie die DLP API, um die Dateien zu prüfen und zu klassifizieren und in den entsprechenden Bucket zu verschieben.

Voraussetzungen

  • Ein Google Cloud-Projekt mit eingerichteter Abrechnung. Falls Sie kein Google Ads-Konto haben, müssen Sie eines erstellen.

2. Einrichtung

In diesem Codelab stellen wir verschiedene Cloud-Ressourcen und -Dienste über die Cloud Shell-Befehlszeile bereit und verwalten sie. Mit dem folgenden Befehl wird Cloud Shell zusammen mit dem Cloud Shell-Editor geöffnet und das Repository des Companion-Projekts geklont:

Achten Sie darauf, dass Sie das richtige Projekt verwenden, 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 als Reaktion auf Ereignisse ausgeführt werden.
  • Cloud Data Loss Prevention (DLP) API: Bietet Methoden zur Erkennung, Risikoanalyse und De-Identifikation datenschutzsensibler Fragmente in Text, Bildern und Google Cloud Platform-Speicher-Repositories.
  • Cloud Storage: Google Cloud Storage ist ein RESTful-Dienst zum Speichern und Abrufen Ihrer Daten in der Infrastruktur von Google.

Berechtigungen für Dienstkonten

Ein Dienstkonto ist ein spezieller Kontotyp, der von Anwendungen und virtuellen Maschinen für autorisierte API-Aufrufe verwendet wird.

App Engine-Standarddienstkonto

Das App Engine-Standarddienstkonto wird verwendet, um im Namen Ihrer in App Engine ausgeführten Anwendungen Aufgaben in Ihrem Cloud-Projekt auszuführen. Dieses Dienstkonto ist standardmäßig in Ihrem Projekt vorhanden und hat die Rolle „Bearbeiter“.

Zuerst gewähren wir unserem Dienstkonto die Rolle „DLP-Administrator“, die zum Verwalten von Jobs zum Schutz vor Datenverlust erforderlich ist:

gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \
--role roles/dlp.admin

Gewähren Sie abschließend die Rolle „DLP API-Dienst-Agent“, die die Dienstkontoberechtigungen für BigQuery, Storage, Datastore, Pub/Sub und den Key Management Service gewährt:

gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \
--member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \
--role roles/dlp.serviceAgent

DLP-Dienstkonto

Neben dem App Engine-Dienstkonto verwenden wir auch ein DLP-Dienstkonto. Dieses Dienstkonto wurde automatisch erstellt, als die DLP API aktiviert wurde, und erhält anfangs keine Rollen. Weisen wir ihm die Rolle „Viewer“ 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 Sie drei Cloud Storage-Buckets zum Speichern der Daten erstellen:

  • Quarantäne-Bucket: Unsere Daten werden zunächst hier hochgeladen.
  • Bucket für sensible Daten: Daten, die von der DLP API als vertraulich eingestuft wurden, werden hierher verschoben.
  • Bucket für nicht vertrauliche Daten: Daten, die von der DLP API als nicht vertraulich eingestuft wurden, werden hierher verschoben

Mit dem Befehl gsutil können Sie 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, da wir diese später benötigen.

4. Pub/Sub-Thema und -Abo

Cloud Pub/Sub bietet asynchrones Messaging zwischen Anwendungen zwischen vielen und vielen. Ein Publisher erstellt eine Nachricht und veröffentlicht sie in einem Feed von Nachrichten, der als Thema bezeichnet wird. Ein Abonnent erhält diese Nachrichten als Abo. In unserem Fall können wir mit diesem Abo Dateien in die entsprechenden Buckets verschieben, nachdem ein DLP-Job ausgeführt wurde.

Lassen Sie uns zuerst ein Thema erstellen. Hier wird jedes Mal eine Nachricht veröffentlicht, wenn eine Datei zu unserem Quarantäne-Storage-Bucket hinzugefügt wird. Wir nennen sie „classify-topic“.

gcloud pubsub topics create classify-topic

Ein Abo wird benachrichtigt, wenn das Thema eine Nachricht veröffentlicht. Lassen Sie uns ein Pub/Sub-Abo mit dem Namen "classify-sub" erstellen:

gcloud pubsub subscriptions create classify-sub --topic classify-topic

Dieses Abo löst eine zweite Cloud Functions-Funktion aus, die einen DLP-Job initiiert, der die Datei prüft und an den richtigen Speicherort verschiebt.

5. Cloud Functions

Mit Cloud Functions können wir einfache, ereignisbasierte, asynchrone Funktionen für einen einzigen Zweck bereitstellen, ohne einen Server oder eine Laufzeitumgebung verwalten zu müssen. Wir werden zwei Cloud Functions-Funktionen mit der bereitgestellten Datei main.py bereitstellen, die sich in dlp-cloud-functions-tutorials/gcs-dlp-classification-python/ befindet

Variablen ersetzen

Bevor wir die Funktionen erstellen können, müssen wir einige Variablen in der Datei main.py ersetzen.

Passen Sie die Datei "main.py" im Cloud Shell-Editor an. Ersetzen Sie dazu die Werte für die Projekt-ID und die Bucket-Variablen in den Zeilen 28 bis 34 mithilfe der entsprechenden Buckets, die zuvor erstellt wurden:

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 Variable des Pub/Sub-Themas 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

Jetzt werden einige Funktionen bereitgestellt.

Stellen Sie zuerst die Funktion create_DLP_job bereit und ersetzen Sie dabei [YOUR_QUARANTINE_BUCKET] durch den richtigen Bucket-Namen. Diese Funktion wird ausgelöst, wenn neue Dateien in den angegebenen Cloud Storage-Quarantäne-Bucket hochgeladen werden, und erstellt für jede hochgeladene Datei einen DLP-Job:

gcloud functions deploy create_DLP_job --runtime python37 \
--trigger-event google.storage.object.finalize \
--trigger-resource [YOUR_QUARANTINE_BUCKET]

Als Nächstes stellen Sie die Funktion resolve_DLP bereit und geben unser Thema als Trigger dafür an. Diese Funktion wartet auf die Pub/Sub-Benachrichtigung, die durch den nachfolgenden DLP-Job von der obigen Funktion initiiert wurde. Sobald eine Pub/Sub-Benachrichtigung eingeht, werden die Ergebnisse aus dem DLP-Job abgerufen und die Datei entsprechend in einen sensiblen Bucket oder einen nicht vertraulichen Bucket verschoben:

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 Functions-Funktionen erfolgreich bereitgestellt wurden:

gcloud functions describe create_DLP_job
gcloud functions describe resolve_DLP

In der Ausgabe wird der Status ACTIVE nach der erfolgreichen Bereitstellung angezeigt.

6. Mit Beispieldaten testen

Nachdem alle Komponenten eingerichtet sind, können wir die Dinge mit einigen Beispieldateien testen. Ändern Sie in Cloud Shell Ihr aktuelles Arbeitsverzeichnis in 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“ sensible Daten enthalten, während solche mit dem Präfix „sample_n“ nicht. Beispiel: sample_s20.csv enthält das Format, das so formatiert ist, dass es wie US-amerikanische Sozialversicherungsnummern aussieht:

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

Andererseits würden die Daten in sample_n15.csv nicht als sensibel 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 Dateien behandelt werden, laden wir alle unsere Testdateien in die Quarantäne hoch.

Bucket:

gsutil -m cp * gs://[YOUR_QUARANTINE_BUCKET]

Anfangs befinden sich die Dateien in dem Quarantäne-Bucket, in den wir sie hochgeladen haben. Um dies zu überprüfen, listen Sie direkt nach dem Hochladen der Dateien den Inhalt des Quarantäne-Buckets auf:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

Wenn Sie sich die Reihe der Ereignisse ansehen möchten, die wir gestartet haben, rufen Sie 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:

89211a959bf30392.png

Im 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 Ausführung der Funktion wurde beendet.

c864dff5a03c75a9.png

Sobald die Funktion create_DLP_job für jede Datei abgeschlossen ist, wird ein entsprechender DLP-Job initiiert. Rufen Sie die Seite „DLP-Jobs“ auf, um eine Liste der DLP-Jobs in der Warteschlange aufzurufen:

Es wird eine Liste mit ausstehenden, laufenden oder abgeschlossenen Jobs angezeigt. Jede von ihnen entspricht einer der Dateien, die wir hochgeladen haben:

6af34e72ecb83faf.png

Sie können auf die ID eines dieser Jobs klicken, um weitere Details zu sehen.

Wenn Sie zur Cloud Functions-Seite zurückkehren und sich die Abmeldungen für die Funktion „Resolve_DLP“ ansehen, werden für jede Datei mindestens acht Einträge angezeigt, die Folgendes angeben:

  • Die Funktionsausführung wurde gestartet
  • Pub/Sub-Benachrichtigung wurde empfangen
  • Der Name des entsprechenden DLP-Jobs
  • Einen Statuscode
  • Anzahl der Instanzen sensibler Daten (falls vorhanden)
  • Bucket, in den die Datei verschoben wird
  • Der DLP-Job hat das Parsen der Datei abgeschlossen
  • Die Ausführung der Funktion wurde beendet.

5025bd672cba90a0.png

Nachdem alle Aufrufe der Funktion „Resolve_DLP“ abgeschlossen sind, sollten Sie sich noch einmal den Inhalt des Quarantäne-Buckets ansehen:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

Dieses Mal sollte sie komplett leer sein. Wenn Sie jedoch denselben Befehl wie oben für die anderen Buckets ausführen, finden Sie die Dateien perfekt in die entsprechenden Buckets unterteilt.

7. Bereinigen

Nachdem Sie nun gesehen haben, wie Sie die DLP API in Verbindung mit Cloud Functions zum Klassifizieren von Daten verwenden, 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, an dem Sie gearbeitet haben, und klicken Sie auf Löschen. Sie werden aufgefordert, die Projekt-ID einzugeben. Geben Sie den Code ein und klicken Sie auf Herunterfahren.

Alternativ können Sie das gesamte Projekt mit gcloud direkt aus Cloud Shell löschen:

gcloud projects delete [PROJECT_ID]

Wenn Sie die verschiedenen Komponenten 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

Aufbewahrungseimer

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

Schließlich löschen Sie mit gcloud das Pub/Sub-Thema:

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 erstellt, um unsere sensiblen und nicht sensiblen Daten zu speichern.
  • Wir haben ein Pub/Sub-Thema und -Abo erstellt, um eine Cloud Functions-Funktion auszulösen.
  • Wir haben Cloud Functions entwickelt, um einen DLP-Job zu starten, mit dem Dateien nach den darin enthaltenen sensiblen Daten kategorisiert werden
  • Wir haben Testdaten hochgeladen und unsere Cloud Functions-Funktionen Stackdriver-Logs, um den Prozess in Aktion zu sehen