1. مقدمة
في هذا المختبر، سنتعلّم كيفية حماية خدمة نقل البيانات في BigQuery باستخدام عناصر التحكّم في خدمة سحابة VPC أثناء نقل البيانات من Cloud Storage إلى مجموعة بيانات BigQuery. بعد ذلك، نحمي Cloud Storage ونكرّر العملية لنقل البيانات من Cloud Storage إلى BigQuery. تتسبّب حماية Cloud Storage في حدوث انتهاك لعناصر التحكّم في خدمة سحابة VPC، ويجب إصلاح هذا الانتهاك لإتمام عملية النقل بنجاح. في النهاية، نحمي أيضًا BigQuery ثم نحاول نسخ مجموعة البيانات بين المشاريع، ما يؤدي أيضًا إلى حدوث انتهاك يجب إصلاحه.
خلال هذا الدرس التطبيقي، سنرى كيفية إصلاح كل من انتهاكات الدخول والخروج باستخدام قواعد الدخول والخروج على التوالي. سنستخدم أيضًا مستوى وصول لإصلاح انتهاك الدخول في "خدمة نقل البيانات في BigQuery". أهداف هذا الدرس التطبيقي هي:
- التعرّف على كيفية إصلاح انتهاكات البيانات الواردة والصادرة باستخدام قواعد البيانات الواردة والصادرة على التوالي في خدمات مختلفة، لا سيما Cloud Storage وBigQuery و"خدمة نقل البيانات في BigQuery"
- فهم سبب حدوث انتهاك معيّن
2. إعداد الموارد ومتطلباتها
قبل البدء
في هذا الدرس العملي، نفترض أنّك تعرف ما يلي:
- كيفية إنشاء مجلد
- كيفية إنشاء مشروع في مجلد أو نقل مشروع حالي إلى مجلد
- كيفية إنشاء سياسة وصول محدودة النطاق
- كيفية إنشاء محيط خدمة وإعداده من وحدة تحكّم Google Cloud
- كيفية العثور على سجلّات الانتهاكات من سجلّات التدقيق
الإعداد
تم تصميم عملية الإعداد الأوّلي على النحو التالي:
- مؤسسة Google Cloud
- مجلد ضمن المؤسسة في هذا الدرس التطبيقي، سنسمّيه
codelab-folder. - مشروعان على Google Cloud في المجلد
codelab-folderفي هذا الدرس التطبيقي، نسمّي المشاريعproject-1وproject-2.- إذا لم يسبق لك إنشاء المجلد والمشاريع، أنشِئ مجلدًا ضمن "المؤسسة" في وحدة تحكّم Google Cloud، ثم أنشِئ مشروعَين جديدَين.
- الأذونات المطلوبة: أدوار إدارة الهوية وإمكانية الوصول لإدارة المجلدات وأدوار إدارة الهوية وإمكانية الوصول لإدارة المشاريع وأدوار إدارة الهوية وإمكانية الوصول المطلوبة لإعداد عناصر التحكّم في خدمة VPC وأدوار إدارة الهوية وإمكانية الوصول لإدارة BigQuery وأدوار إدارة الهوية وإمكانية الوصول لإدارة Cloud Storage.
- حساب الفوترة لكل من المشروعَين
project-1وproject-2
إنشاء سياسة محدودة النطاق وحيّز خدمة عادي
في هذا الدرس التطبيقي حول الترميز، سنستخدم محيط خدمة عاديًا يحمي project-2.
- إنشاء سياسة وصول محدودة النطاق، والتي يتم تحديد نطاقها على مستوى المجلد
codelab-folder. في هذا الدرس التطبيقي حول الترميز، نفترض أنّ سياسة الوصول التي تم إنشاؤها لها المعرّف987654321. - أنشئ محيطًا عاديًا، ونسمّيه
perimeter-2، وأضِف المشروعproject-2.
في المحيط perimeter-2، قيِّدوا BigQuery Data Transfer API.

