Klasifikasi Otomatis Data Uploaded ke Cloud Storage dengan DLP API dan Cloud Functions

1. Ringkasan

Dalam organisasi modern, ada semakin banyak data yang berasal dari berbagai sumber. Hal ini sering kali memerlukan mengarantina dan mengklasifikasikan data tersebut untuk menyimpan dan melindunginya secara strategis. Tugas ini akan dengan cepat menjadi mahal dan tidak mungkin dilakukan jika tetap dilakukan secara manual.

Dalam codelab ini, kita akan melihat cara mengklasifikasikan data yang diupload ke Cloud Storage secara otomatis dan memindahkannya ke bucket penyimpanan yang sesuai. Kita akan melakukannya menggunakan Cloud Pub/Sub, Cloud Functions, Cloud Data Loss Prevention, dan Cloud Storage.

Yang akan Anda lakukan

  • Buat bucket Cloud Storage untuk digunakan sebagai bagian dari pipeline karantina dan klasifikasi.
  • Membuat Cloud Function sederhana yang memanggil DLP API saat file diupload.
  • Buat topik dan langganan Pub/Sub untuk memberi tahu Anda saat pemrosesan file selesai.
  • Upload file contoh ke bucket karantina untuk memanggil Cloud Function
  • Gunakan DLP API untuk memeriksa dan mengklasifikasi file, lalu memindahkannya ke bucket yang sesuai.

Yang Anda butuhkan

  • Project Google Cloud dengan penyiapan penagihan. Jika belum memilikinya, Anda harus membuatnya.

2. Mempersiapkan

Di codelab ini, kita akan menyediakan dan mengelola berbagai resource dan layanan cloud menggunakan command line melalui Cloud Shell. Perintah berikut akan membuka Cloud Shell bersama dengan Cloud Shell Editor dan meng-clone repositori project pendamping:

Pastikan Anda menggunakan project yang benar dengan menyetelnya menggunakan gcloud config set project [PROJECT_ID]

Aktifkan API

Aktifkan API yang diperlukan di project Google Cloud Anda:

  • Cloud Functions API - Mengelola fungsi ringan yang disediakan pengguna yang dijalankan sebagai respons terhadap event.
  • Cloud Data Loss Prevention (DLP) API - Menyediakan metode untuk deteksi, analisis risiko, dan de-identifikasi fragmen yang sensitif privasi dalam teks, gambar, dan repositori penyimpanan Google Cloud Platform.
  • Cloud Storage - Google Cloud Storage adalah layanan RESTful untuk menyimpan dan mengakses data Anda di infrastruktur Google.

Izin Akun Layanan

Akun layanan adalah jenis akun khusus yang digunakan oleh aplikasi dan virtual machine untuk melakukan panggilan API yang diotorisasi.

Akun Layanan Default App Engine

Akun layanan default App Engine digunakan untuk menjalankan tugas di project Cloud Anda atas nama aplikasi yang berjalan di App Engine. Akun layanan ini ada di project Anda secara default dengan peran Editor yang ditetapkan.

Pertama, kami akan memberi akun layanan kami peran Administrator DLP yang diperlukan untuk mengelola tugas pencegahan kebocoran data:

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

Terakhir, berikan peran DLP API Service Agent yang akan mengizinkan akun layanan untuk mengakses bigquery, storage, datastore, pubsub, dan key management service:

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

Akun Layanan DLP

Selain akun layanan App Engine, kami juga akan menggunakan akun layanan DLP. Akun layanan ini dibuat secara otomatis saat DLP API diaktifkan dan awalnya tidak diberi peran apa pun. Mari berikan peran pelihat:

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

Sekarang kita harus membuat 3 bucket Cloud Storage untuk menyimpan data:

  • Bucket karantina: data kami awalnya akan diupload di sini.
  • Bucket data sensitif: data yang ditentukan oleh DLP API sebagai data sensitif akan dipindahkan ke sini.
  • Bucket data yang tidak sensitif: data yang ditentukan oleh DLP API tidak sensitif akan dipindahkan ke sini

Kita dapat menggunakan perintah gsutil untuk membuat ketiga bucket dalam satu proses:

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

