Tự động phân loại dữ liệu được tải lên Cloud Storage bằng DLP API và Cloud Functions

1. Tổng quan

Trong tổ chức hiện nay, lượng dữ liệu được thu thập từ nhiều nguồn ngày càng tăng. Thông thường, bạn phải cách ly và phân loại dữ liệu để lưu trữ và bảo vệ dữ liệu một cách có chiến lược – đây là một nhiệm vụ sẽ nhanh chóng trở nên tốn kém và không thể thực hiện được nếu bạn tiếp tục thực hiện theo cách thủ công.

Trong lớp học lập trình này, chúng ta sẽ tìm hiểu cách tự động phân loại dữ liệu được tải lên Cloud Storage và chuyển dữ liệu đó sang một bộ chứa lưu trữ tương ứng. Chúng tôi sẽ thực hiện việc này bằng cách sử dụng Cloud Pub/Sub, Cloud Functions, tính năng Ngăn chặn mất dữ liệu của Cloud và Cloud Storage.

Bạn sẽ thực hiện

  • Tạo bộ chứa trong Cloud Storage để dùng trong quy trình cách ly và phân loại.
  • Tạo một Hàm đám mây đơn giản để gọi API DLP khi tệp được tải lên.
  • Tạo một chủ đề Pub/Sub và gói thuê bao để nhận thông báo khi quá trình xử lý tệp hoàn tất.
  • Tải các tệp mẫu lên bộ chứa cách ly để gọi một Hàm đám mây
  • Sử dụng API DLP để kiểm tra và phân loại tệp cũng như chuyển chúng sang bộ chứa thích hợp.

Bạn cần có

  • Một dự án Google Cloud đã thiết lập thông tin thanh toán. Nếu chưa có tài khoản, bạn phải tạo một tài khoản.

2. Thiết lập

Trong lớp học lập trình này, chúng ta sẽ cung cấp và quản lý nhiều dịch vụ cũng như tài nguyên đám mây bằng dòng lệnh qua Cloud Shell. Thao tác sau đây sẽ mở Cloud Shell cùng với Cloud Shell Editor và sao chép kho lưu trữ dự án đồng hành:

Đảm bảo bạn đang sử dụng đúng dự án bằng cách đặt dự án bằng gcloud config set project [PROJECT_ID]

Bật API

Bật các API bắt buộc trong dự án trên Google Cloud:

  • Cloud Functions API – Quản lý các hàm gọn nhẹ do người dùng cung cấp được thực thi để phản hồi sự kiện.
  • API Ngăn chặn mất dữ liệu (DLP) của Cloud – Cung cấp các phương pháp phát hiện, phân tích rủi ro và loại bỏ thông tin nhận dạng các mảnh nhạy cảm về quyền riêng tư trong văn bản, hình ảnh và kho lưu trữ bộ nhớ Google Cloud Platform.
  • Cloud Storage – Google Cloud Storage là một dịch vụ RESTful dùng để lưu trữ và truy cập vào dữ liệu của bạn trên cơ sở hạ tầng của Google.

Quyền đối với tài khoản dịch vụ

Tài khoản dịch vụ là một loại tài khoản đặc biệt được các ứng dụng và máy ảo dùng để thực hiện những lệnh gọi API được uỷ quyền.

Tài khoản dịch vụ mặc định của App Engine

Tài khoản dịch vụ mặc định của App Engine được dùng để thực thi các tác vụ trong dự án Cloud của bạn thay mặt cho các ứng dụng đang chạy trong App Engine. Theo mặc định, tài khoản dịch vụ này tồn tại trong dự án của bạn và bạn đã chỉ định vai trò Người chỉnh sửa.

Trước tiên, chúng tôi sẽ cấp cho tài khoản dịch vụ của mình vai trò Quản trị viên DLP cần thiết để quản lý các công việc ngăn chặn mất dữ liệu:

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

Cuối cùng, hãy cấp vai trò Nhân viên hỗ trợ dịch vụ API DLP mà sẽ cho phép các quyền đối với tài khoản dịch vụ cho bigquery, Storage, datastore, pubsub và dịch vụ quản lý khoá:

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

Tài khoản dịch vụ Ngăn chặn mất dữ liệu (DLP)

Ngoài tài khoản dịch vụ App Engine, chúng tôi cũng sẽ sử dụng tài khoản dịch vụ DLP. Tài khoản dịch vụ này được tạo tự động khi API DLP được bật và ban đầu không được cấp vai trò nào. Hãy cấp cho ứng dụng vai trò người xem:

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. Bộ chứa Cloud Storage

Bây giờ, chúng ta cần tạo 3 bộ chứa trên Cloud Storage để lưu trữ dữ liệu:

  • Bộ chứa cách ly: dữ liệu của chúng tôi ban đầu sẽ được tải lên tại đây.
  • Nhóm dữ liệu nhạy cảm: dữ liệu được API DLP xác định là nhạy cảm sẽ được chuyển đến đây.
  • Nhóm dữ liệu không nhạy cảm: dữ liệu được API DLP xác định là không nhạy cảm sẽ được chuyển đến đây