إنشاء حزمة Cloud Storage ومجموعة بيانات BigQuery
لأغراض هذا الدرس العملي، يكفي أي ملف CSV، بغض النظر عن المحتوى. يتعلّق القيد الرئيسي بشرط الموقع الجغرافي المشترك الذي يفرض ما يلي:
- إذا كانت مجموعة بيانات BigQuery في مناطق متعدّدة، يجب أن تكون حزمة Cloud Storage التي تحتوي على البيانات التي تنقلها في المناطق المتعدّدة نفسها أو في موقع جغرافي مضمّن في المناطق المتعدّدة.
- إذا كانت مجموعة البيانات في منطقة معيّنة، يجب أن تكون حزمة Cloud Storage في المنطقة نفسها.
من الآن فصاعدًا، سنحرص في هذا الدرس التطبيقي حول الترميز على أن تكون كلّ من حزمة Cloud Storage ومجموعة بيانات BigQuery في المنطقة نفسها أو في مناطق متعدّدة.
أنشئ حزمة جديدة في Cloud Storage في المشروع project-1
لإنشاء حزمة Cloud Storage جديدة، اتّبِع الخطوات الموضّحة في إنشاء حزمة جديدة.
- بالنسبة إلى اسم الحزمة، أدخِل اسمًا يستوفي متطلبات اسم الحزمة. في هذا الدرس التطبيقي، سنسمّي الحزمة
codelab-bqtransfer-bucket. - بالنسبة إلى مكان تخزين البيانات، أي الموقع الجغرافي للحزمة، اختَر نوع الموقع الجغرافي والموقع الجغرافي الذي سيتم فيه تخزين بيانات الحزمة بشكل دائم. في هذا الدرس التطبيقي، سنستخدم us (مناطق متعدّدة في الولايات المتحدة).

إنشاء ملف CSV
من جهازك المحلي أو باستخدام Cloud Shell، يمكننا استخدام الأمر echo لإنشاء نموذج ملف csv، codelab-test-file.csv، باستخدام الأوامر التالية:
echo "name,age" > codelab-test-file.csv; \
echo "Alice,10" >> codelab-test-file.csv; \
echo "Bob,20" >> codelab-test-file.csv; \
echo "Carol,30" >> codelab-test-file.csv; \
echo "Dan,40" >> codelab-test-file.csv; \
echo "Eve,50" >> codelab-test-file.csv; \
echo "Frank,60" >> codelab-test-file.csv; \
echo "Grace,70" >> codelab-test-file.csv; \
echo "Heidi,80" >> codelab-test-file.csv;
تحميل ملف CSV إلى حزمة Cloud Storage
بعد إنشاء ملف CSV، نفِّذ الأمر التالي لتحميل عنصر الملف إلى الحزمة التي تم إنشاؤها:
gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket

يمكنك التأكّد من تحميل الملف إلى الحزمة التي تم إنشاؤها من خلال إدراج العناصر في الحزمة أو تنفيذ الأمر التالي:
gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**
إنشاء مجموعة بيانات وجدول في BigQuery في project-2
- أنشئ مجموعة بيانات في BigQuery، في المشروع
project-2باتّباع هذه الخطوات.- في حقل معرّف مجموعة البيانات، أدخِل اسمًا فريدًا لمجموعة البيانات. في هذا الدرس التطبيقي، نستخدم:
codelab_bqtransfer_dataset. - بالنسبة إلى نوع الموقع الجغرافي، اختَر موقعًا جغرافيًا لمجموعة البيانات. في هذا الدرس التطبيقي حول الترميز، نستخدم الموقع الجغرافي نفسه الذي تستخدمه حزمة Cloud Storage: الولايات المتحدة (مناطق متعددة في الولايات المتحدة).

