1. ภาพรวม
ในองค์กรยุคปัจจุบัน มีข้อมูลจำนวนมากขึ้นเรื่อยๆ ที่มาจากแหล่งข้อมูลต่างๆ ซึ่งมักจะต้องมีการกักเก็บและจัดประเภทข้อมูลดังกล่าวเพื่อจัดเก็บและปกป้องอย่างมีกลยุทธ์ ซึ่งเป็นงานที่จะมีค่าใช้จ่ายสูงและเป็นไปไม่ได้หากยังคงดำเนินการด้วยตนเอง
ใน Codelab นี้ เราจะมาดูวิธีจัดประเภทข้อมูลที่อัปโหลดไปยัง Cloud Storage โดยอัตโนมัติและย้ายข้อมูลไปยัง Bucket ของพื้นที่เก็บข้อมูลที่เกี่ยวข้อง เราจะดำเนินการนี้โดยใช้ Cloud Pub/Sub, Cloud Functions, Cloud Data Loss Prevention และ Cloud Storage
สิ่งที่คุณต้องดำเนินการ
- สร้างที่เก็บข้อมูล Cloud Storage เพื่อใช้เป็นส่วนหนึ่งของไปป์ไลน์การกักกันและการจัดประเภท
- สร้างฟังก์ชันระบบคลาวด์อย่างง่ายที่จะเรียกใช้ DLP API เมื่อมีการอัปโหลดไฟล์
- สร้างหัวข้อและการสมัครใช้บริการ Pub/Sub เพื่อแจ้งให้คุณทราบเมื่อการประมวลผลไฟล์เสร็จสมบูรณ์
- อัปโหลดไฟล์ตัวอย่างไปยังที่เก็บข้อมูลกักเก็บเพื่อเรียกใช้ Cloud Function
- ใช้ DLP API เพื่อตรวจสอบและจัดประเภทไฟล์ แล้วย้ายไฟล์ไปยังที่เก็บข้อมูลที่เหมาะสม
สิ่งที่คุณต้องมี
- โปรเจ็กต์ Google Cloud ที่ตั้งค่าการเรียกเก็บเงินแล้ว หากยังไม่มีบัญชีดังกล่าว คุณจะต้องสร้างบัญชี
2. การเริ่มตั้งค่า
ตลอดทั้งโค้ดแล็บนี้ เราจะจัดสรรและจัดการทรัพยากรและบริการต่างๆ ในระบบคลาวด์โดยใช้บรรทัดคำสั่งผ่าน Cloud Shell โดยการดำเนินการต่อไปนี้จะเปิด Cloud Shell พร้อมกับ Cloud Shell Editor และโคลนที่เก็บโปรเจ็กต์คู่กัน
ตรวจสอบว่าคุณใช้โปรเจ็กต์ที่ถูกต้องโดยตั้งค่าด้วย gcloud config set project [PROJECT_ID]
เปิดใช้ API
เปิดใช้ API ที่จำเป็นในโปรเจ็กต์ Google Cloud
- Cloud Functions API - จัดการฟังก์ชันน้ำหนักเบาที่ผู้ใช้ระบุซึ่งดำเนินการเพื่อตอบสนองต่อเหตุการณ์
- Cloud Data Loss Prevention (DLP) API - มีวิธีการตรวจหา วิเคราะห์ความเสี่ยง และยกเลิกการระบุตัวบุคคลจากข้อมูลที่ละเอียดอ่อนด้านความเป็นส่วนตัวในข้อความ รูปภาพ และที่เก็บข้อมูล Google Cloud Platform
- Cloud Storage - Google Cloud Storage เป็นบริการ RESTful สำหรับจัดเก็บและเข้าถึงข้อมูลบนโครงสร้างพื้นฐานของ Google
สิทธิ์ของบัญชีบริการ
บัญชีบริการคือบัญชีประเภทพิเศษที่แอปพลิเคชันและเครื่องเสมือนใช้เพื่อทำการเรียก API ที่ได้รับอนุญาต
บัญชีบริการเริ่มต้นของ App Engine
ระบบจะใช้บัญชีบริการเริ่มต้นของ App Engine เพื่อเรียกใช้งานในโปรเจ็กต์ Cloud ในนามของแอปที่ทำงานใน App Engine บัญชีบริการนี้มีอยู่ในโปรเจ็กต์ของคุณโดยค่าเริ่มต้นพร้อมบทบาทผู้แก้ไขที่กำหนด
ก่อนอื่น เราจะมอบบทบาทผู้ดูแลระบบ DLP ให้กับบัญชีบริการของเรา ซึ่งจำเป็นต่อการดูแลงานป้องกันข้อมูลรั่วไหล
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \ --role roles/dlp.admin
สุดท้าย ให้มอบบทบาทตัวแทนบริการ DLP API ซึ่งจะอนุญาตสิทธิ์ของบัญชีบริการสำหรับ BigQuery, พื้นที่เก็บข้อมูล, Datastore, Pub/Sub และ Key Management Service
gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member serviceAccount:$GOOGLE_CLOUD_PROJECT@appspot.gserviceaccount.com \ --role roles/dlp.serviceAgent
บัญชีบริการ DLP
นอกจากบัญชีบริการ App Engine แล้ว เราจะใช้บัญชีบริการ DLP ด้วย ระบบจะสร้างบัญชีบริการนี้โดยอัตโนมัติเมื่อเปิดใช้ DLP API และจะไม่มีการมอบหมายบทบาทใดๆ ให้ในตอนแรก มามอบบทบาทผู้ดูให้กัน
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
ตอนนี้เราจะต้องสร้าง Bucket ของ Cloud Storage 3 รายการเพื่อจัดเก็บข้อมูล
- ที่เก็บข้อมูลกักกัน: ระบบจะอัปโหลดข้อมูลของเราที่นี่ในตอนแรก
- ที่เก็บข้อมูลที่ละเอียดอ่อน: ระบบจะย้ายข้อมูลที่ DLP API ระบุว่าละเอียดอ่อนมาไว้ที่นี่
- ที่เก็บข้อมูลที่ไม่ได้มีความละเอียดอ่อน: ระบบจะย้ายข้อมูลที่ DLP API ระบุว่าไม่ได้มีความละเอียดอ่อนมาไว้ที่นี่
เราใช้คำสั่ง gsutil เพื่อสร้างทั้ง 3 Bucket ได้ในคราวเดียว ดังนี้
gsutil mb gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
จดชื่อ Bucket ที่คุณเพิ่งสร้างไว้ เนื่องจากเราจะต้องใช้ในภายหลัง
4. หัวข้อและการสมัครใช้บริการ Pub/Sub
Cloud Pub/Sub มีการรับส่งข้อความแบบไม่พร้อมกันแบบหลายต่อหลายข้อความระหว่างแอปพลิเคชัน ผู้เผยแพร่จะสร้างข้อความและเผยแพร่ไปยังฟีดข้อความที่เรียกว่าหัวข้อ ผู้ติดตามจะได้รับข้อความเหล่านี้ผ่านการติดตาม ในกรณีของเรา เราจะใช้ฟังก์ชัน Cloud เพื่อย้ายไฟล์ไปยังที่เก็บข้อมูลที่เกี่ยวข้องหลังจากที่งาน DLP ทำงาน
ก่อนอื่น มาสร้างหัวข้อกัน ระบบจะเผยแพร่ข้อความที่นี่ทุกครั้งที่มีการเพิ่มไฟล์ลงในที่เก็บข้อมูลกักเก็บของเรา เราจะตั้งชื่อว่า "classify-topic"
gcloud pubsub topics create classify-topic
การสมัครสมาชิกจะได้รับการแจ้งเตือนเมื่อหัวข้อเผยแพร่ข้อความ มาสร้างการสมัครใช้บริการ Pub/Sub ที่ชื่อ "classify-sub" กัน
gcloud pubsub subscriptions create classify-sub --topic classify-topic
การสมัครใช้บริการดังกล่าวจะทริกเกอร์ Cloud Function ที่ 2 ซึ่งจะเริ่มงาน DLP ที่จะตรวจสอบไฟล์และย้ายไปยังตำแหน่งที่เหมาะสม
5. Cloud Functions
Cloud Functions ช่วยให้เราสามารถทำให้ฟังก์ชันแบบไม่พร้อมกันที่ใช้งานง่าย อิงตามเหตุการณ์ และมีวัตถุประสงค์เดียวใช้งานได้โดยไม่ต้องจัดการเซิร์ฟเวอร์หรือสภาพแวดล้อมรันไทม์ เราจะทำให้ฟังก์ชันของระบบคลาวด์ 2 รายการใช้งานได้โดยใช้ไฟล์ main.py ที่ระบุ ซึ่งอยู่ใน dlp-cloud-functions-tutorials/gcs-dlp-classification-python/
แทนที่ตัวแปร
ก่อนที่จะสร้างฟังก์ชัน เราจะต้องแทนที่ตัวแปรบางตัวในไฟล์ main.py
ใน Cloud Shell Editor ให้ปรับ main.py โดยแทนที่ค่าสำหรับรหัสโปรเจ็กต์และตัวแปรที่เก็บข้อมูลในบรรทัดที่ 28-34 โดยใช้ที่เก็บข้อมูลที่เกี่ยวข้องซึ่งสร้างไว้ก่อนหน้านี้
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]'
นอกจากนี้ ให้แทนที่ค่าสำหรับตัวแปรหัวข้อ Pub/Sub ด้วยหัวข้อ Pub/Sub ที่สร้างในขั้นตอนก่อนหน้า
""" Pub/Sub topic to notify once the DLP job completes."""
PUB_SUB_TOPIC = 'classify-topic'
ทำให้ฟังก์ชันใช้งานได้
ใน Cloud Shell ให้เปลี่ยนไดเรกทอรีเป็น gcs-dlp-classification-python ซึ่งมีไฟล์ main.py อยู่
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/gcs-dlp-classification-python
ได้เวลาติดตั้งใช้งานฟังก์ชันบางอย่างแล้ว
ก่อนอื่น ให้ติดตั้งใช้งานฟังก์ชัน create_DLP_job โดยแทนที่ [YOUR_QUARANTINE_BUCKET] ด้วยชื่อ Bucket ที่ถูกต้อง ระบบจะทริกเกอร์ฟังก์ชันนี้เมื่อมีการอัปโหลดไฟล์ใหม่ไปยัง Bucket กักเก็บของ Cloud Storage ที่กำหนด และจะสร้างงาน DLP สำหรับแต่ละไฟล์ที่อัปโหลด
gcloud functions deploy create_DLP_job --runtime python37 \ --trigger-event google.storage.object.finalize \ --trigger-resource [YOUR_QUARANTINE_BUCKET]
ขั้นตอนถัดไปคือการทำให้ฟังก์ชัน resolve_DLP ใช้งานได้ โดยระบุหัวข้อของเราเป็นทริกเกอร์สำหรับฟังก์ชัน ฟังก์ชันนี้จะรับฟังการแจ้งเตือน Pub/Sub ที่เริ่มต้นจากงาน DLP ที่ตามมาในฟังก์ชันด้านบน ทันทีที่ได้รับการแจ้งเตือน Pub/Sub ระบบจะเลือกผลลัพธ์จากงาน DLP และย้ายไฟล์ไปยังที่เก็บข้อมูลที่มีความละเอียดอ่อนหรือที่เก็บข้อมูลที่ไม่มีความละเอียดอ่อนตามความเหมาะสม
gcloud functions deploy resolve_DLP --runtime python37 \ --trigger-topic classify-topic
ยืนยัน
ตรวจสอบว่าฟังก์ชันคลาวด์ทั้ง 2 รายการของเราได้รับการติดตั้งใช้งานสำเร็จด้วยคำสั่ง gcloud functions describe
gcloud functions describe create_DLP_job
gcloud functions describe resolve_DLP
เอาต์พุตจะแสดง ACTIVE สำหรับสถานะเมื่อติดตั้งใช้งานสำเร็จแล้ว
6. ทดสอบด้วยข้อมูลตัวอย่าง
เมื่อทุกอย่างพร้อมแล้ว ตอนนี้เราก็สามารถทดสอบด้วยไฟล์ตัวอย่างได้ ใน Cloud Shell ให้เปลี่ยนไดเรกทอรีที่ใช้งานอยู่เป็น sample_data
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/sample_data
ไฟล์ตัวอย่างของเราประกอบด้วยไฟล์ txt และ CSV ที่มีข้อมูลต่างๆ ไฟล์ที่ขึ้นต้นด้วย "sample_s" จะมีข้อมูลที่ละเอียดอ่อน ส่วนไฟล์ที่ขึ้นต้นด้วย "sample_n" จะไม่มี ตัวอย่างเช่น ไฟล์ sample_s20.csv มีข้อมูลที่จัดรูปแบบให้ดูเหมือนหมายเลขประกันสังคมของสหรัฐอเมริกา ดังนี้
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
ในทางกลับกัน ระบบจะไม่ถือว่าข้อมูลใน sample_n15.csv เป็นข้อมูลที่ละเอียดอ่อน
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
หากต้องการดูว่าการตั้งค่าของเราจะจัดการไฟล์อย่างไร ให้อัปโหลดไฟล์ทดสอบทั้งหมดไปยังพื้นที่กักเก็บ
Bucket:
gsutil -m cp * gs://[YOUR_QUARANTINE_BUCKET]
ในตอนแรก ไฟล์จะอยู่ในที่เก็บข้อมูลกักกันที่เราอัปโหลดไฟล์ไป หากต้องการยืนยัน ให้แสดงเนื้อหาของที่เก็บข้อมูลกักเก็บทันทีหลังจากอัปโหลดไฟล์
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
หากต้องการดูชุดกิจกรรมที่เราได้เริ่มขึ้น ให้ไปที่หน้า Cloud Functions โดยทำดังนี้
คลิกเมนูการดำเนินการสำหรับฟังก์ชัน create_DLP_job แล้วเลือกดูบันทึก:

