طبقه‌بندی خودکار داده‌های آپلود شده در فضای ذخیره‌سازی ابری با DLP API و توابع ابری

طبقه‌بندی خودکار داده‌های آپلود شده در فضای ذخیره‌سازی ابری با DLP API و توابع ابری

درباره این codelab

subjectآخرین به‌روزرسانی: فوریه ۱۵, ۲۰۲۲
account_circleنویسنده: Roger Martinez

1. نمای کلی

در سازمان های امروزی، حجم فزاینده ای از داده ها از منابع مختلف دریافت می شود. این اغلب مستلزم قرنطینه و طبقه‌بندی داده‌ها به منظور ذخیره و حفاظت استراتژیک آن است – کاری که اگر دستی باقی بماند به سرعت پرهزینه و غیرممکن می‌شود.

در این لبه کد، خواهیم دید که چگونه می‌توانیم به طور خودکار داده‌های آپلود شده در فضای ذخیره‌سازی ابری را طبقه‌بندی کنیم و آن‌ها را به یک سطل ذخیره‌سازی مربوطه منتقل کنیم. ما این کار را با استفاده از Cloud Pub/Sub، Cloud Functions، Cloud Data Loss Prevention و Cloud Storage انجام خواهیم داد.

  • سطل های Cloud Storage ایجاد کنید تا به عنوان بخشی از خط لوله قرنطینه و طبقه بندی استفاده شوند.
  • یک Cloud Function ساده ایجاد کنید که در هنگام آپلود فایل ها، DLP API را فراخوانی می کند.
  • یک موضوع Pub/Sub و اشتراک ایجاد کنید تا هنگام تکمیل پردازش فایل به شما اطلاع دهد.
  • فایل های نمونه را در سطل قرنطینه آپلود کنید تا یک تابع ابری را فراخوانی کنید
  • از 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 ارائه می‌کند.
  • Cloud Storage - Google Cloud Storage یک سرویس RESTful برای ذخیره و دسترسی به داده های شما در زیرساخت Google است.

مجوزهای حساب های خدماتی

حساب سرویس نوع خاصی از حساب است که توسط برنامه ها و ماشین های مجازی برای برقراری تماس های مجاز API استفاده می شود.

حساب سرویس پیش فرض موتور برنامه

حساب سرویس پیش‌فرض 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 Service Agent را اعطا کنید که مجوزهای حساب سرویس را برای bigquery، storage، datastore، pubsub و سرویس مدیریت کلید اجازه می دهد:

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. سطل های ذخیره سازی ابری

اکنون باید 3 سطل Cloud Storage برای ذخیره داده های خود ایجاد کنیم:

  • سطل قرنطینه: داده‌های ما ابتدا در اینجا آپلود می‌شوند.
  • سطل داده های حساس: داده هایی که توسط API DLP برای حساس بودن تعیین شده است به اینجا منتقل می شوند.
  • سطل داده های غیر حساس: داده هایی که توسط DLP API تعیین شده حساس نیستند به اینجا منتقل می شوند.

ما می توانیم از دستور gsutil برای ایجاد هر سه سطل خود در یک حرکت استفاده کنیم:

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

به نام سطل هایی که ایجاد کرده اید توجه داشته باشید - بعداً به آنها نیاز خواهیم داشت.

4. موضوع Pub/Sub و اشتراک

Cloud Pub/Sub پیام‌های ناهمزمان بسیاری را بین برنامه‌ها فراهم می‌کند. یک ناشر یک پیام ایجاد می کند و آن را در فید پیام هایی به نام موضوع منتشر می کند. یک مشترک این پیام ها را از طریق اشتراک دریافت می کند. بر اساس آن اشتراک، در مورد ما، یک Cloud Function پس از اجرای یک کار DLP، فایل‌ها را به سطل مربوطه منتقل می‌کند.

ابتدا بیایید یک موضوع ایجاد کنیم. هر بار که فایلی به سطل ذخیره سازی قرنطینه ما اضافه می شود، پیامی در اینجا منتشر می شود. نام آن را «موضوع طبقه بندی» می گذاریم

gcloud pubsub topics create classify-topic

هنگامی که موضوع پیامی را منتشر می کند، به اشتراک اطلاع داده می شود. بیایید یک اشتراک pubsub با نام 'classify-sub' ایجاد کنیم:

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

این اشتراک یک تابع Cloud دوم را راه‌اندازی می‌کند که یک کار DLP را شروع می‌کند که فایل را بررسی کرده و آن را به مکان مناسب خود منتقل می‌کند.

5. توابع ابری

توابع ابری به ما این امکان را می دهند که توابع تک منظوره سبک، مبتنی بر رویداد و بدون نیاز به مدیریت سرور یا محیط زمان اجرا را اجرا کنیم. ما با استفاده از فایل main.py ارائه شده، که در dlp-cloud-functions-tutorials/gcs-dlp-classification-python/ قرار دارد، 2 تابع Cloud را اجرا می کنیم.

متغیرها را جایگزین کنید

قبل از اینکه بتوانیم توابع خود را ایجاد کنیم، باید چند متغیر را در فایل main.py خود جایگزین کنیم.

