Automatyczna klasyfikacja danych przesłanych do Cloud Storage za pomocą interfejsu DLP API i Cloud Functions

1. Przegląd

W nowoczesnej organizacji stale rośnie ilość danych pochodzących z różnych źródeł. Często wymaga to poddania danych kwarantannie i sklasyfikowania ich w celu strategicznego przechowywania i ochrony. Jeśli proces ten pozostanie ręczny, szybko stanie się kosztowny i niemożliwy do wykonania.

W tym samouczku dowiesz się, jak automatycznie klasyfikować dane przesyłane do Cloud Storage i przenosić je do odpowiedniego zasobnika. Zrobimy to za pomocą Cloud Pub/Sub, Cloud Functions, Cloud Data Loss Prevention i Cloud Storage.

Jakie zadania wykonasz

  • Utwórz zasobniki Cloud Storage, które będą używane w ramach potoku kwarantanny i klasyfikacji.
  • Utwórz prostą funkcję w Cloud Functions, która wywołuje interfejs DLP API po przesłaniu plików.
  • Utwórz temat i subskrypcję Pub/Sub, aby otrzymywać powiadomienia o zakończeniu przetwarzania plików.
  • Przesyłanie przykładowych plików do zasobnika kwarantanny w celu wywołania funkcji w Cloud Functions
  • Użyj interfejsu DLP API, aby sprawdzić i sklasyfikować pliki oraz przenieść je do odpowiedniego zasobnika.

Czego potrzebujesz

  • projekt Google Cloud ze skonfigurowanymi rozliczeniami; Jeśli nie masz konta, musisz je utworzyć.

2. Przygotowania

W tym module praktycznym będziemy udostępniać różne zasoby i usługi w chmurze oraz nimi zarządzać za pomocą wiersza poleceń w Cloud Shell. Spowoduje to otwarcie Cloud Shell wraz z edytorem Cloud Shell i sklonowanie repozytorium projektu towarzyszącego:

Upewnij się, że używasz właściwego projektu, ustawiając go za pomocą polecenia gcloud config set project [PROJECT_ID]

Włączanie interfejsów API

Włącz wymagane interfejsy API w projekcie Google Cloud:

  • Cloud Functions API – umożliwia zarządzanie prostymi funkcjami dostarczonymi przez użytkownika, które są wykonywane w reakcji na zdarzenia.
  • Cloud Data Loss Prevention (DLP) API – udostępnia metody wykrywania, analizy ryzyka i deidentyfikacji poufnych fragmentów w tekstach, obrazach i repozytoriach Google Cloud Platform.
  • Cloud Storage – Google Cloud Storage to usługa RESTowa umożliwiająca przechowywanie danych i uzyskiwanie do nich dostępu w infrastrukturze Google.

Uprawnienia kont usługi

Konto usługi to specjalny rodzaj konta, które jest używane przez aplikacje i maszyny wirtualne do wykonywania autoryzowanych wywołań interfejsu API.

Domyślne konto usługi App Engine

Domyślne konto usługi App Engine jest używane do wykonywania zadań w projekcie w chmurze w imieniu aplikacji działających w App Engine. To konto usługi jest domyślnie dostępne w projekcie z przypisaną rolą edytującego.

Najpierw przypiszemy do naszego konta usługi rolę administratora DLP, która jest wymagana do zarządzania zadaniami zapobiegania utracie danych:

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

Na koniec przyznaj rolę agenta usługi DLP API, która umożliwi kontu usługi dostęp do BigQuery, Storage, Datastore, PubSub i usługi zarządzania kluczami:

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

Konto usługi DLP

Oprócz konta usługi App Engine użyjemy też konta usługi DLP. To konto usługi zostało utworzone automatycznie po włączeniu interfejsu DLP API i początkowo nie ma przypisanych żadnych ról. Przypiszmy mu rolę wyświetlającego:

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. Zasobniki Cloud Storage

Teraz musimy utworzyć 3 zasobniki Cloud Storage do przechowywania danych:

  • Kosz na dane w kwarantannie: nasze dane zostaną początkowo przesłane tutaj.
  • Zasobnik danych wrażliwych: dane uznane przez interfejs DLP API za wrażliwe zostaną przeniesione do tego zasobnika.
  • Zasobnik danych niewrażliwych: dane, które według interfejsu DLP API nie są wrażliwe, zostaną przeniesione tutaj.

Za pomocą polecenia gsutil możemy utworzyć wszystkie 3 zasobniki naraz:

gsutil mb gs://[YOUR_QUARANTINE_BUCKET] \
gs://[YOUR_SENSITIVE_DATA_BUCKET] \
gs://[YOUR_NON_SENSITIVE_DATA_BUCKET] 

Zapisz nazwy utworzonych właśnie zasobników – będą nam później potrzebne.