ในบันทึกของฟังก์ชันนี้ เราเห็นรายการอย่างน้อย 4 รายการสำหรับแต่ละไฟล์ของเรา ซึ่งระบุสิ่งต่อไปนี้
- เริ่มการเรียกใช้ฟังก์ชันแล้ว
- ระบบทริกเกอร์ฟังก์ชันสำหรับไฟล์ใดไฟล์หนึ่ง
- สร้างงานแล้ว
- ฟังก์ชันดำเนินการเสร็จแล้ว

เมื่อฟังก์ชัน create_DLP_job ทำงานเสร็จสำหรับแต่ละไฟล์ ระบบจะเริ่มงาน DLP ที่เกี่ยวข้อง ไปที่หน้างาน DLP เพื่อดูรายการงาน DLP ในคิว
คุณจะเห็นรายการงานที่รอดำเนินการ กำลังดำเนินการ หรือเสร็จสิ้นแล้ว แต่ละรายการจะสอดคล้องกับไฟล์ที่เราอัปโหลด

คุณคลิกรหัสของงานใดก็ได้เพื่อดูรายละเอียดเพิ่มเติม
หากกลับไปที่หน้า Cloud Functions และตรวจสอบบันทึกสำหรับฟังก์ชัน resolve_DLP คุณจะเห็นรายการอย่างน้อย 8 รายการสำหรับแต่ละไฟล์ ซึ่งระบุสิ่งต่อไปนี้
- เริ่มการเรียกใช้ฟังก์ชันแล้ว
- ได้รับการแจ้งเตือน Pub/Sub
- ชื่อของงาน DLP ที่เกี่ยวข้อง
- รหัสสถานะ
- จำนวนอินสแตนซ์ของข้อมูลที่ละเอียดอ่อน (หากมี)
- ที่เก็บข้อมูลที่จะย้ายไฟล์ไป
- งาน DLP แยกวิเคราะห์ไฟล์เสร็จแล้ว
- ฟังก์ชันดำเนินการเสร็จแล้ว

