1. Tổng quan
Trong tổ chức hiện đại, ngày càng có nhiều dữ liệu đến từ nhiều nguồn. Điều này thường đòi hỏi bạn phải cách ly và phân loại dữ liệu đó để lưu trữ và bảo vệ một cách 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 vẫn làm theo cách thủ công.
Trong lớp học lập trình này, chúng ta sẽ xem cách tự động phân loại dữ liệu được tải lên Cloud Storage và di chuyển dữ liệu đó vào một bộ chứa lưu trữ tương ứng. Chúng ta sẽ thực hiện việc này bằng cách sử dụng Cloud Pub/Sub, Cloud Functions, Ngăn chặn mất dữ liệu trên đám mây và Cloud Storage.
Bạn sẽ thực hiện
- Tạo các bộ chứa Cloud Storage để sử dụng trong quy trình cách ly và phân loại.
- Tạo một Cloud Function đơn giản để gọi API DLP khi tệp được tải lên.
- Tạo một chủ đề và gói thuê bao Pub/Sub để thông báo cho bạn khi quá trình xử lý tệp hoàn tất.
- Tải tệp mẫu lên bộ chứa cách ly để gọi một Cloud Function
- Sử dụng DLP API để kiểm tra và phân loại các tệp, sau đó di chuyển các tệp đó vào nhóm thích hợp.
Bạn cần có
- Một dự án trên Google Cloud có thông tin thanh toán. Nếu chưa có, bạn sẽ phải tạo một tài khoản.
2. Thiết lập
Trong suốt lớp học lập trình này, chúng ta sẽ cung cấp và quản lý nhiều tài nguyên và dịch vụ đám mây bằng dòng lệnh thông qua Cloud Shell. Lệnh sau đây sẽ mở Cloud Shell cùng với Cloud Shell Editor và sao chép kho lưu trữ dự án đi kèm:
Đảm bảo bạn đang sử dụng đúng dự án bằng cách thiết lập 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 Google Cloud của bạn:
- Cloud Functions API – Quản lý các hàm đơn giản do người dùng cung cấp, được thực thi để phản hồi các sự kiện.
- API Ngăn chặn mất dữ liệu (DLP) trên đám mây – Cung cấp các phương thức phát hiện, phân tích rủi ro và loại bỏ thông tin nhận dạng của các đoạn nhạy cảm về quyền riêng tư trong văn bản, hình ảnh và kho lưu trữ của Google Cloud Platform.
- Cloud Storage – Google Cloud Storage là một dịch vụ RESTful để 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 mà các ứng dụng và máy ảo dùng để thực hiện các 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 trên đám mây thay 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 sẽ có trong dự án của bạn và được chỉ định vai trò Người chỉnh sửa.
Trước tiên, chúng ta 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ò Tác nhân dịch vụ DLP API để cấp cho tài khoản dịch vụ các quyền đối với BigQuery, bộ nhớ, kho dữ liệu, 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ụ DLP
Ngoài tài khoản dịch vụ App Engine, chúng ta 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 DLP API được bật và ban đầu không được cấp vai trò nào. Hãy cấp cho nhóm này 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 Cloud Storage để lưu trữ dữ liệu:
- Nhóm cách ly: dữ liệu của bạn sẽ được tải lên đây ban đầu.
- Nhóm dữ liệu nhạy cảm: dữ liệu được DLP API xác định là nhạy cảm sẽ được di chuyển đến đây.
- Nhóm dữ liệu không nhạy cảm: dữ liệu mà DLP API xác định là không nhạy cảm sẽ được chuyển đến đây
Chúng ta có thể dùng lệnh gsutil để tạo cả 3 vùng chứa cùng một lúc:
gsutil mb gs://[YOUR_QUARANTINE_BUCKET] \ gs://[YOUR_SENSITIVE_DATA_BUCKET] \ gs://[YOUR_NON_SENSITIVE_DATA_BUCKET]
Ghi lại tên của các vùng chứa mà bạn vừa tạo. Chúng ta sẽ cần đến chúng sau này.
4. Chủ đề và gói thuê bao Pub/Sub
Cloud Pub/Sub cung cấp dịch vụ nhắn tin không đồng bộ từ nhiều đến nhiều 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 đó vào một nguồn cấp dữ liệu thông báo được gọi là chủ đề. Người đăng ký sẽ nhận được những thông báo này thông qua gói thuê bao. Dựa trên thông tin đăng ký đó, trong trường hợp này, chúng ta sẽ có một Cloud Function di chuyển các tệp đến các vùng chứa tương ứng sau khi một công việc DLP chạy.
Trước tiên, hãy tạo một chủ đề. Thông báo sẽ được đăng ở đây mỗi khi một tệp được thêm vào vùng lưu trữ cách ly của chúng tôi. Chúng ta sẽ đặt tên là "classify-topic"
gcloud pubsub topics create classify-topic
Gói thuê bao sẽ nhận được thông báo khi chủ đề xuất bản một thông báo. 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
Đăng ký đó sẽ kích hoạt một Cloud Function thứ hai để bắt đầu một công việc DLP, công việc này sẽ kiểm tra tệp và di chuyển tệp đó đến đúng vị trí.
5. Cloud Functions
Cloud Functions cho phép chúng tôi triển khai các hàm một mục đích, không đồng bộ, dựa trên sự kiện và có dung lượng nhẹ 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 trên đám mây bằ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 các 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à các biến vùng chứa trên các dòng từ 28 đến 34 bằng các vùng chứa 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ủ đề xuất bản/đăng ký bằng chủ đề xuất bản/đăng ký đã 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 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ố hàm.
Trước tiên, hãy triển khai hàm create_DLP_job, thay thế [YOUR_QUARANTINE_BUCKET] bằng tên nhóm chính xác. Hàm này sẽ được kích hoạt khi các tệp mới được tải lên vùng cách ly Cloud Storage được chỉ định và sẽ tạo một công việc DLP cho từng tệp được 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, cho biết chủ đề của chúng ta là điều kiện kích hoạt cho hàm này. Hàm này theo dõi thông báo xuất bản/đăng ký được bắt đầu từ công việc DLP tiếp theo của hàm ở trên. Ngay khi nhận được thông báo pub/sub, ứng dụng sẽ lấy kết quả từ công việc DLP và di chuyển tệp đến nhóm nhạy cảm hoặc nhóm không nhạy cảm cho phù hợp:
gcloud functions deploy resolve_DLP --runtime python37 \ --trigger-topic classify-topic
Xác minh
Xác minh rằng cả hai hàm trên đám mây của chúng ta đều đượ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ẽ là ACTIVE cho trạng thái khi được triển khai thành công.
6. Kiểm thử bằng dữ liệu mẫu
Sau khi hoàn tất tất cả các bước, giờ đây, chúng ta có thể kiểm thử mọi thứ bằng một số tệp mẫu. Trong Cloud Shell, hãy thay đổi thư mục đang hoạt động hiện tại thành sample_data:
cd ~/cloudshell_open/dlp-cloud-functions-tutorials/sample_data
Các tệp mẫu của chúng tôi bao gồm các tệp txt và csv chứa nhiều phần dữ liệu. Các tệp có tiền tố "sample_s" sẽ chứa dữ liệu nhạy cảm, trong khi các tệp có tiền tố "sample_n" sẽ không chứa dữ liệu nhạy cảm. Ví dụ: sample_s20.csv chứa nội dung được định dạng trô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à dữ liệu 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 chế độ thiết lập của chúng ta sẽ xử lý các tệp như thế nào, hãy tải tất cả các tệp kiểm thử lên vùng cách ly
bucket:
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 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 nhóm cách ly:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
Để xem chuỗi sự kiện mà chúng ta đã bắt đầu, hãy chuyển đến trang Cloud Functions:
Nhấp vào trình đơn Actions (Hành động) cho hàm create_DLP_job, rồi chọn View Logs (Xem nhật ký):