- في حقل معرّف مجموعة البيانات، أدخِل اسمًا فريدًا لمجموعة البيانات. في هذا الدرس التطبيقي، نستخدم:
- أنشئ جدول BigQuery ضمن مجموعة البيانات التي تم إنشاؤها
codelab_bqtransfer_datasetباتّباع هذه الخطوات.- في قسم المصدر، اختَر جدول فارغ من قائمة إنشاء جدول من.
- في حقل الجدول، أدخِل اسم الجدول الذي تريد إنشاءه. في هذا الدرس التطبيقي، نستخدم الاسم:
codelab-bqtransfer-table. - تأكَّد من ضبط حقل نوع الجدول على جدول أصلي.
- في قسم المخطّط، أدخِل تعريف المخطّط. يمكنك إدخال معلومات المخطط من خلال النقر على تعديل كنص وإدخال المخطط التالي الذي يتوافق مع تنسيق ملف CSV الذي تم إنشاؤه.
[{ "name": "name", "type": "STRING", "mode": "NULLABLE", "description": "The name" }, { "name": "age", "type": "INTEGER", "mode": "NULLABLE", "description": "The age" }]
التكلفة
يجب تفعيل الفوترة في المشروعَين project-2 وproject-1 لاستخدام موارد/واجهات برمجة تطبيقات Cloud. ننصح بإيقاف الموارد المستخدَمة لتجنُّب تكبُّد رسوم تتجاوز هذا الدرس العملي.
الموارد التي تتكبّد التكلفة هي BigQuery وCloud Storage. يمكن العثور على التكلفة المقدّرة في حاسبة أسعار BigQuery وحاسبة Cloud Storage.
3- ضبط عملية نقل البيانات من عنصر Cloud Storage إلى جدول BigQuery
سنحاول الآن إنشاء "خدمة نقل البيانات" (في project-2) لنقل البيانات من Cloud Storage (الموجودة في project-1) إلى BigQuery (الموجودة في project-2)، مع توفير عناصر التحكّم في خدمة سحابة VPC لحماية خدمة نقل البيانات في BigQuery في project-2. إنّ حماية "خدمة نقل البيانات في BigQuery" فقط (بدون حماية BigQuery وCloud Storage أيضًا) تقصر صلاحية الجهات الرئيسية على إنشاء عمليات نقل البيانات وإدارتها فقط (مثل بدء عملية نقل البيانات يدويًا).
إعداد نقل البيانات من Cloud Storage
لإنشاء عملية نقل بيانات، اتّبِع الخطوات التالية:
- انتقِل إلى صفحة BigQuery في وحدة تحكّم Google Cloud الخاصة بـ
project-2. - انقر على عمليات نقل البيانات.

التحقيق في المخالفة أثناء الوصول إلى صفحة "عمليات نقل البيانات"
في Google Cloud Console، يمكننا الاطّلاع على المعرّف الفريد لـ VPC Service Controls. استخدِم المعرّف نفسه لفلترة السجلات وتحديد تفاصيل الانتهاك (استبدِل OBSERVED_VPCSC_DENIAL_UNIQUE_ID بمعرّف الرفض الذي تم رصده):
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"
المخالفة المرصودة هي NO_MATCHING_ACCESS_LEVEL، وهي مخالفة دخول تتضمّن تفاصيل مشابهة لما يلي:
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
}]
violationReason: "NO_MATCHING_ACCESS_LEVEL"
callerIp: "USER_PUBLIC_IP_ADDRESS"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.ListTransferConfigs"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
محاولة الوصول إلى صفحة "عمليات نقل البيانات" تحاول إدراج أي عمليات نقل بيانات تم إعدادها، وبالتالي انتهاك طريقة ListTransferConfigs.
حلّ مشكلة انتهاك سياسة bigquerydatatransfer.googleapis.com
يمكن استخدام مستوى وصول أو قاعدة دخول لإصلاح انتهاك الدخول. في هذا الدرس التطبيقي حول الترميز، لنستخدِم قاعدة دخول تم ضبطها باستخدام هوية المستخدم المرفوضة، ما يتيح الوصول إلى خدمة bigquerydatatransfer.googleapis.com وجميع الطرق.

