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

1. مقدمة

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

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

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

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

لإكمال هذا البرنامج التعليمي، يجب استيفاء المتطلبات الأساسية التالية:

dbec101f41102ca2.png

إعداد المراجع

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

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

a0ceb29950db4eac.png

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

التكلفة

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

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

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

كما ذكرنا سابقًا، سنعيد استخدام المراجع التي تم إنشاؤها في البرنامج التعليمي السابق. لذا، سنمضي قدمًا ونواصل إنشاء حزمة 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 API

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

  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 > مثيلات الأجهزة الافتراضية.
  2. انقر على زر SSH للاتصال بمثيل الجهاز الافتراضي والوصول إلى سطر الأوامر.

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 Service Control في واجهة سطر الأوامر للجهاز الافتراضي بدلاً من قائمة بكائنات Storage:

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"

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

6. حلّ المشاكل المتعلّقة برفض القائمة

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

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

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

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

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 

يمكننا الآن محاولة الوصول إلى الحزمة من مثيل الجهاز الظاهري مرة أخرى.

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

يمكننا الآن عرض قائمة بالكائن بدون حدوث انتهاك لإذن VPC Service Controls، ولكن ماذا عن تنزيل الملف؟ لنجرّب ذلك.

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 لتجنُّب تحمّل رسوم. يؤدي حذف مشروعك على السحابة الإلكترونية إلى إيقاف الفوترة لجميع الموارد المستخدَمة في هذا المشروع.

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

da0abf0894fe03cd.png

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

8. تهانينا!

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

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

الترخيص

يخضع هذا العمل لترخيص المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0 Generic License.