الإصدار الثاني من عناصر التحكّم في خدمة سحابة VPC التعليمية - تحديد مشاكل انتهاك الخروج وحلّها

1. مقدمة

VPC Service Controls (VPC-SC) هي عناصر تحكّم في الأمان على مستوى المؤسسة في Google Cloud تتيح لعملاء المؤسسات الحدّ من مخاطر استخراج البيانات. توفّر عناصر التحكّم في خدمة سحابة VPC إمكانية الوصول بدون ثقة إلى خدمات مستأجرين متعددين من خلال السماح للعملاء بحظر الوصول إلى عناوين IP المعتمَدة وسياق العميل ومَعلمات الجهاز أثناء الاتصال بخدمات مستأجرين متعددين من الإنترنت والخدمات الأخرى للحدّ من الخسائر المتعمَّدة وغير المقصودة. كما رأينا في البرنامج التعليمي الأساسي لعناصر التحكم في خدمة سحابة VPC I، يمكنك استخدام عناصر التحكّم في خدمة سحابة VPC لإنشاء محيط تحمي موارد وبيانات الخدمات التي تحدّدها صراحةً.

الأهداف من هذا البرنامج التعليمي هي:

  • فهم أساسيات عناصر التحكّم في خدمة سحابة VPC
  • تعديل محيط الخدمة واختباره باستخدام "وضع التشغيل التجريبي"
  • حماية خدمتَين باستخدام عناصر التحكّم في خدمة سحابة VPC
  • تحديد وحلّ المشاكل المتعلّقة بانتهاك مخرجات عناصر التحكّم في خدمة سحابة VPC عند إدراج عنصر من Cloud Storage

2. الإعداد والمتطلبات

نحتاج إلى المتطلبات المسبقة التالية في هذا البرنامج التعليمي:

dbec101f41102ca2.png

إعداد الموارد

  1. إعداد الموارد على النحو الموضّح في قسم "إعداد الموارد" قسم البرنامج التعليمي الأساسي لعناصر التحكّم في خدمة VC
  2. تأكَّد من حصولك على الأذونات المطلوبة لإدارة Cloud Storage.
  3. في هذا البرنامج التعليمي، سنبدأ في استخدام واجهة سطر الأوامر بدلاً من وحدة التحكم في السحابة الإلكترونية. في إحدى بيئات التطوير، يمكنك إعداد واجهة سطر الأوامر gcloud:
  • Cloud Shell: لاستخدام وحدة طرفية على الإنترنت مع إعداد واجهة سطر الأوامر gcloud CLI، يمكنك تفعيل Cloud Shell.

يمكنك تفعيل Cloud Shell من خلال النقر على الرمز في أعلى يسار وحدة التحكُّم في السحابة الإلكترونية. قد يستغرق بدء الجلسة بضع ثوانٍ. يُرجى الاطّلاع على دليل Cloud Shell لمزيد من التفاصيل.

a0ceb29950db4eac.png

  • Local Shell: لاستخدام بيئة تطوير محلية، عليك تثبيت واجهة سطر الأوامر gcloud وإعدادها.

التكلفة

عليك تفعيل الفوترة في Cloud Console لاستخدام الموارد/واجهات برمجة التطبيقات من Cloud. لن يؤدي إكمال هذا الدرس التطبيقي حول الترميز إلى فرض أي تكاليف، إن وُجدت. لإيقاف تشغيل الموارد لتجنب تحمُّل الفواتير إلى ما هو أبعد من هذا البرنامج التعليمي، يمكنك حذف الموارد التي أنشأتها أو حذف المشروع. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج الفترة التجريبية المجانية الذي تبلغ قيمته 300 دولار أمريكي.

الموارد الوحيدة التي ستترتب عليها تكلفة هي مثيل الجهاز الافتراضي (VM) وكائن Cloud Storage. يمكن العثور على التكلفة المقدّرة لمثيل الجهاز الافتراضي في حاسبة الأسعار. يمكن العثور على التكلفة المقدّرة لخدمة Cloud Storage في قائمة الأسعار هذه.

3- إنشاء حزمة تخزين وعنصر

كما ذكرنا سابقًا، سنعيد استخدام الموارد التي تم إنشاؤها في البرنامج التعليمي السابق. سنواصل إنشاء حزمة Cloud Storage. في هذا البرنامج التعليمي، سنبدأ في استخدام gcloud CLI بدلاً من وحدة التحكّم.

  1. في Google Console، اختَر ProjectX. في هذا المشروع، سننشئ حزمة التخزين والكائن.
  2. تأكَّد من ضبط إعدادات Cloud Shell على استخدام ProjectX من خلال تنفيذ الأمر التالي:
gcloud config set project PROJECT_ID
  1. في بيئة التطوير، شغِّل الأمر التالي:
gcloud storage buckets create gs://BUCKET_NAME --location=us-central1
  1. أنشِئ كائن تخزين حتى نتمكّن من قراءته من مثيل الجهاز الافتراضي (VM) في ProjectZ. سننشئ ملف txt.
nano hello.txt 

أضِف أي محتوى تريده في الملف النصي.

  1. حمِّل العنصر إلى الحزمة.
gcloud storage cp /home/${USER}/hello.txt gs://BUCKET_NAME
  1. تحقَّق من تحميل العنصر إلى الحزمة من خلال إدراجه.
gcloud storage ls gs://BUCKET_NAME

يجب أن يظهر لك ملف hello.txt مدرجًا في وحدة التحكّم.

4. واجهة برمجة تطبيقات Protect Cloud Storage

في الدرس التطبيقي السابق حول الترميز، أنشأنا محيطًا وواجهة برمجة تطبيقات Compute Engine محمية. في هذا الدرس التطبيقي حول الترميز، سنُعدّل محيط وضع التشغيل التجريبي ونضيف خدمة Cloud Storage. سيساعدنا ذلك في تحديد تأثير الحماية المحيطة من خلال توضيح مخالفات عناصر التحكّم في خدمة "سحابة VPC" في سجلّات التدقيق، ولكن سيظل بإمكانك الوصول إلى الموارد إلى أن يتم فرض المحيط.

  1. في Google Console، اختَر مؤسستك. الوصول إلى عناصر التحكّم في خدمة سحابة VPC تأكَّد من أنّك في نطاق المؤسسة.
  2. افتح Cloud Shell وعدِّل محيط "التشغيل الجاف" "SuperProtection". تم إنشاؤه في التمرين المعملي السابق:
gcloud access-context-manager perimeters dry-run update SuperProtection --policy=POLICY --add-restricted-services=storage.googleapis.com
  1. تأكَّد من تحديث Cloud Storage API من خلال وصف المحيط.
gcloud access-context-manager perimeters dry-run describe SuperProtection --policy=POLICY 

في النتيجة، ستلاحظ أنّ Cloud Storage API مُدرجة أدناه ضمن الخدمات المحظورة.

مع Compute Engine API ولكن مع التصنيف "-vpcAccessibleServices: {}":

2025ddc01a2e9a81.png

5- التأكّد من حماية واجهة Cloud Storage API

في وضع "التشغيل التجريبي"، تأكَّد من أنّ خيار "SuperProtection" يُظهر لنا المحيط الرفض من خلال إدراج الكائن من مثيل الجهاز الافتراضي الذي تم إنشاؤه في ProjectZ إلى ProjectX الذي يستضيف "حزمة التخزين".

  1. في Cloud Console، انتقِل إلى أداة اختيار المشاريع واختَر ProjectZ، ثم انتقِل إلى Compute Engine >. مثيلات الجهاز الافتراضي (VM)
  2. انقر على زر SSH للاتصال بمثيل الجهاز الافتراضي (VM) والوصول إلى سطر الأوامر الخاص به.

5ca02149b78c11f9.png

  1. اذكر ملف hello.txt الذي قمنا بتحميله سابقًا.
gcloud storage ls gs://BUCKET_NAME

بما أنّ Cloud Storage API محمية في وضع التشغيل التجريبي، من المفترَض أن تتمكّن من إدراج الموارد، ولكن يجب أن تظهر لك رسالة خطأ في سجلّات تدقيق ProjectZ.

  1. انتقِل إلى Logs Explorer API في ProjectZ وابحث عن رسالة الخطأ الأخيرة لعناصر التحكّم في خدمة VPC. يمكنك استخدام هذا الفلتر للحصول على السجل الذي نبحث عنه:
protoPayload.status.details.violations.type="VPC_SERVICE_CONTROLS"
"(Dry Run Mode) Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:UNIQUE_ID"

سيعرض لنا هذا الفلتر آخر انتهاك في وضع "التشغيل التجريبي" الذي يخصّ Cloud Storage. إليك مثال حول شكل السجلّ ويمكننا التحقق من أنّ الانتهاك عبارة عن خروج عند محاولة إدراج المحتوى في الحزمة الموجودة في ProjectX.

egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTX_ID"
sourceType: "Network"
targetResource: "projects/PROJECTZ_ID"
}
]
resourceNames: [
0: "projects//buckets/BUCKET_NAME"
]
securityPolicyInfo: {
organizationId: "ORGANIZATION_ID"
servicePerimeterName: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
vpcServiceControlsUniqueId: "UNIQUE_ID"
}
methodName: "google.storage.objects.list"
  1. بعد أن تأكّدنا من أنّ طلب بيانات من واجهة برمجة التطبيقات إلى Cloud Storage يؤدّي إلى انتهاك عناصر التحكّم في خدمة VPC، سنفرض البيئة المحيطة من خلال الإعدادات الجديدة. افتح Cloud Shell وافرض محيط "التشغيل التجريبي":