Chúng ta có thể sử dụng lệnh Googlebot để tạo cả ba nhóm trong một sàm:

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

Ghi lại tên nhóm bạn vừa tạo - chúng tôi sẽ cần đến sau.

4. Chủ đề và gói thuê bao Pub/Sub

Cloud Pub/Sub cung cấp nhiều hoặc nhiều thông báo không đồng bộ giữa các ứng dụng. Nhà xuất bản sẽ tạo một thông báo và xuất bản thông báo đó lên nguồn cấp dữ liệu các bài viết được gọi là chủ đề. Người đăng ký sẽ nhận được các tin nhắn này thông qua một gói thuê bao. Dựa trên gói thuê bao đó, trong trường hợp của chúng ta, chức năng đám mây sẽ dùng chức năng đám mây di chuyển tệp vào bộ chứa tương ứng sau khi chạy công việc Ngăn chặn mất dữ liệu (DLP).

Trước tiên, hãy tạo một chủ đề. Hệ thống sẽ đăng thông báo tại đây mỗi khi có tệp được thêm vào bộ chứa lưu trữ cách ly của chúng tôi. Chúng tôi sẽ đặt tên tài khoản này là "classify-topic"

gcloud pubsub topics create classify-topic

Một gói thuê bao sẽ nhận được thông báo khi chủ đề đó được đăng một bài viết. Hãy tạo một gói thuê bao pubsub có tên là "classify-sub":

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

Gói thuê bao đó sẽ kích hoạt một Chức năng đám mây thứ hai. Chức năng này sẽ bắt đầu công việc DLP. Công việc này sẽ kiểm tra tệp và di chuyển tệp đến vị trí thích hợp.

5. Cloud Functions

Chức năng đám mây cho phép chúng tôi triển khai các chức năng đơn giản, dựa trên sự kiện, không đồng bộ mà không cần quản lý máy chủ hoặc môi trường thời gian chạy. Chúng ta sẽ triển khai 2 hàm Cloud bằng cách sử dụng tệp main.py được cung cấp, nằm trong dlp-cloud-functions-tutorials/gcs-dlp-classification-python/

Thay thế biến

Trước khi có thể tạo hàm, chúng ta cần thay thế một số biến trong tệp main.py.

Trong Cloud Shell Editor, hãy điều chỉnh main.py bằng cách thay thế các giá trị cho mã dự án và biến nhóm trên các dòng 28 đến 34 bằng cách sử dụng các nhóm tương ứng đã tạo trước đó:

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

Ngoài ra, hãy thay thế giá trị cho biến chủ đề pub/sub bằng chủ đề pub/sub đã tạo ở bước trước:

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

Triển khai hàm

Trong Cloud Shell, hãy thay đổi các thư mục thành gcs-dlp-classification-python nơi có tệp main.py:

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

Đã đến lúc triển khai một số chức năng.

Trước tiên, hãy triển khai hàm create_DLP_job, thay thế [YOUR_QUARANTINE_BUCKET] bằng tên bộ chứa chính xác. Chức năng này được kích hoạt khi các tệp mới được tải lên bộ chứa cách ly Cloud Storage đã chỉ định và sẽ tạo một công việc DLP cho mỗi tệp đã tải lên:

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

Tiếp theo, hãy triển khai hàm resolve_DLP, chỉ định chủ đề của chúng ta làm yếu tố kích hoạt hàm đó. Hàm này tiếp nhận thông báo pub/sub được khởi tạo từ công việc DLP tiếp theo từ hàm ở trên. Ngay khi nhận được thông báo xuất bản/đăng ký, ứng dụng sẽ nhận kết quả từ công việc DLP và di chuyển tệp vào bộ chứa nhạy cảm hoặc bộ chứa không nhạy cảm theo đó:

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

Xác minh

Kiểm tra để đảm bảo cả hai chức năng trên đám mây của chúng ta đã được triển khai thành công bằng lệnh gcloud functions describe:

gcloud functions describe create_DLP_job
gcloud functions describe resolve_DLP

Đầu ra sẽ đọc ACTIVE để biết trạng thái khi được triển khai thành công.

6. Kiểm thử bằng dữ liệu mẫu

Với tất cả các phần đã sẵn sàng, giờ đây, chúng ta có thể kiểm thử bằng một số tệp mẫu. Trong Cloud Shell, hãy thay đổi thư mục đang làm việc thành sample_data:

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

Tệp mẫu của chúng tôi bao gồm tệp txt và csv chứa nhiều phần dữ liệu khác nhau. Các tệp có tiền tố là "sample_s" sẽ chứa dữ liệu nhạy cảm còn những dữ liệu có tiền tố là "sample_n" thì không. Ví dụ: sample_s20.csv chứa nội dung được định dạng giống như số an sinh xã hội của Hoa Kỳ:

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

Mặt khác, dữ liệu trong sample_n15.csv sẽ không được coi là nhạy cảm:

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

Để xem cách chế độ thiết lập của chúng ta sẽ xử lý các tệp, hãy tải tất cả các tệp kiểm thử lên vùng cách ly

nhóm:

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

