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:
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
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:
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
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