4. Temat i subskrypcja Pub/Sub

Cloud Pub/Sub umożliwia asynchroniczne przesyłanie wiadomości między aplikacjami w modelu wiele do wielu. Publikujący tworzy wiadomość i publikuje ją w strumieniu wiadomości zwanym tematem. Subskrybent będzie otrzymywać te wiadomości za pomocą subskrypcji. W naszym przypadku na podstawie tej subskrypcji funkcja Cloud Functions przeniesie pliki do odpowiednich zasobników po uruchomieniu zadania DLP.

Najpierw utwórzmy temat. Za każdym razem, gdy plik zostanie dodany do zasobnika kwarantanny, pojawi się tu wiadomość. Nazwiemy go „classify-topic”.

gcloud pubsub topics create classify-topic

Subskrypcja otrzyma powiadomienie, gdy temat opublikuje wiadomość. Utwórzmy subskrypcję Pub/Sub o nazwie „classify-sub”:

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

Ta subskrypcja aktywuje drugą funkcję w Cloud Functions, która uruchomi zadanie DLP, które sprawdzi plik i przeniesie go we właściwe miejsce.

5. Cloud Functions

Cloud Functions umożliwia wdrażanie lekkich, opartych na zdarzeniach, asynchronicznych funkcji o jednym przeznaczeniu bez konieczności zarządzania serwerem lub środowiskiem wykonawczym. Wdrożymy 2 funkcje Cloud Functions za pomocą podanego pliku main.py, który znajduje się w dlp-cloud-functions-tutorials/gcs-dlp-classification-python/.

Zastąp zmienne

Zanim utworzymy funkcje, musimy zastąpić niektóre zmienne w pliku main.py.

W edytorze Cloud Shell zmodyfikuj plik main.py, zastępując wartości zmiennych identyfikatora projektu i zasobnika w wierszach od 28 do 34 odpowiednimi zasobnikami utworzonymi wcześniej:

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]'

Dodatkowo zastąp wartość zmiennej tematu Pub/Sub tematem Pub/Sub utworzonym w poprzednim kroku:

""" Pub/Sub topic to notify once the  DLP job completes."""
PUB_SUB_TOPIC = 'classify-topic'

Wdrażanie funkcji

W Cloud Shell przejdź do katalogu gcs-dlp-classification-python, w którym znajduje się plik main.py:

cd ~/cloudshell_open/dlp-cloud-functions-tutorials/gcs-dlp-classification-python

Czas wdrożyć kilka funkcji.

Najpierw wdróż funkcję create_DLP_job, zastępując [YOUR_QUARANTINE_BUCKET] prawidłową nazwą zasobnika. Ta funkcja jest aktywowana, gdy nowe pliki są przesyłane do wyznaczonego zasobnika kwarantanny Cloud Storage. Tworzy ona zadanie DLP dla każdego przesłanego pliku:

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

Następnie wdróż funkcję resolve_DLP, wskazując nasz temat jako jej aktywator. Ta funkcja nasłuchuje powiadomienia Pub/Sub zainicjowanego przez kolejne zadanie DLP z funkcji powyżej. Gdy tylko otrzyma powiadomienie Pub/Sub, pobiera wyniki zadania DLP i przenosi plik do odpowiedniego zasobnika: z danymi wrażliwymi lub bez nich.

gcloud functions deploy resolve_DLP --runtime python37 \
--trigger-topic classify-topic

Zweryfikuj

Sprawdź, czy obie funkcje w Cloud Functions zostały wdrożone za pomocą polecenia gcloud functions describe:

gcloud functions describe create_DLP_job
gcloud functions describe resolve_DLP

Jeśli wdrożenie się powiedzie, w wyniku pojawi się symbol ACTIVE.

6. Testowanie za pomocą przykładowych danych

Gdy wszystkie elementy są już na swoim miejscu, możemy przetestować działanie usługi na przykładowych plikach. W Cloud Shell zmień bieżący katalog roboczy na sample_data:

cd ~/cloudshell_open/dlp-cloud-functions-tutorials/sample_data

Nasze przykładowe pliki to pliki txt i csv zawierające różne dane. Pliki z prefiksem „sample_s” będą zawierać dane wrażliwe, a pliki z prefiksem „sample_n” nie. Na przykład plik sample_s20.csv zawiera dane sformatowane tak, aby wyglądały jak amerykańskie numery ubezpieczenia społecznego:

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

Z kolei dane w pliku sample_n15.csv nie byłyby uznawane za dane wrażliwe:

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

Aby sprawdzić, jak nasza konfiguracja będzie traktować pliki, prześlijmy wszystkie pliki testowe do kwarantanny.

zasobnik:

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