بعد وضع قاعدة الدخول، من المفترض أن يعمل الوصول إلى صفحة عمليات نقل البيانات بدون أي مشكلة.
استئناف عملية إعداد نقل البيانات من Cloud Storage
من الخطوات السابقة، أثناء تواجدك في صفحة "عمليات نقل البيانات" (بعد النقر على "عمليات نقل البيانات")، تابِع الخطوات التالية:
- انقر على + إنشاء عملية نقل.
- في قسم نوع المصدر، اختَر Google Cloud Storage في المصدر.
- في قسم اسم إعداد النقل، أدخِل اسمًا لعملية النقل في حقل الاسم المعروض، مثل
Codelab Transfer. - في قسم خيارات الجدول الزمني:
- اختَر معدّل التكرار، مثل 15 دقيقة.
- احرص على اختيار البدء الآن، وإلا لن يبدأ نقل البيانات إلا بعد معدّل التكرار الذي تم ضبطه.
- في قسم إعدادات الوجهة، اختَر مجموعة البيانات التي أنشأتها لتخزين بياناتك في مجموعة بيانات الوجهة:
codelab_bqtransfer_dataset - في قسم تفاصيل مصدر البيانات
- في حقل جدول الوجهة، أدخِل اسم جدول الوجهة. يجب أن يلتزم جدول الوجهة بقواعد تسمية الجداول. في هذا الدرس التطبيقي، سنستخدم الجدول الذي أنشأناه سابقًا:
codelab-bqtransfer-table - بالنسبة إلى معرّف الموارد المنتظم (URI) الخاص بخدمة Cloud Storage، أدخِل معرّف الموارد المنتظم (URI) الخاص بخدمة Cloud Storage. في هذا الدرس التطبيقي حول الترميز، سنستخدم الحزمة والملف اللذين تم إنشاؤهما:
codelab-bqtransfer-bucket/codelab-test-file.csv - بالنسبة إلى الإعداد المفضّل للكتابة، أبقِ على
APPEND(أو اختَرMIRROR). - لا تحدّد خيار حذف الملفات بعد نقلها (لأنّنا سنعيد استخدام الملف نفسه عدة مرات). ومع ذلك، يمكنك استخدام ملفات متعددة وحذف الملفات المصدر بعد النقل)
- بالنسبة إلى تنسيق الملف، اختَر CSV
- ضمن خيارات النقل، ضمن ملف CSV، أدخِل فاصلة (,) كـ محدد الحقول.
- في حقل جدول الوجهة، أدخِل اسم جدول الوجهة. يجب أن يلتزم جدول الوجهة بقواعد تسمية الجداول. في هذا الدرس التطبيقي، سنستخدم الجدول الذي أنشأناه سابقًا:
- في قائمة حساب الخدمة، اختَر حساب خدمة من حسابات الخدمة المرتبطة بمشروعك على Google Cloud
- .
- يجب أن يكون لحساب الخدمة المحدّد الأذونات المطلوبة لكلّ من Cloud Storage في المشروع الذي يستضيف حزمة التخزين،
project-1في هذا الدرس العملي. - في هذا الدرس التطبيقي حول الترميز، سنستخدم حساب خدمة تم إنشاؤه في
project-2باسمcodelab-sa@project-2.iam.gserviceaccount.com.
- يجب أن يكون لحساب الخدمة المحدّد الأذونات المطلوبة لكلّ من Cloud Storage في المشروع الذي يستضيف حزمة التخزين،
- انقر على حفظ.
بما أنّنا اخترنا البدء الآن كخيار للجدول الزمني، سيبدأ النقل الأول فور النقر على حفظ.
التحقّق من حالة خدمة نقل البيانات
للتحقّق من حالة عملية نقل البيانات التي تم إعدادها، اتّبِع الخطوات التالية:
- الانتقال إلى صفحة BigQuery في "وحدة تحكّم Google Cloud"
- انقر على عمليات نقل البيانات.
- يتم عرض قائمة عمليات النقل التي تم ضبطها.

انقر على Codelab Transfer (ضمن "اسم العرض") وستظهر قائمة بجميع عمليات التشغيل التي تم تنفيذها حتى الآن.