gcloud access-context-manager perimeters dry-run enforce SuperProtection --policy=POLICY --async
  1. يمكنك الاتصال بمثيل الجهاز الافتراضي باستخدام بروتوكول النقل الآمن (SSH) وإدراج حزمة التخزين مرة أخرى للتأكّد من فرض محيط "التشغيل التجريبي" بشكل صحيح.
gcloud storage ls gs://BUCKET_NAME

سنتلقّى مخالفة بشأن التحكّم في خدمة سحابة VPC في واجهة سطر الأوامر "VM" بدلاً من قائمة عناصر مساحة التخزين:

ERROR: (gcloud.storage.ls) User [PROJECT_NUMBER-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): Request is prohibited by organization's policy. vpcServiceControlsUniqueIdentifier:"UNIQUE_ID"

لقد منعنا استخراج البيانات من خلال استخدام عناصر التحكّم في خدمة "سحابة VPC" لمنع قراءة البيانات من أو نسخ البيانات إلى مورد خارج محيطه.

6- تحري خلل رفض القائمة وإصلاحه.

سنعمل على تحديد مشاكل الرفض التي حصلنا عليها من واجهة سطر الأوامر لمثيل الجهاز الافتراضي (VM) وحلّها. لنتحقّق من سجلّات التدقيق ونبحث عن المعرّف الفريد لعناصر التحكّم في خدمة سحابة VPC.

  1. انتقِل إلى أداة اختيار المشروع واختَر ProjectZ.
  2. ابحث عن المعرّف الفريد لعناصر التحكّم في خدمة سحابة VPC في سجلّات التدقيق باستخدام طلب البحث التالي في مستكشف السجلات:
resource.type="audited_resource"
protoPayload.metadata."@type"="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"

سيؤدي هذا الإجراء إلى عرض جميع سجلّات تدقيق عناصر التحكّم في خدمة سحابة VPC. سنبحث عن سجلّ الأخطاء الأخير. بما أنّه تم إجراء طلب بيانات من واجهة برمجة التطبيقات من مثيل الجهاز الافتراضي (VM)، يجب أن يكون الحساب الأساسي هو حساب خدمة Compute Engine "PROJECT_NUMBER-compute@developer.gserviceaccount.com"".

بما أنّ لدينا معرّفًا فريدًا لعناصر التحكّم في خدمة سحابة VPC، يمكننا استخدامه للحصول على السجلّ المطلوب مباشرةً باستخدام الفلتر التالي:

protoPayload.metadata.vpcServiceControlsUniqueId="UNIQUE_ID"
  1. انقر على العنوان عناصر التحكّم في خدمة VPC، واختَر "تحديد مشاكل الرفض وحلّها". ستفتح أداة حلّ المشاكل في عناصر التحكّم في خدمة سحابة VPC.

ستوضّح لنا واجهة برمجة التطبيقات هذه في واجهة مستخدم ودية سبب الانتهاك وما إذا كان هناك انتهاك في سياسة الدخول أو الخروج، بالإضافة إلى معلومات مفيدة أخرى.

في هذا التمرين، سنبحث عن ما يلي:

authenticationInfo: {
principalEmail: "PROJECT_ID-compute@developer.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/POLICY/servicePerimeters/SuperProtection"
source: "projects/PROJECTZ_ID"
sourceType: "Network"
targetResource: "projects/PROJECTX_ID"
}
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

هذه المعلومات كافية لنعرف أنّنا بحاجة إلى إنشاء قاعدة خروج للسماح لحساب خدمة Compute Engine بالوصول إلى حزمة مساحة التخزين من ProjectZ إلى ProjectX. يمكننا أيضًا ملاحظة أنّ الشبكة ليست في المحيط نفسه، لذلك نحتاج إلى السماح باتصال سحابة VPC بالخدمات ومشاركة البيانات على مستوى محيط الخدمة.

  1. فعِّل Cloud Shell وأنشِئ ملف yaml .باستخدام قاعدة الخروج باستخدام محرِّر نصوص.
nano egresstorage.yaml 
- egressTo:
    operations:
    - serviceName: storage.googleapis.com
      methodSelectors:
      - method: \"*\"
    resources:
    - projects/PROJECTX_ID
 egressFrom:
    identities:
    - serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com
  1. تعديل سياسة الدخول التي تحمي ProjectZ.
gcloud access-context-manager perimeters update SuperProtection --set-egress-policies=egresstorage.yaml --policy=POLICY 

