1. Ringkasan
Dalam organisasi modern saat ini, ada semakin banyak data yang masuk dari berbagai sumber. Hal ini sering kali memerlukan pengarantinaan dan klasifikasi data tersebut untuk menyimpannya dan melindunginya secara strategis – tugas yang 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.
- Buat Cloud Function sederhana yang memanggil DLP API saat file diupload.
- Buat topik dan langganan Pub/Sub untuk memberi tahu Anda saat pemrosesan file selesai.
- Mengupload file sampel ke bucket karantina untuk memanggil Cloud Function
- Gunakan DLP API untuk memeriksa dan mengklasifikasikan file, lalu memindahkannya ke bucket yang sesuai.
Yang Anda butuhkan
- Project Google Cloud dengan penagihan yang telah disiapkan. Jika belum memilikinya, Anda harus membuatnya.
2. Mempersiapkan
Selama 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]
Mengaktifkan API
Aktifkan API yang diperlukan di project Google Cloud Anda:
- Cloud Functions API - Mengelola fungsi ringan yang disediakan pengguna yang dijalankan sebagai respons terhadap peristiwa.
- Cloud Data Loss Prevention (DLP) API - Menyediakan metode untuk deteksi, analisis risiko, dan de-identifikasi fragmen 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 Anda yang berjalan di App Engine. Akun layanan ini ada di project Anda secara default dengan peran Editor yang ditetapkan.
Pertama, kita akan memberikan peran Administrator DLP kepada akun layanan 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 Agen Layanan DLP API yang akan memberikan izin akun layanan untuk 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, kita juga akan menggunakan akun layanan DLP. Akun layanan ini dibuat secara otomatis saat DLP API diaktifkan dan awalnya tidak diberi peran. Mari kita 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 perlu membuat 3 bucket Cloud Storage untuk menyimpan data:
- Bucket karantina: data kita akan diupload ke sini terlebih dahulu.
- Bucket data sensitif: data yang ditentukan oleh DLP API sebagai data sensitif akan dipindahkan ke sini.
- Bucket data non-sensitif: data yang ditentukan oleh DLP API sebagai tidak sensitif akan dipindahkan ke sini
Kita dapat menggunakan perintah gsutil untuk membuat ketiga bucket sekaligus:
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 memerlukannya nanti.
4. Topik dan Langganan Pub/Sub
Cloud Pub/Sub menyediakan pesan asinkron many-to-many antar-aplikasi. Penerbit akan membuat pesan dan memublikasikannya ke feed pesan yang disebut topik. Pelanggan akan menerima pesan ini melalui langganan. Berdasarkan langganan tersebut, dalam kasus ini, kita akan memiliki Cloud Function yang memindahkan file ke bucket masing-masing setelah tugas DLP berjalan.
Pertama, mari 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 men-deploy fungsi ringan, berbasis peristiwa, asinkron, dan bertujuan tunggal tanpa perlu mengelola server atau lingkungan runtime. Kita akan men-deploy 2 Cloud Function menggunakan file main.py yang disediakan, yang berada di dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
Mengganti Variabel
Sebelum dapat membuat fungsi, kita perlu mengganti beberapa variabel dalam file main.py.
Di Cloud Shell Editor, sesuaikan main.py dengan mengganti nilai untuk project ID dan variabel bucket pada baris 28 hingga 34 menggunakan bucket terkait yang 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 pada langkah sebelumnya:
""" Pub/Sub topic to notify once the DLP job completes."""
PUB_SUB_TOPIC = 'classify-topic'
Men-deploy Fungsi
Di Cloud Shell, ubah direktori ke gcs-dlp-classification-python tempat file main.py berada:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/gcs-dlp-classification-python
Sekarang saatnya men-deploy beberapa fungsi.
Pertama, deploy fungsi create_DLP_job, ganti [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 pemicunya. Fungsi ini memproses notifikasi pub/sub yang dimulai dari tugas DLP berikutnya dari fungsi di atas. Segera setelah mendapatkan notifikasi pub/sub, fungsi ini akan mengambil hasil dari tugas DLP dan memindahkan file ke bucket sensitif atau bucket tidak sensitif.
gcloud functions deploy resolve_DLP --runtime python37 \ --trigger-topic classify-topic
Verifikasi
Pastikan kedua fungsi cloud kita berhasil di-deploy dengan perintah gcloud functions describe:
gcloud functions describe create_DLP_job
gcloud functions describe resolve_DLP
Output akan menampilkan ACTIVE untuk status saat berhasil di-deploy.
6. Menguji dengan Data Sampel
Setelah semua bagian tersedia, kita dapat menguji beberapa file contoh. 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 data. File yang diawali dengan ‘sample_s' akan berisi data sensitif, sedangkan file yang diawali dengan ‘sample_n' tidak akan berisi data sensitif. Misalnya, sample_s20.csv berisi apa yang diformat agar terlihat seperti nomor jaminan sosial Amerika Serikat:
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 kami akan memperlakukan file kami, mari upload semua file pengujian kami ke karantina
bucket:
gsutil -m cp * gs://[YOUR_QUARANTINE_BUCKET]
Awalnya, file kita akan berada di bucket karantina tempat kita menguploadnya. Untuk memverifikasi hal ini, segera setelah mengupload file, cantumkan konten bucket karantina:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
Untuk melihat rangkaian acara yang telah kami mulai, mulailah dengan membuka halaman Cloud Functions:
Klik menu Actions untuk fungsi create_DLP_job, lalu pilih View Logs:

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 dieksekusi

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 yang Tertunda, Sedang Berjalan, atau Selesai. Setiap file tersebut sesuai dengan salah satu file yang telah kita upload:

Anda dapat mengklik ID tugas mana pun untuk melihat detail selengkapnya.
Jika Anda kembali ke halaman Cloud Functions dan memeriksa log 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 tujuan file akan dipindahkan
- Tugas DLP telah selesai mengurai file
- Fungsi telah selesai dieksekusi

Segera setelah semua panggilan ke fungsi resolve_DLP selesai berjalan, periksa kembali konten bucket karantina:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
Kali ini, seharusnya benar-benar kosong. Namun, jika Anda menjalankan perintah yang sama di atas untuk bucket lainnya, Anda akan menemukan file kita terpisah dengan sempurna ke dalam bucket yang sesuai.
7. Pembersihan
Setelah melihat cara menggunakan DLP API bersama dengan Cloud Functions untuk mengklasifikasikan data, mari kita bersihkan project dari semua resource yang telah kita buat.
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 menggunakan gcloud:
gcloud projects delete [PROJECT_ID]
Jika Anda lebih suka menghapus komponen yang berbeda satu per satu, lanjutkan ke bagian berikutnya.
Cloud Functions
Hapus kedua cloud function kita 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
Pertama, hapus langganan pub/sub dengan gcloud:
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 menggunakan DLP API bersama dengan Cloud Functions untuk mengotomatiskan klasifikasi file.
Yang telah kita bahas
- Kami membuat Bucket Cloud Storage untuk menyimpan data sensitif dan non-sensitif kami
- 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 mengupload data pengujian dan memeriksa log Stackdriver Cloud Functions untuk melihat prosesnya