Początkowo nasze pliki będą znajdować się w zasobniku kwarantanny, do którego zostały przesłane. Aby to sprawdzić, zaraz po przesłaniu plików wyświetl zawartość zasobnika kwarantanny:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

Aby sprawdzić serię zdarzeń, które zostały przez nas zainicjowane, otwórz stronę Cloud Functions:

Kliknij menu Działania przy funkcji create_DLP_job i wybierz Wyświetl logi:

89211a959bf30392.png

W naszym dzienniku tej funkcji widzimy co najmniej 4 wpisy dotyczące każdego z naszych plików, które wskazują:

  • Rozpoczęto wykonywanie funkcji
  • funkcja została wywołana w przypadku konkretnego pliku;
  • Utworzono zadanie
  • Funkcja zakończyła wykonywanie

c864dff5a03c75a9.png

Gdy funkcja create_DLP_job zostanie wykonana dla każdego pliku, zostanie zainicjowane odpowiednie zadanie DLP. Otwórz stronę zadań DLP, aby wyświetlić listę zadań DLP w kolejce:

Zobaczysz listę zadań w stanach Oczekujące, Uruchomione i Zakończone. Każdy z nich odpowiada jednemu z przesłanych przez nas plików:

6af34e72ecb83faf.png

Aby wyświetlić więcej szczegółów, możesz kliknąć identyfikator dowolnego z tych zadań.

Jeśli wrócisz na stronę Cloud Functions i sprawdzisz logi funkcji resolve_DLP, zobaczysz co najmniej 8 wpisów dotyczących każdego pliku, które wskazują:

  • Rozpoczęto wykonywanie funkcji
  • Otrzymano powiadomienie Pub/Sub
  • Nazwa odpowiedniego zadania DLP
  • kod stanu,
  • Liczba wystąpień danych wrażliwych (jeśli występują).
  • Bucket, do którego zostanie przeniesiony plik
  • Zadanie DLP zakończyło analizowanie pliku
  • Funkcja zakończyła wykonywanie

5025bd672cba90a0.png

Gdy wszystkie wywołania funkcji resolve_DLP zostaną zakończone, ponownie sprawdź zawartość zasobnika kwarantanny:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

Tym razem powinna być całkowicie pusta. Jeśli jednak uruchomisz to samo polecenie w przypadku innych zasobników, zobaczysz, że pliki są doskonale rozdzielone na odpowiednie zasobniki.

7. Czyszczenie

Wiemy już, jak używać interfejsu DLP API w połączeniu z Cloud Functions do klasyfikowania danych. Teraz usuńmy z projektu wszystkie utworzone zasoby.

Usuwanie projektu

Jeśli wolisz, możesz usunąć cały projekt. W konsoli GCP otwórz stronę Cloud Resource Manager:

Na liście projektów wybierz projekt, nad którym pracowaliśmy, i kliknij Usuń. Pojawi się prośba o wpisanie identyfikatora projektu. Wpisz go i kliknij Wyłącz.

Możesz też usunąć cały projekt bezpośrednio z Cloud Shell za pomocą gcloud:

gcloud projects delete [PROJECT_ID]

Jeśli wolisz usuwać poszczególne komponenty, przejdź do następnej sekcji.

Cloud Functions

Usuń obie funkcje w Cloud Functions za pomocą gcloud:

gcloud functions delete -q create_DLP_job && gcloud functions delete -q resolve_DLP

Zasobniki Cloud Storage

Usuń wszystkie przesłane pliki i usuń zasobniki za pomocą narzędzia gsutil:

gsutil rm -r gs://[YOUR_QUARANTINE_BUCKET] \
gs://[YOUR_SENSITIVE_DATA_BUCKET] \
gs://[YOUR_NON_SENSITIVE_DATA_BUCKET] 

Pub/Sub

Najpierw usuń subskrypcję Pub/Sub za pomocą gcloud:

gcloud pubsub subscriptions delete classify-sub

Na koniec usuń temat Pub/Sub za pomocą gcloud:

gcloud pubsub topics delete classify-topic

8. Gratulacje!

Super! Udało się. Wiesz już, jak używać interfejsu DLP API razem z Cloud Functions do automatyzacji klasyfikacji plików.

Omówione zagadnienia

  • Utworzyliśmy zasobniki Cloud Storage do przechowywania naszych danych wrażliwych i niewrażliwych.
  • Utworzyliśmy temat i subskrypcję Pub/Sub, aby wywoływać funkcję w Cloud Functions.
  • Utworzyliśmy Cloud Functions, które uruchamiają zadanie DLP, które kategoryzuje pliki na podstawie zawartych w nich danych wrażliwych.
  • Przesłaliśmy dane testowe i sprawdziliśmy logi Stackdriver naszych funkcji Cloud Functions, aby zobaczyć, jak to działa.