در Cloud Shell Editor، main.py را با جایگزین کردن مقادیر ID پروژه و متغیرهای سطل در خطوط 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 topic را با موضوع 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] کنید. این عملکرد زمانی فعال می شود که فایل های جدید در سطل قرنطینه ای 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

تأیید کنید

بررسی کنید که هر دو تابع ابری ما با دستور 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

از سوی دیگر، داده های نمونه_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

برای اینکه ببینیم راه‌اندازی ما چگونه با فایل‌هایمان رفتار می‌کند، بیایید همه فایل‌های آزمایشی خود را در قرنطینه بارگذاری کنیم

سطل:

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

در ابتدا، فایل‌های ما در سطل قرنطینه‌ای قرار می‌گیرند که آن‌ها را در آن آپلود کرده‌ایم. برای تأیید این موضوع، بلافاصله پس از آپلود فایل ها، محتوای سطل قرنطینه را فهرست کنید:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

برای بررسی مجموعه رویدادهایی که شروع کرده‌ایم، با رفتن به صفحه عملکردهای ابری شروع کنید:

روی منوی Actions برای تابع create_DLP_job کلیک کنید و View Logs را انتخاب کنید:

89211a959bf30392.png

در گزارش ما برای این تابع، حداقل 4 ورودی برای هر یک از فایل های خود می بینیم که نشان می دهد:

  • اجرای تابع شروع شد
  • این تابع برای یک فایل خاص فعال شده بود
  • یک شغل ایجاد شده بود
  • اجرای تابع به پایان رسیده بود

c864dff5a03c75a9.png

هنگامی که تابع create_DLP_job برای هر فایل کامل شد، یک کار DLP مربوطه آغاز می شود. برای مشاهده لیستی از مشاغل DLP در صف، به صفحه مشاغل DLP بروید:

لیستی از کارهای در انتظار، در حال اجرا یا انجام شده را خواهید دید. هر کدام از آنها با یکی از فایل هایی که آپلود کرده ایم مطابقت دارد:

6af34e72ecb83faf.png

برای مشاهده جزئیات بیشتر می توانید روی شناسه هر یک از این مشاغل کلیک کنید.

اگر به صفحه Cloud Functions برگردید و خروج از سیستم تابع solve_DLP را بررسی کنید، حداقل 8 ورودی برای هر فایل خواهید دید که نشان می دهد:

  • اجرای تابع شروع شد
  • یک اعلان میخانه/فرعی دریافت شد
  • نام شغل DLP مربوطه
  • یک کد وضعیت
  • تعداد نمونه های داده های حساس (در صورت وجود)
  • سطلی که فایل به آن منتقل می شود
  • کار DLP تجزیه فایل را به پایان رسانده است
  • اجرای تابع به پایان رسیده بود

5025bd672cba90a0.png

به محض اینکه همه تماس‌ها با تابع solve_DLP تمام شد، یک بار دیگر محتویات سطل قرنطینه را بررسی کنید:

gsutil ls gs://[YOUR_QUARANTINE_BUCKET]

این بار باید کاملا خالی باشد. با این حال، اگر همان دستور بالا را برای سایر سطل ها اجرا کنید، فایل های ما را کاملاً در سطل های مربوطه خود جدا می کنید!

7. پاکسازی

اکنون که نحوه استفاده از DLP API را در ارتباط با توابع ابری برای طبقه بندی داده ها دیدیم، بیایید پروژه خود را از تمام منابعی که ایجاد کرده ایم پاک کنیم.

پروژه را حذف کنید

اگر ترجیح می دهید، می توانید کل پروژه را حذف کنید. در کنسول GCP، به صفحه Cloud Resource Manager بروید:

در لیست پروژه، پروژه ای را که در آن کار می کردیم انتخاب کنید و روی حذف کلیک کنید. از شما خواسته می شود شناسه پروژه را تایپ کنید. آن را وارد کرده و Shut Down را بزنید.

همچنین، می‌توانید کل پروژه را مستقیماً از Cloud Shell با gcloud حذف کنید:

gcloud projects delete [PROJECT_ID]

اگر ترجیح می دهید اجزای مختلف را یکی یکی حذف کنید، به بخش بعدی بروید.

توابع ابری

هر دو عملکرد ابری خود را با 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 را با gcloud حذف کنید:

gcloud pubsub subscriptions delete classify-sub

و در نهایت موضوع pub/sub را با gcloud حذف کنید:

gcloud pubsub topics delete classify-topic

8. تبریک می گویم!

وو هو! شما آن را انجام دادید. شما یاد گرفته اید که چگونه از DLP API به همراه توابع ابری برای طبقه بندی خودکار فایل ها استفاده کنید!

آنچه را پوشش داده ایم

  • ما سطل های ذخیره سازی ابری را برای ذخیره داده های حساس و غیر حساس خود ایجاد کردیم
  • ما یک موضوع Pub/Sub و اشتراک ایجاد کردیم تا عملکرد ابری را فعال کنیم
  • ما توابع ابری را ایجاد کردیم که برای شروع یک کار DLP طراحی شده اند که فایل ها را بر اساس داده های حساس موجود در آنها دسته بندی می کند.
  • ما داده‌های آزمایشی را آپلود کردیم و گزارش‌های Stackdriver توابع ابری خود را بررسی کردیم تا فرآیند را در عمل ببینیم