يجب أن يتم تنفيذ عملية نقل البيانات بنجاح، بدون حدوث أي انتهاك لعناصر التحكّم في خدمة سحابة VPC لكلّ من عمليات نقل البيانات التي يتم تشغيلها يدويًا وتلك المُجدوَلة. يُرجى العِلم أنّ عملية النقل التي يتم تشغيلها يدويًا فقط هي التي تتطلّب قاعدة الدخول للسماح بالوصول إلى الجهة الأساسية التي تبدأ عملية النقل يدويًا.
4. قيود عناوين IP لعمليات نقل البيانات التي يتمّ تشغيلها يدويًا
تسمح قواعد الدخول التي تم ضبطها حاليًا للهوية التي تم ضبطها بتفعيل نقل البيانات يدويًا من أي عنوان IP.
من خلال استخدام مستوى الوصول، تتيح عناصر التحكّم في خدمة السحابة الافتراضية الخاصة إمكانية حصر الوصول المسموح به حسب سمات طلب بيانات من واجهة برمجة التطبيقات المحدّدة، لا سيما:
- شبكات IP الفرعية: تتحقّق مما إذا كان الطلب واردًا من عنوان IP محدّد.
- المناطق: يتحقّق هذا الشرط ممّا إذا كان الطلب واردًا من منطقة معيّنة، ويتم تحديدها من خلال الموقع الجغرافي لعنوان IP.
- الجهات الرئيسية: تتحقّق مما إذا كان الطلب واردًا من حساب معيّن.
- سياسة الجهاز: تتحقّق مما إذا كان الطلب واردًا من جهاز يستوفي متطلبات معيّنة.
لفرض التحقّق من هذه السمات إلى جانب قاعدة الدخول التي تم إعدادها مسبقًا، علينا إنشاء مستوى وصول يسمح بالسمات المطلوبة، ثم إضافة مستوى الوصول الذي تم إنشاؤه كمصدر في قاعدة الدخول.
يوضّح هذا المخطط البياني عملية الوصول التي بدأها العنصران الأساسيان (
user@example.com وuser2@example.com) في ثلاثة سيناريوهات، ما يوضّح كيف تقيِّم عناصر التحكّم في الخدمة ضِمن شبكة VPC المصادر (مستوى الوصول الوارد) وسمات الهوية كشرط AND يجب أن يتطابق فيه كل من المصدر والسمة.
- يُسمح للمستخدم user@example.com بالوصول عند محاولة الوصول من عنوان IP مسموح به بموجب مستوى الوصول، لأنّ عنوان IP وحساب المستخدم يطابقان الإعدادات في قاعدة الدخول.
- يتم حظر وصول المستخدم user@example.com عندما لا يتطابق عنوان IP الخاص به مع عنوان IP المسموح به، على الرغم من أنّ حسابه هو الحساب الذي تم إعداده في قاعدة الدخول.
- تم حظر وصول المستخدم user2@example.com على الرغم من محاولة الوصول من عنوان IP مسموح به، لأنّ قاعدة الدخول لا تسمح بالوصول إلى حسابه.
إنشاء مستوى وصول
لإنشاء مستوى وصول يحدّ من الوصول حسب عنوان IP، اتّبِع الخطوات التالية:
- افتح صفحة Access Context Manager في Google Cloud Console.
- إذا طُلب منك ذلك، اختَر المجلد
codelab-folder.
- إذا طُلب منك ذلك، اختَر المجلد
- في أعلى صفحة Access Context Manager، انقر على إنشاء مستوى وصول.
- في لوحة مستوى الوصول الجديد، أدخِل عنوانًا لمستوى الوصول الجديد. في هذا الدرس التطبيقي، سنسمّيه
project_2_al. - في قسم الشروط، انقر على + أمام شبكات فرعية لبروتوكول الإنترنت.
- في مربّع شبكات IP الفرعية، انقر على عنوان IP عام
- كحلّ بديل، يمكنك اختيار استخدام عنوان IP خاص لاستخدام عنوان IP داخلي في مستويات الوصول. ومع ذلك، سنستخدم في هذا الدرس التطبيقي عنوان IP عامًا.
- أدخِل نطاقًا واحدًا أو أكثر من نطاقات IPv4 أو IPv6 منسَّقة كمجموعات CIDR.
إضافة مستوى وصول في قاعدة الدخول
ضمن قاعدة الدخول، تتم الإشارة إلى مستوى الوصول في الحقل sources، وهو حقل مطلوب كما هو موضّح في مرجع قاعدة الدخول. للسماح بالوصول إلى الموارد، تقيّم عناصر التحكّم في خدمة VPC السمتَين sources وidentityType كشرط AND. يستخدم قاعدة الدخول هوية الجهة الأساسية التي تؤدي إلى نقل البيانات يدويًا، وليس حساب الخدمة المحدّد في إعدادات نقل البيانات.