ทันทีที่การเรียกฟังก์ชัน resolve_DLP ทั้งหมดทำงานเสร็จแล้ว ให้ตรวจสอบเนื้อหาของที่เก็บข้อมูลการกักเก็บอีกครั้ง
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
คราวนี้ควรว่างเปล่าโดยสมบูรณ์ แต่หากเรียกใช้คำสั่งเดียวกันข้างต้นสำหรับที่เก็บข้อมูลอื่นๆ คุณจะเห็นว่าไฟล์ของเราแยกอยู่ในที่เก็บข้อมูลที่เกี่ยวข้องอย่างสมบูรณ์
7. ล้างข้อมูล
ตอนนี้เราได้เห็นวิธีใช้ DLP API ร่วมกับ Cloud Functions เพื่อจัดประเภทข้อมูลแล้ว มาล้างข้อมูลโปรเจ็กต์ของเราจากทรัพยากรทั้งหมดที่เราสร้างขึ้นกัน
ลบโปรเจ็กต์
คุณจะลบทั้งโปรเจ็กต์ก็ได้หากต้องการ ในคอนโซล GCP ให้ไปที่หน้า Cloud Resource Manager
ในรายการโปรเจ็กต์ ให้เลือกโปรเจ็กต์ที่เราใช้ทำงานอยู่ แล้วคลิกลบ ระบบจะแจ้งให้คุณพิมพ์รหัสโปรเจ็กต์ ป้อนรหัสแล้วคลิกปิด
หรือจะลบทั้งโปรเจ็กต์โดยตรงจาก Cloud Shell ด้วย gcloud ก็ได้
gcloud projects delete [PROJECT_ID]
หากต้องการลบคอมโพเนนต์ต่างๆ ทีละรายการ ให้ไปที่ส่วนถัดไป
Cloud Functions
ลบ Cloud Functions ทั้ง 2 รายการด้วย gcloud โดยใช้คำสั่งต่อไปนี้
gcloud functions delete -q create_DLP_job && gcloud functions delete -q resolve_DLP
ที่เก็บข้อมูล
นำไฟล์ที่อัปโหลดทั้งหมดออกและลบบัคเก็ตด้วย gsutil โดยทำดังนี้
gsutil rm -r gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
Pub/Sub
ก่อนอื่นให้ลบการสมัครใช้บริการ Pub/Sub ด้วย gcloud โดยทำดังนี้
gcloud pubsub subscriptions delete classify-sub
และสุดท้าย ให้ลบหัวข้อ Pub/Sub ด้วย gcloud ดังนี้
gcloud pubsub topics delete classify-topic
8. ยินดีด้วย
แจ่มแจ๋ว! คุณทำได้แล้ว คุณได้เรียนรู้วิธีใช้ DLP API ร่วมกับ Cloud Functions เพื่อทำให้การแยกประเภทไฟล์เป็นไปโดยอัตโนมัติแล้ว
สิ่งที่เราได้พูดถึงไปแล้ว
- เราสร้างที่เก็บข้อมูล Cloud Storage เพื่อจัดเก็บข้อมูลที่ละเอียดอ่อนและไม่ละเอียดอ่อน
- เราได้สร้างหัวข้อและข้อมูลการสมัครใช้บริการ Pub/Sub เพื่อทริกเกอร์ Cloud Function
- เราได้สร้าง Cloud Functions ที่ออกแบบมาเพื่อเริ่มงาน DLP ซึ่งจัดหมวดหมู่ไฟล์ตามข้อมูลที่ละเอียดอ่อนที่มีอยู่ในไฟล์
- เราอัปโหลดข้อมูลทดสอบและตรวจสอบบันทึก Stackdriver ของ Cloud Functions เพื่อดูขั้นตอนการทำงาน