يمكننا الآن إعادة محاولة الوصول إلى الحزمة من مثيل الجهاز الافتراضي (VM).

  1. في Cloud Console، انتقِل إلى أداة اختيار المشاريع واختَر ProjectZ، ثم انتقِل إلى Compute Engine >. مثيلات الجهاز الافتراضي (VM)
  2. انقر على زر SSH للاتصال بمثيل الجهاز الافتراضي (VM) والوصول إلى سطر الأوامر الخاص به.
  3. بعد الانتقال إلى واجهة سطر الأوامر في الجهاز الافتراضي (VM)، حاوِل إدراج العناصر في حزمة Storage.
gcloud storage ls gs://BUCKET_NAME/

ستظهر لك رسالة الخطأ التالية:

ERROR: (gcloud.storage.ls) User [PROJECT_ID-compute@developer.gserviceaccount.com] does not have permission to access b instance [BUCKET_NAME] (or it may not exist): PROJECT_ID-compute@developer.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
  1. يجب منح إذن قارئ الكائنات لحساب خدمة Compute Engine كي نتمكّن من إدراج العناصر في "حزمة التخزين".
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME --member=serviceAccount:PROJECT_ID-compute@developer.gserviceaccount.com --role=roles/storage.objectViewer
  1. مرة أخرى، لنحاول سرد ملف hello.txt من واجهة سطر الأوامر الخاصة بالمثيل الافتراضي .
gcloud storage ls gs://BUCKET_NAME/
.
.
gs://BUCKET_NAME/hello.txt

أصبح بإمكاننا الآن إدراج العنصر بدون مخالفة إذن عناصر التحكّم في خدمة "سحابة VPC"، ولكن ماذا عن تنزيل الملف؟ لنجرب ذلك.

gcloud storage cp gs://BUCKET_NAME/hello.txt /home/${USER}

وسنحصل على الناتج التالي

Copying gs://BUCKET_NAME/hello.txt to file:///home/${USER}
 Completed files 1/1 | 54.0B/54.0B  

7. تنظيف

لا يتم فرض رسوم منفصلة مقابل استخدام عناصر التحكّم في خدمة "سحابة VPC" عندما لا تكون الخدمة قيد الاستخدام، إلّا أنّه من أفضل الممارسات تنظيف الإعدادات المستخدَمة في هذا المختبر. يمكنك أيضًا حذف مثيل الجهاز الافتراضي و/أو مشاريع Cloud لتجنُّب تحمُّل الرسوم. يؤدي حذف مشروعك على Google Cloud إلى إيقاف الفوترة لجميع الموارد المستخدمة في هذا المشروع.

  1. لحذف مثيل الجهاز الافتراضي (VM)، ضَع علامة في مربّع الاختيار على يمين اسم الجهاز الافتراضي، ثم انقر على حذف.

da0abf0894fe03cd.png

  1. لحذف المحيط، أكمِل الخطوات التالية:
  • في Google Cloud Console، انقر على الأمان، ثم انقر على VPC Service Controls على نطاق المؤسسة.
  • في صفحة "عناصر التحكّم في خدمة سحابة VPC"، انقر على "حذف الرمز" في صف الجدول المقابل للمحيط الذي تريد حذفه.
  1. لحذف مستوى الوصول، أكمل الخطوات التالية:
  • في Google Cloud Console، افتح صفحة Access Context Manager في نطاق المجلد.
  • في الشبكة، في صف مستوى الوصول الذي تريد حذفه، انقر على "حذف الرمز"، ثم انقر على حذف.
  1. لحذف عنصر التخزين والحزمة، أكمِل الخطوات التالية:
  • في وحدة تحكُّم Google Cloud، افتح صفحة حِزم Cloud Storage .
  • ضع علامة في مربّع الاختيار بجانب الحزمة التي أنشأتها.
  • انقر على حذف.
  • في النافذة التي تظهر لك، أكِّد أنّك تريد حذف الحزمة.
  • انقر على حذف.
  1. لإيقاف تشغيل مشروعك، أكمل الخطوات التالية:
  • في وحدة تحكم Google Cloud، انتقل إلى إدارة الهوية وإمكانية الوصول "إعدادات المشرف" للمشروع الذي تريد حذفه.
  • في إدارة الهوية وإمكانية الوصول انقر على إيقاف التشغيل في صفحة "إعدادات المشرف".
  • أدخِل رقم تعريف المشروع، ثم انقر على إيقاف التشغيل على أي حال.

8. تهانينا!

في هذا الدرس التطبيقي حول الترميز، عدّلت محيط "التشغيل التجريبي" لعناصر التحكّم في خدمة "سحابة VPC" وفرضته وحدّدت المشاكل وحلّها.

مزيد من المعلومات

الترخيص

هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.