عناصر التحكّم في خدمة VPC - حماية خدمة نقل البيانات في BigQuery

1. مقدمة

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

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

  • فهم كيفية إصلاح انتهاكات الدخول والخروج باستخدام قواعد الدخول والخروج على التوالي في خدمات مختلفة، لا سيما Cloud Storage وBigQuery و"خدمة نقل البيانات في BigQuery"
  • فهم سبب حدوث مخالفة معيّنة

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

قبل البدء

في هذا الدليل التعليمي، نفترض أنّك تعرف ما يلي:

ضبط إعدادات الجهاز

تم تصميم عملية الإعداد الأولية على النحو التالي:

مخطّط بياني للإعداد الأوّلي للدرس التطبيقي حول الترميز

إنشاء سياسة على مستوى نطاق ومساحة خدمة عادية

في هذا الدليل التعليمي حول الرموز البرمجية، سنستخدم حدود خدمة عادية تحمي project-2.

في المحيط perimeter-2، حظِّر BigQuery Data Transfer API.

إعدادات عناصر التحكّم في خدمة VPC التي تحمي خدمة نقل البيانات

إنشاء حزمة 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

شغِّل الأمر cp لتحميل ملف csv إلى Cloud Storage.

يمكنك التحقّق من تحميل الملف إلى الحزمة التي تم إنشاؤها من خلال إدراج العناصر في الحزمة أو تنفيذ الأمر التالي:

gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**

إنشاء مجموعة بيانات وجدول في BigQuery في project-2

  1. أنشئ مجموعة بيانات في BigQuery، في المشروع project-2 باتّباع هذه الخطوات.
    1. بالنسبة إلى معرّف مجموعة البيانات، أدخِل اسمًا فريدًا لمجموعة البيانات. في هذا الدرس التطبيقي حول الترميز، سنستخدم: codelab_bqtransfer_dataset.
    2. بالنسبة إلى نوع الموقع الجغرافي، اختَر موقعًا جغرافيًا لمجموعة البيانات. في هذا الدليل التعليمي حول الرموز البرمجية، سنستخدم الموقع الجغرافي نفسه لحزمة Cloud Storage: الولايات المتحدة (مناطق متعدّدة في الولايات المتحدة). إنشاء مجموعة بيانات BigQuery
  2. أنشئ جدول BigQuery ضمن مجموعة البيانات التي تم إنشاؤها codelab_bqtransfer_dataset، وذلك باتّباع هذه الخطوات.
    1. في قسم المصدر، اختَر جدول فارغ في قائمة إنشاء جدول من.
    2. في حقل الجدول، أدخِل اسم الجدول الذي تريد إنشاؤه. في هذا الدرس التطبيقي حول الترميز، سنستخدم الاسم: codelab-bqtransfer-table.
    3. تأكَّد من ضبط حقل نوع الجدول على جدول أصلي.
    4. في قسم المخطّط، أدخِل تعريف المخطّط. يمكنك إدخال معلومات المخطّط بالنقر على التعديل كنص وإدخال المخطّط التالي الذي يتوافق مع تنسيق ملف 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

لإنشاء عملية نقل بيانات، اتّبِع الخطوات التالية:

  1. انتقِل إلى صفحة BigQuery في وحدة تحكّم Google Cloud في project-2.
  2. انقر على عمليات نقل البيانات.

انتهاك عناصر التحكّم في خدمة VPC في صفحة "خدمة نقل البيانات"

التحقيق في المخالفة أثناء الوصول إلى صفحة "عمليات نقل البيانات"