Catat nama bucket yang baru saja Anda buat - kita akan membutuhkannya nanti.

4. Topik dan Langganan Pub/Sub

Cloud Pub/Sub menyediakan banyak hingga banyak pesan asinkron antar-aplikasi. Penayang akan membuat pesan dan memublikasikannya ke feed pesan yang disebut topik. Pelanggan akan menerima pesan tersebut melalui langganan. Berdasarkan langganan tersebut, dalam kasus ini, kita akan meminta Cloud Function memindahkan file ke bucket masing-masing setelah tugas DLP berjalan.

Pertama, mari kita buat topik. Pesan akan dipublikasikan di sini setiap kali file ditambahkan ke bucket penyimpanan karantina kami. Kita akan menamainya 'classify-topic'

gcloud pubsub topics create classify-topic

Langganan akan diberi tahu saat topik memublikasikan pesan. Mari kita buat langganan pubsub bernama 'classify-sub':

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

Langganan tersebut akan memicu Cloud Function kedua yang akan memulai tugas DLP yang akan memeriksa file dan memindahkannya ke tempat yang tepat.

5. Cloud Functions

Cloud Functions memungkinkan kita untuk men-deploy fungsi dengan tujuan tunggal yang ringan, berbasis peristiwa, dan asinkron tanpa perlu mengelola server atau lingkungan runtime. Kita akan men-deploy 2 fungsi Cloud menggunakan file main.py yang disediakan, yang terletak di dlp-cloud-functions-tutorials/gcs-dlp-classification-python/

Ganti Variabel

Sebelum dapat membuat fungsi, kita harus mengganti beberapa variabel dalam file main.py.

Di Cloud Shell Editor, sesuaikan main.py dengan mengganti nilai untuk project ID dan variabel bucket di baris 28 hingga 34 menggunakan bucket terkait yang telah dibuat sebelumnya:

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

Selain itu, ganti nilai untuk variabel topik pub/sub dengan topik pub/sub yang dibuat di langkah sebelumnya:

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

Men-deploy Fungsi

Di Cloud Shell Anda, ubah direktori ke gcs-dlp-classification-python tempat file main.py berada:

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

Saatnya men-deploy beberapa fungsi.

Pertama, deploy fungsi create_DLP_job, dengan mengganti [YOUR_QUARANTINE_BUCKET] dengan nama bucket yang benar. Fungsi ini dipicu saat file baru diupload ke bucket karantina Cloud Storage yang ditentukan dan akan membuat tugas DLP untuk setiap file yang diupload:

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

Selanjutnya, deploy fungsi resolve_DLP, yang menunjukkan topik kita sebagai pemicu untuknya. Fungsi ini memproses notifikasi pub/sub yang dimulai dari tugas DLP berikutnya dari fungsi di atas. Segera setelah menerima notifikasi pub/sub, Google Play akan mengambil hasil dari tugas DLP dan memindahkan file ke bucket sensitif atau bucket tidak sensitif sebagaimana mestinya:

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

Verifikasi

Pastikan kedua fungsi cloud kami berhasil di-deploy dengan perintah gcloud functions describe:

gcloud functions describe create_DLP_job
gcloud functions describe resolve_DLP

Output akan membaca ACTIVE untuk mengetahui status saat berhasil di-deploy.

6. Menguji dengan Data Sampel

Setelah semua bagian siap, sekarang kita dapat menguji semuanya dengan beberapa file sampel. Di Cloud Shell, ubah direktori kerja Anda saat ini menjadi sample_data:

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

File contoh kami terdiri dari file txt dan csv yang berisi berbagai bagian data. File ini diawali dengan ‘sample_s' akan berisi data sensitif sedangkan data yang diawali dengan 'sample_n' tidak akan terjadi. Misalnya, sample_s20.csv berisi nomor yang diformat agar terlihat seperti nomor jaminan sosial AS:

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

Di sisi lain, data dalam sample_n15.csv tidak akan dianggap sensitif:

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

Untuk melihat cara penyiapan kita memperlakukan file, mari kita upload semua file pengujian ke karantina