Trong nhật ký cho 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 công việc
- Hàm đã thực thi xong

Sau khi hàm create_DLP_job hoàn tất cho từng tệp, một DLP job tương ứng sẽ được bắt đầu. Chuyển đến trang DLP Jobs (Công việc 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 ở trạng thái Đang chờ xử lý, Đang chạy hoặc Đã hoàn tất. Mỗi tệp trong số này tương ứng với một trong những tệp mà chúng ta đã tải lên:

Bạn có thể nhấp vào mã nhận dạng của bất kỳ công việc nào trong số này để xem thêm thông tin chi tiết.
Nếu quay lại trang Cloud Functions và kiểm tra nhật ký của hàm resolve_DLP, bạn sẽ thấy ít nhất 8 mục cho mỗi tệp, cho biết:
- Đã bắt đầu thực thi hàm
- Đã nhận được một thông báo pub/sub
- Tên của công việc DLP tương ứng
- Mã trạng thái
- Số lượng trường hợp dữ liệu nhạy cảm (nếu có)
- Nhóm mà tệp sẽ được di chuyển đến
- Tác vụ DLP đã phân tích cú pháp xong tệp
- Hàm đã thực thi xong

Ngay sau khi tất cả các lệnh gọi đến hàm resolve_DLP hoàn tất, hãy kiểm tra lại nội dung của vùng cách ly:
gsutil ls gs://[YOUR_QUARANTINE_BUCKET]
Lần này, bạn nên để trống hoàn toàn. Tuy nhiên, nếu chạy cùng một lệnh ở trên cho các nhóm khác, bạn sẽ thấy các tệp của chúng ta được tách biệt hoàn toàn vào các nhóm tương ứng!
7. Dọn dẹp
Giờ đây, khi đã biết cách sử dụng DLP API kết hợp với Cloud Functions để phân loại dữ liệu, hãy dọn dẹp dự án của chúng ta khỏi tất cả các tài nguyên mà 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 thực hiện rồi nhấp vào Xoá. Bạn sẽ được nhắc nhập mã dự án. Nhập mật khẩu rồi nhấp vào Tắt.
Ngoài ra, bạn có thể xoá toàn bộ dự án ngay trong 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.
Cloud Functions
Xoá cả hai hàm trên đám mây bằng gcloud:
gcloud functions delete -q create_DLP_job && gcloud functions delete -q resolve_DLP
Nhóm lưu trữ
Xoá tất cả các tệp đã tải lên và xoá các vùng chứa bằng gsutil:
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 xuất bản/nhận 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! Bạn đã làm được. Bạn đã tìm hiểu cách sử dụng DLP API 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 các Nhóm 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 hàm trên đám mây
- Chúng tôi đã tạo Cloud Functions được thiết kế để bắt đầu một công việc DLP phân loại các tệp dựa trên dữ liệu nhạy cảm có trong các tệp đó
- Chúng tôi đã tải dữ liệu kiểm thử lên và xem nhật ký Stackdriver của Cloud Functions để xem quy trình hoạt động