إعادة تنفيذ عملية النقل مع الإعدادات التي تحدّ من الوصول حسب عنوان IP
لتقييم فعالية الإعدادات المُطبَّقة، ابدأ عملية النقل مرة أخرى باستخدام السيناريوهات التالية:
- باستخدام عنوان IP في النطاق المسموح به في مستوى الوصول الذي تشير إليه قاعدة الدخول
- استخدام عنوان IP غير مسموح به بموجب الإعدادات
يجب أن ينجح الوصول من عنوان IP مسموح به، بينما يجب أن يتعذّر الوصول من عناوين IP غير مسموح بها وأن يؤدي إلى انتهاك عناصر التحكّم في خدمة سحابة VPC.
إحدى الطرق السهلة للاختبار باستخدام عنوان IP مختلف هي السماح بتعيين عنوان IP أثناء استخدام Google Cloud Console، ثم إجراء الاختبار أثناء استخدام Cloud Shell.
في Cloud Shell، نفِّذ الأمر التالي لتفعيل عملية نقل يدويًا، وذلك عن طريق استبدال كل من RUN_TIME وRESOURCE_NAME:
bq mk \
--transfer_run \
--run_time='RUN_TIME' \
RESOURCE_NAME
على سبيل المثال، يتم تنفيذ أمر النموذج التالي على الفور لإعداد عملية نقل 12345678-90ab-cdef-ghij-klmnopqrstuv في المشروع 1234567890.
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ");
bq mk \
--transfer_run \
--run_time=$NOW \
projects/1234567890/locations/us/transferConfigs/12345678-90ab-cdef-ghij-klmnopqrstuv
يُظهر الناتج المرصود مخالفة "عناصر التحكّم في خدمة سحابة VPC"، كما هو متوقّع، لأنّه لا يُسمح باستخدام عنوان IP.

حدثت المخالفة المرصودة في الطريقة DataTransferService.StartManualTransferRuns.
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
targetResourcePermissions: [0: "vpcsc.permissions.unavailable"]
}]
violationReason: "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.StartManualTransferRuns"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
severity: "ERROR"
5- بدء نقل البيانات مع حماية خدمة Cloud Storage
بما أنّنا بصدد إجراء عملية نقل من Cloud Storage إلى BigQuery، لنضِف Cloud Storage إلى الخدمات المحمية من خلال عناصر التحكّم في خدمة سحابة VPC ونرى ما إذا كانت عملية النقل ستظل ناجحة.
في إعدادات perimeter-2، أضِف Cloud Storage API كإحدى الخدمات المحظورة، بالإضافة إلى BigQuery Data Transfer API.

بعد تأمين Cloud Storage API، انتظِر عملية نقل البيانات المُجدوَلة التالية، أو ابدأ عملية نقل يدويًا باتّباع الخطوات التالية:
- انتقِل إلى صفحة BigQuery في وحدة تحكّم Google Cloud.
- انقر على عمليات نقل البيانات.
- اختَر عملية النقل من القائمة: في هذا الدرس التطبيقي، سنستخدم عملية النقل Codelab Transfer.
- انقر على تنفيذ عملية النقل الآن.
- انقر على موافق.
سيتم بدء عملية نقل أخرى. قد تحتاج إلى إعادة تحميل الصفحة للاطّلاع عليها. في هذه المرة، ستفشل عملية النقل بسبب مخالفة "عناصر التحكّم في خدمة سحابة VPC".