bucket:

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

Awalnya, file akan diletakkan di bucket karantina tempat kita menguploadnya. Untuk memverifikasinya, segera setelah file diupload, cantumkan konten bucket karantina:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

Untuk melihat rangkaian acara yang telah kita mulai, mulailah dengan membuka halaman Cloud Functions:

Klik menu Tindakan untuk fungsi create_DLP_job, lalu pilih View Logs:

89211a959bf30392.png

Dalam log untuk fungsi ini, kita melihat setidaknya 4 entri untuk setiap file yang menunjukkan:

  • Eksekusi fungsi dimulai
  • Fungsi telah dipicu untuk file tertentu
  • Tugas telah dibuat
  • Fungsi telah selesai dijalankan

c864dff5a03c75a9.png

Setelah fungsi create_DLP_job selesai untuk setiap file, tugas DLP yang sesuai akan dimulai. Buka Halaman Tugas DLP untuk melihat daftar tugas DLP dalam antrean:

Anda akan melihat daftar tugas Tertunda, Berjalan, atau Selesai. Masing-masing terkait dengan salah satu file yang telah kami upload:

6af34e72ecb83faf.pngS

Anda dapat mengklik ID salah satu tugas ini untuk melihat detail lebih lanjut.

Jika kembali ke halaman Cloud Functions dan memeriksa log out untuk fungsi resolve_DLP, Anda akan melihat setidaknya 8 entri untuk setiap file, yang menunjukkan:

  • Eksekusi fungsi dimulai
  • Notifikasi pub/sub diterima
  • Nama tugas DLP yang sesuai
  • Kode status
  • Jumlah instance data sensitif (jika ada)
  • Bucket tempat file akan dipindahkan
  • Tugas DLP telah selesai menguraikan file
  • Fungsi telah selesai dijalankan

5025bd672cba90a0.png

Segera setelah semua panggilan ke fungsi resolve_DLP selesai, periksa konten bucket karantina sekali lagi:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

Kali ini, kolom harus benar-benar kosong. Namun, jika Anda menjalankan perintah yang sama di atas untuk bucket lain, file kita akan terpisah sempurna ke dalam bucket yang sesuai.

7. Pembersihan

Setelah mengetahui cara menggunakan DLP API bersama Cloud Functions untuk mengklasifikasikan data, mari bersihkan project dari semua resource yang telah dibuat.

Menghapus Project

Jika mau, Anda dapat menghapus seluruh project. Di GCP Console, buka halaman Cloud Resource Manager:

Dalam daftar project, pilih project yang sedang kita kerjakan lalu klik Delete. Anda akan diminta untuk mengetikkan ID project. Masukkan dan klik Shut Down.

Atau, Anda dapat menghapus seluruh project langsung dari Cloud Shell dengan gcloud:

gcloud projects delete [PROJECT_ID]

Jika Anda memilih untuk menghapus komponen yang berbeda satu per satu, lanjutkan ke bagian berikutnya.

Cloud Functions

Hapus kedua fungsi cloud dengan gcloud:

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

Bucket Penyimpanan

Hapus semua file yang diupload dan hapus bucket dengan gsutil:

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

Pub/Sub

Hapus langganan pub/sub dengan gcloud terlebih dahulu:

gcloud pubsub subscriptions delete classify-sub

Terakhir, hapus topik pub/sub dengan gcloud:

gcloud pubsub topics delete classify-topic

8. Selamat!

Asyik! Anda berhasil. Anda telah mempelajari cara memanfaatkan DLP API bersama dengan Cloud Functions untuk mengotomatiskan klasifikasi file.

Yang telah kita bahas

  • Kita membuat Bucket Cloud Storage untuk menyimpan data sensitif dan tidak sensitif
  • Kami membuat topik dan langganan Pub/Sub untuk memicu cloud function
  • Kami membuat Cloud Functions yang dirancang untuk memulai tugas DLP yang mengategorikan file berdasarkan data sensitif yang ada di dalamnya.
  • Kita telah mengupload data uji dan memeriksa Cloud Functions Log Stackdriver untuk melihat cara kerjanya