في Google Cloud Console، يمكننا الاطّلاع على المعرّف الفريد لعناصر التحكّم في خدمات VPC. استخدِم المعرّف نفسه لفلترة السجلات وتحديد تفاصيل الانتهاك (استبدِل 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

من الخطوات السابقة، تابِع الخطوات التالية في صفحة "عمليات نقل البيانات" (بعد النقر على "عمليات نقل البيانات"):

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

بما أنّنا اخترنا البدء الآن كخيار الجدول الزمني، ستبدأ عملية النقل الأولى فور النقر على حفظ.

التحقّق من حالة خدمة نقل البيانات

للتحقّق من حالة عملية نقل البيانات التي تم ضبطها:

وظائف "خدمة نقل البيانات"

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

تفاصيل عمليات تنفيذ "خدمة نقل البيانات"

من المفترض أن تكون عملية نقل البيانات ناجحة، بدون أي انتهاك لسياسات VPC Service Controls لكل من عمليات نقل البيانات التي يتم تشغيلها يدويًا وتلك المجدوَلة. يُرجى العِلم أنّ عملية النقل التي يتم تفعيلها يدويًا فقط هي التي تحتاج إلى قاعدة الدخول للسماح بالوصول إلى المستخدم الرئيسي الذي يبدأ عملية النقل يدويًا.

4. قيود عناوين IP لنقل البيانات الذي يتم تشغيله يدويًا

تسمح قواعد الدخول الحالية التي تم ضبطها للهوية التي تم ضبطها ببدء نقل البيانات يدويًا من أي عنوان IP.

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

  • الشبكات الفرعية لعناوين IP: للتحقّق مما إذا كان الطلب واردًا من عنوان IP محدّد
  • المناطق: للتحقّق مما إذا كان الطلب واردًا من منطقة معيّنة، يتم تحديد ذلك من خلال الموقع الجغرافي لعنوان IP.
  • العناصر الرئيسية: للتحقّق مما إذا كان الطلب واردًا من حساب معيّن.
  • سياسة الجهاز: للتحقّق مما إذا كان الطلب صادرًا من جهاز يستوفي متطلبات معيّنة.

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

الوصول المحمي من خلال عناصر التحكّم في خدمة VPC حسب عنوان IP للمستخدم يوضّح هذا المخطّط البياني عملية الوصول التي بدأها المستخدمان الرئيسيان (user@example.com وuser2@example.com) في ثلاثة سيناريوهات، ويوضّح كيف تقيِّم عناصر التحكّم في خدمة VPC المصادر (مستوى الوصول إلى نقطة الدخول) وسمات الهوية كشرط "و" يجب أن يتطابق كلاهما.

  1. يُسمح للمستخدم user@example.com بالوصول عند محاولة الوصول من عنوان IP مسموح به من خلال مستوى الوصول، لأنّ عنوان IP وحساب المستخدم يتطابقان مع الإعدادات في قاعدة الدخول.
  2. يتم حظر وصول المستخدم user@example.com عندما لا يتطابق عنوان IP الخاص به مع عنوان IP المسموح به، على الرغم من أنّ حسابه هو الحساب الذي تم ضبطه في قاعدة الدخول.
  3. تم حظر وصول المستخدم user2@example.com على الرغم من محاولة الوصول من عنوان IP مسموح به، لأنّ قاعدة الدخول لا تسمح بوصول حسابه.

إنشاء مستوى وصول

لإنشاء مستوى وصول يحدّ من الوصول حسب عنوان IP:

  1. افتح صفحة Access Context Manager في Google Cloud Console.
    • اختَر المجلد codelab-folder إذا طُلب منك ذلك.
  2. في أعلى صفحة مدير سياق الوصول، انقر على إنشاء مستوى وصول.
  3. في لوحة مستوى وصول جديد، أدخِل عنوانًا لمستوى الوصول الجديد. في هذا الدرس التطبيقي حول الترميز، سنسميها project_2_al.
  4. في قسم الشروط، انقر على + أمام الشبكات الفرعية لعناوين IP.
  5. في مربّع الشبكات الفرعية لعنوان IP، اختَر عنوان IP علني

إضافة مستوى الوصول في قاعدة الدخول

ضمن قاعدة الدخول، تتم الإشارة إلى مستوى الوصول ضمن حقل sources، وهو حقل مطلوب كما هو موضّح في مرجع قاعدة الدخول. للسماح بالوصول إلى الموارد، تقيِّم عناصر التحكّم في خدمة VPC سمتَي sources وidentityType كشرط "و". تستخدِم قاعدة الدخول هوية المستخدم الرئيسي الذي يشغِّل عملية نقل البيانات يدويًا، وليس حساب الخدمة المحدَّد في إعدادات نقل البيانات.

قاعدة دخول تم ضبطها باستخدام مستوى الوصول

إعادة إجراء عملية النقل باستخدام الإعدادات التي تحدّ من الوصول حسب عنوان 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 غير مسموح به.

تم رصد انتهاك لعناصر التحكّم في خدمة 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 إلى BigQuery، لنضيف Cloud Storage إلى الخدمات المحمية بعناصر التحكّم في خدمة VPC ونرى ما إذا كان النقل لا يزال ناجحًا.

في إعدادات perimeter-2، أضِف Cloud Storage API كإحدى الخدمات المحظورة، بالإضافة إلى BigQuery Data Transfer API.

إعدادات عناصر التحكّم في الخدمة في VPC التي تحمي Cloud Storage

بعد تأمين Cloud Storage API، انتظِر عملية نقل البيانات المجدوَلة التالية أو شغِّل عملية نقل يدويًا باتّباع الخطوات التالية:

  1. انتقِل إلى صفحة BigQuery في وحدة تحكّم Google Cloud.
  2. انقر على عمليات نقل البيانات.
  3. اختَر عملية النقل من القائمة: في هذا الدرس التطبيقي، سنستخدم عملية النقل Codelab Transfer.
  4. انقر على تنفيذ عملية النقل الآن.
  5. انقر على موافق.

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

انتهاك "سياسة خدمات السحابة VPC" لنسخ مجموعة بيانات BigQuery

التحقيق في انتهاك عناصر التحكّم في خدمة 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.

قاعدة الخروج للسماح بحساب خدمة codelab

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

يتم تنفيذ تفاصيل نقل البيانات بعد ضبط قاعدة الخروج.

6- نسخ مجموعة بيانات BigQuery من المشروع-2 إلى المشروع-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 Data Transfer وCloud Storage.

تم ضبط عناصر التحكّم في سحابة VPC لحماية واجهة برمجة التطبيقات Cloud Storage API.

بدء نسخ مجموعة البيانات

لنسخ مجموعة البيانات، نفِّذ الأمر 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.

قاعدة خروج للسماح بالوصول إلى جميع طرق BigQuery

بعد وضع قاعدة الخروج، نفِّذ الأمر نفسه لنسخ مجموعة البيانات في المحيط perimeter-2. من المفترض أن يتم نسخ مجموعة البيانات هذه المرة بنجاح بدون انتهاك عناصر التحكّم في خدمة "سحابة VPC".

7- تنظيف

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

  • لحذف حزمة Cloud Storage، أكمِل الخطوات التالية:
    • في وحدة تحكّم Google Cloud، انتقِل إلى صفحة حِزم Cloud Storage.
    • ضَع علامة في مربّع الاختيار الخاص بالحزمة التي تريد حذفها، ثم انقر على حذف.
    • في نافذة التراكب التي تظهر، أكِّد أنّك تريد حذف الحزمة ومحتوياتها. حذف حزمة Cloud Storage
  • لـ حذف مجموعة بيانات BigQuery، أكمِل الخطوات التالية:
    • في وحدة تحكّم Google Cloud، انتقِل إلى صفحة BigQuery.
    • في لوحة المستكشف، وسِّع مشروعك واختَر مجموعة بيانات.
    • وسِّع قائمة الخيارات الإضافية وانقر على حذف.
    • في مربّع الحوار حذف مجموعة البيانات، اكتب delete في الحقل، ثم انقر على حذف. حذف مجموعة بيانات BigQuery
  • لـ حذف حدود الخدمة، أكمِل الخطوات التالية:
    • في وحدة تحكّم Google Cloud، اختَر الأمان، ثم عناصر التحكّم في سحابة VPC على المستوى الذي يتم فيه تحديد نطاق سياسة الوصول، وفي هذه الحالة، على مستوى المجلد.
    • في صفحة "عناصر التحكّم في خدمات VPC"، انقر على Delete Icon في صف الجدول المقابل للمحيط الذي تريد حذفه.
  • لـ حذف مستوى الوصول، أكمِل الخطوات التالية:
    • في Google Cloud Console، افتح صفحة Access Context Manager ضمن نطاق المجلد.
    • في الشبكة، حدِّد صف مستوى الوصول الذي تريد حذفه، ثم انقر على قائمة الخيارات الإضافية، ثم على حذف.
  • لـ إيقاف المشاريع، أكمِل الخطوات التالية:
    • في Google Cloud Console، انتقِل إلى صفحة إدارة الهوية وإمكانية الوصول وإعدادات المشرف للمشروع الذي تريد حذفه.
    • في صفحة "إدارة الهوية وإمكانية الوصول والإعدادات الإدارية"، اختَر إيقاف.
    • أدخِل رقم تعريف المشروع، ثم اختَر إيقاف التشغيل على أي حال.

8. تهانينا!

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

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

يمكنك أيضًا استكشاف السيناريوهات التالية:

  • أضِف project-1 في نطاق مختلف يحمي أيضًا BigQuery و"خدمة نقل البيانات في BigQuery" وCloud Storage.
  • نقل بيانات BigQuery من مصادر متوافقة أخرى
  • تقييد وصول المستخدمين حسب سمات أخرى، مثل الموقع الجغرافي أو سياسة الجهاز

الترخيص

يخضع هذا العمل للترخيص العام Creative Commons Attribution 2.0.