التحقيق في مخالفة عناصر التحكّم في خدمة سحابة VPC في Cloud Storage
فلترة سجلّات التدقيق باستخدام vpcServiceControlsUniqueIdentifier كما هو موضّح في الملخّص الخاص بعملية النقل
الانتهاك الذي تم رصده هو انتهاك RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER للخروج مع التفاصيل التالية:
- المستخدم الأساسي هو حساب الخدمة الذي تم إعداده في "خدمة نقل البيانات" (سيكون المستخدم الأساسي المرفوض هو نفسه سواء تم تشغيل عملية نقل البيانات يدويًا أو تشغيل عملية نقل البيانات المُجدوَلة).
- الخدمة المتأثرة هي Cloud Storage
- مصدر الطلب هو المشروع الذي تم فيه ضبط "خدمة نقل البيانات":
project-2 - المشروع المستهدَف هو المشروع الذي يتضمّن العنصر في Cloud Storage:
project-1
principalEmail: "codelab-sa@project-2.iam.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT2_NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT1_NUMBER]"
targetResourcePermissions: [0: "storage.objects.get"]
}]
labels: {
method: "google.storage.objects.get"
project_id: "project-2"
service: "storage.googleapis.com"
}
إصلاح انتهاك خروج البيانات من Cloud Storage
لإصلاح انتهاك الخروج، علينا استخدام قاعدة خروج تسمح بنقل البيانات من حساب الخدمة المرفوض إلى المشروع الذي يحتوي على عناصر Cloud Storage.

بعد تعديل محيط الخدمة perimeter-2، كرِّر العملية لتفعيل عملية النقل مرة أخرى. لن تظهر رسالة خطأ عند نقل البيانات.

6. نسخ مجموعة بيانات BigQuery من project-2 إلى project-1
بعد التأكّد من إمكانية نقل البيانات من حزمة Cloud Storage في project-1 إلى مجموعة بيانات BigQuery في project-2، لنبدأ بنسخ مجموعة بيانات BigQuery من project-2 إلى project-1، مع العلم أنّ واجهة برمجة التطبيقات BigQuery API محمية من خلال عناصر التحكّم في خدمة VPC.
لإنشاء مجموعة البيانات ونسخها، سنستخدم الأمر bq mk الذي يستخدم الأداة bq.
إنشاء مجموعة بيانات الوجهة في project-1
قبل نسخ مجموعة البيانات، يجب إنشاء مجموعة البيانات الوجهة أولاً. لإنشاء مجموعة بيانات الوجهة، يمكننا تنفيذ الأمر التالي الذي ينشئ مجموعة بيانات باسم copied_dataset في المشروع project-1 مع us كموقع جغرافي.
bq mk \
--dataset \
--location=us \
project-1:copied_dataset
حماية خدمة BigQuery في project-2 باستخدام عناصر التحكّم في خدمة سحابة VPC
عدِّل إعدادات الحدّ perimeter-2 وأضِف BigQuery API كخدمة محمية، بالإضافة إلى خدمتَي خدمة نقل البيانات في BigQuery وCloud Storage.