Ban đầu, các tệp của chúng ta sẽ nằm trong bộ chứa cách ly mà chúng ta đã tải chúng lên. Để xác minh điều này, ngay sau khi tải tệp lên, hãy liệt kê nội dung của bộ chứa cách ly:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

Để xem chuỗi sự kiện chúng tôi đã khởi động, hãy bắt đầu bằng cách chuyển đến trang Cloud Functions:

Nhấp vào trình đơn Thao tác cho chức năng create_DLP_job và chọn Xem nhật ký:

89211a959bf30392.pngS

Trong nhật ký của hàm này, chúng ta thấy ít nhất 4 mục cho mỗi tệp cho biết:

  • Đã bắt đầu thực thi hàm
  • Hàm đã được kích hoạt cho một tệp cụ thể
  • Đã tạo một việc làm
  • Hàm đã thực thi xong

c864dff5a03c75a9.png

Sau khi hàm create_DLP_job hoàn tất cho từng tệp, công việc DLP tương ứng sẽ được bắt đầu. Chuyển đến Trang công việc Ngăn chặn mất dữ liệu (DLP) để xem danh sách các công việc DLP trong hàng đợi:

Bạn sẽ thấy danh sách các công việc đang chờ xử lý, Đang chạy hoặc Xong. Mỗi tệp trong số này tương ứng với một trong các tệp mà chúng tôi đã tải lên:

6af34e72ecb83faf.png.

Bạn có thể nhấp vào mã công việc bất kỳ trong số này để xem thêm chi tiết.

Nếu quay lại trang Cloud Functions và kiểm tra trạng thái đăng xuất của hàm resolve_DLP, thì bạn sẽ thấy ít nhất 8 mục cho mỗi tệp, cho biết rằng:

  • Đã bắt đầu thực thi hàm
  • Đã nhận thông báo nhà xuất bản/người đăng ký
  • Tên của công việc Ngăn chặn mất dữ liệu (DLP) tương ứng
  • Mã trạng thái
  • Số lượng bản sao dữ liệu nhạy cảm (nếu có)
  • Bộ chứa mà tệp sẽ được chuyển đến
  • Công việc DLP (Ngăn chặn mất dữ liệu) đã hoàn tất quá trình phân tích cú pháp tệp
  • Hàm đã thực thi xong

5025bd672cba90a0.pngs

Ngay khi tất cả lệnh gọi đến hàm resolve_DLP chạy xong, hãy kiểm tra lại nội dung của bộ chứa cách ly:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

Lần này, cửa sổ sẽ trống hoàn toàn. Tuy nhiên, nếu bạn chạy lệnh tương tự ở trên cho các bộ chứa khác, bạn sẽ thấy các tệp của chúng tôi được tách riêng hoàn toàn vào các nhóm tương ứng!

7. Dọn dẹp

Giờ đây, chúng ta đã biết cách sử dụng API DLP kết hợp với Cloud Functions để phân loại dữ liệu. Giờ hãy dọn dẹp dự án của chúng ta về tất cả các tài nguyên chúng ta đã tạo.

Xoá dự án

Nếu muốn, bạn có thể xoá toàn bộ dự án. Trong Bảng điều khiển GCP, hãy chuyển đến trang Cloud Resource Manager (Trình quản lý tài nguyên trên đám mây):

Trong danh sách dự án, hãy chọn dự án mà chúng ta đang xử lý rồi nhấp vào Xoá. Bạn sẽ được nhắc nhập mã dự án. Nhập mật khẩu và nhấp vào Tắt.

Ngoài ra, bạn cũng có thể xoá toàn bộ dự án ngay trên Cloud Shell bằng gcloud:

gcloud projects delete [PROJECT_ID]

Nếu bạn muốn xoá từng thành phần, hãy chuyển sang phần tiếp theo.

Chức năng đám mây

Xoá cả hai chức năng đám mây của chúng ta thông qua gcloud:

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

Bộ chứa lưu trữ

Xóa tất cả các tệp đã tải lên và xóa các nhóm có Boleto:

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

Pub/Sub

Trước tiên, hãy xoá gói thuê bao pub/sub bằng gcloud:

gcloud pubsub subscriptions delete classify-sub

Cuối cùng, hãy xoá chủ đề pub/sub bằng gcloud:

gcloud pubsub topics delete classify-topic

8. Xin chúc mừng!

Tuyệt vời! Các bạn đã làm được! Bạn đã tìm hiểu cách sử dụng API DLP cùng với Cloud Functions để tự động hoá việc phân loại tệp!

Nội dung đã đề cập

  • Chúng tôi tạo ra các bộ chứa Cloud Storage để lưu trữ dữ liệu nhạy cảm và không nhạy cảm
  • Chúng tôi đã tạo một chủ đề và gói thuê bao Pub/Sub để kích hoạt một chức năng đám mây
  • Chúng tôi đã tạo ra Cloud Functions nhằm bắt đầu công việc DLP giúp phân loại các tệp dựa trên dữ liệu nhạy cảm có trong đó
  • Chúng tôi đã tải dữ liệu thử nghiệm lên và xem thử các chức năng đám mây của chúng tôi Ghi lại Stackdriver để xem quy trình trong thực tế