بدء نسخ مجموعة البيانات
لنسخ مجموعة البيانات، نفِّذ الأمر bq mk التالي الذي ينسخ مجموعة البيانات codelab_bqtransfer_dataset في المشروع project-2 إلى مجموعة البيانات copied_dataset في project-1، ويستبدل محتوى مجموعة البيانات، إذا كان ذلك منطبقًا.
bq mk \
--transfer_config \
--project_id=project-1 \
--target_dataset=copied_dataset \
--data_source=cross_region_copy \
--display_name='Dataset from project-2 to project-1' \
--params='{
"source_dataset_id":"codelab_bqtransfer_dataset",
"source_project_id":"project-2",
"overwrite_destination_table":"true"
}'
سيتم تنفيذ الأمر بنجاح، وفي الوقت نفسه، سيتم إنشاء إعدادات النقل بنجاح، لبدء عملية نسخ مجموعة البيانات. ستتعذّر عملية نسخ مجموعة البيانات نفسها، وسيحدث انتهاك لعناصر التحكّم في خدمة سحابة VPC.
للعثور على تفاصيل انتهاك عناصر التحكّم في خدمة VPC ذات الصلة، راجِع السجلات في project-2 (مشروع مجموعة البيانات المصدر) باستخدام طلب البحث عن السجلّ التالي. تفلتر طلبات البحث في السجلّات السجلّات في خدمة BigQuery واسم مورد مجموعة البيانات التي يتم نسخها (codelab_bqtransfer_dataset).
resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"
المخالفة التي تم رصدها في "عناصر التحكّم في خدمة سحابة VPC" هي مخالفة خروج من project-2 إلى project-1.
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT-2-NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT-1-NUMBER]"
targetResourcePermissions: [
0: "bigquery.transfers.update"
1: "bigquery.transfers.get"
2: "bigquery.jobs.create"
]
}
]
method: "bigquery.tables.getData"
service: "bigquery.googleapis.com"
إصلاح جميع المخالفات في BigQuery وبدء عملية نسخ مجموعة البيانات مرة أخرى
لحلّ مشكلة انتهاك الخروج، علينا إنشاء قاعدة خروج تسمح بالكيان الأساسي المرفوض. المستخدم الأساسي المرفوض هو الذي ينفّذ الأمر mk.

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

- لحذف مجموعة بيانات BigQuery، أكمل الخطوات التالية:
- في وحدة تحكّم Google Cloud، انتقِل إلى صفحة BigQuery.
- في جزء المستكشف، وسِّع مشروعك واختَر مجموعة بيانات.
- وسِّع قائمة الخيارات الإضافية وانقر على حذف.
- في مربّع الحوار حذف مجموعة البيانات، اكتب
deleteفي الحقل، ثم انقر على حذف.
- لحذف حيّز الخدمة، أكمِل الخطوات التالية:
- في Google Cloud Console، اختَر الأمان، ثم عناصر التحكّم في سحابة VPC على المستوى الذي يتم فيه تحديد نطاق سياسة الوصول، وفي هذه الحالة، على مستوى المجلد.
- في صفحة "عناصر التحكّم في خدمة VPC" (VPC Service Controls)، في صف الجدول المقابل للمحيط الذي تريد حذفه، انقر على
Delete Icon.
- لحذف مستوى الوصول، أكمِل الخطوات التالية:
- في Google Cloud Console، افتح صفحة Access Context Manager على مستوى المجلد.
- في الشبكة، حدِّد صف مستوى الوصول الذي تريد حذفه، ثم انقر على قائمة النقاط الثلاث، ثم على حذف.
- لإيقاف المشاريع، أكمِل الخطوات التالية:
- في Google Cloud Console، انتقِل إلى صفحة إعدادات "إدارة الهوية وإمكانية الوصول" للمشروع الذي تريد حذفه.
- في صفحة "إعدادات إدارة الهوية وإمكانية الوصول والمشرف"، انقر على إيقاف.
- أدخِل رقم تعريف المشروع، ثم انقر على إيقاف على أي حال.
8. تهانينا!
في هذا الدرس التطبيقي حول الترميز، أنشأت حيّزًا لعناصر التحكّم في خدمة VPC، وفرضته، وحللت المشاكل فيه.
مزيد من المعلومات
يمكنك أيضًا استكشاف السيناريوهات التالية:
- أضِف
project-1في محيط مختلف يحمي أيضًا BigQuery و"خدمة نقل البيانات في BigQuery" وCloud Storage. - إجراء عملية نقل بيانات BigQuery من مصادر متوافقة أخرى
- تقييد وصول المستخدم استنادًا إلى سمات أخرى، مثل الموقع الجغرافي أو سياسة الجهاز
الترخيص
يخضع هذا العمل لترخيص المشاع الإبداعي مع نسب العمل إلى مؤلفه 2.0 Generic License.