1. مقدمة
في هذا البرنامج التدريبي، سنتعرّف على كيفية حماية خدمة نقل البيانات في BigQuery باستخدام عناصر التحكّم في خدمة VPC، أثناء نقل البيانات من Cloud Storage إلى مجموعة بيانات BigQuery. بعد ذلك، نحمي Cloud Storage ونكرّر عملية نقل البيانات من Cloud Storage إلى BigQuery. تؤدي حماية Cloud Storage إلى انتهاك عناصر التحكّم في خدمة VPC، ويجب إصلاح هذا الانتهاك لإجراء عملية النقل بنجاح. في النهاية، نحمي أيضًا BigQuery ثم نحاول نسخ مجموعة البيانات بين المشاريع، ما يؤدي أيضًا إلى انتهاك يجب إصلاحه.
خلال هذا الدرس العملي، سنتعرّف على كيفية إصلاح مخالفات الدخول والخروج باستخدام قواعد الدخول والخروج على التوالي. سنستخدم أيضًا مستوى وصول لحلّ مشكلة انتهاك الدخول إلى خدمة نقل البيانات في BigQuery. في ما يلي أهداف هذا الدرس التطبيقي حول الترميز:
- فهم كيفية إصلاح انتهاكات الدخول والخروج باستخدام قواعد الدخول والخروج على التوالي في خدمات مختلفة، لا سيما Cloud Storage وBigQuery و"خدمة نقل البيانات في BigQuery"
- فهم سبب حدوث مخالفة معيّنة
2. متطلبات إعداد الموارد
قبل البدء
في هذا الدليل التعليمي، نفترض أنّك تعرف ما يلي:
- كيفية إنشاء مجلد
- كيفية إنشاء مشروع في مجلد أو نقل مشروع حالي إلى مجلد
- كيفية إنشاء سياسة وصول على مستوى نطاق معيّن
- كيفية إنشاء حدود خدمة وضبطها من Google Cloud Console
- كيفية العثور على سجلّات الانتهاكات من سجلّات التدقيق
ضبط إعدادات الجهاز
تم تصميم عملية الإعداد الأولية على النحو التالي:
- مؤسسة على 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. استخدِم المعرّف نفسه لفلترة السجلات وتحديد تفاصيل الانتهاك (استبدِل 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 Service Controls لكل من عمليات نقل البيانات التي يتم تشغيلها يدويًا وتلك المجدوَلة. يُرجى العِلم أنّ عملية النقل التي يتم تفعيلها يدويًا فقط هي التي تحتاج إلى قاعدة الدخول للسماح بالوصول إلى المستخدم الرئيسي الذي يبدأ عملية النقل يدويًا.
4. قيود عناوين IP لنقل البيانات الذي يتم تشغيله يدويًا
تسمح قواعد الدخول الحالية التي تم ضبطها للهوية التي تم ضبطها ببدء نقل البيانات يدويًا من أي عنوان IP.
من خلال استخدام مستوى الوصول، توفّر عناصر التحكّم في خدمة VPC إمكانية حصر الوصول المسموح به حسب سمات طلبات واجهة برمجة التطبيقات المحدّدة، ومن أبرزها:
- الشبكات الفرعية لعناوين IP: للتحقّق مما إذا كان الطلب واردًا من عنوان IP محدّد
- المناطق: للتحقّق مما إذا كان الطلب واردًا من منطقة معيّنة، يتم تحديد ذلك من خلال الموقع الجغرافي لعنوان IP.
- العناصر الرئيسية: للتحقّق مما إذا كان الطلب واردًا من حساب معيّن.
- سياسة الجهاز: للتحقّق مما إذا كان الطلب صادرًا من جهاز يستوفي متطلبات معيّنة.
لفرض التحقّق من هذه السمات إلى جانب قاعدة الدخول التي تم إعدادها، علينا إنشاء مستوى وصول يسمح بالسمات المطلوبة، ثم إضافة مستوى الوصول الذي تم إنشاؤه كمصدر في قاعدة الدخول.
يوضّح هذا المخطّط البياني عملية الوصول التي بدأها المستخدمان الرئيسيان (
user@example.com
وuser2@example.com
) في ثلاثة سيناريوهات، ويوضّح كيف تقيِّم عناصر التحكّم في خدمة VPC المصادر (مستوى الوصول إلى نقطة الدخول) وسمات الهوية كشرط "و" يجب أن يتطابق كلاهما.
- يُسمح للمستخدم user@example.com بالوصول عند محاولة الوصول من عنوان IP مسموح به من خلال مستوى الوصول، لأنّ عنوان IP وحساب المستخدم يتطابقان مع الإعدادات في قاعدة الدخول.
- يتم حظر وصول المستخدم user@example.com عندما لا يتطابق عنوان IP الخاص به مع عنوان IP المسموح به، على الرغم من أنّ حسابه هو الحساب الذي تم ضبطه في قاعدة الدخول.
- تم حظر وصول المستخدم user2@example.com على الرغم من محاولة الوصول من عنوان IP مسموح به، لأنّ قاعدة الدخول لا تسمح بوصول حسابه.
إنشاء مستوى وصول
لإنشاء مستوى وصول يحدّ من الوصول حسب عنوان IP:
- افتح صفحة Access Context Manager في Google Cloud Console.
- اختَر المجلد
codelab-folder
إذا طُلب منك ذلك.
- اختَر المجلد
- في أعلى صفحة مدير سياق الوصول، انقر على إنشاء مستوى وصول.
- في لوحة مستوى وصول جديد، أدخِل عنوانًا لمستوى الوصول الجديد. في هذا الدرس التطبيقي حول الترميز، سنسميها
project_2_al
. - في قسم الشروط، انقر على + أمام الشبكات الفرعية لعناوين IP.
- في مربّع الشبكات الفرعية لعنوان IP، اختَر عنوان IP علني
- .
- كبديل، يمكنك اختيار استخدام عنوان IP خاص لاستخدام عنوان IP الداخلي في مستويات الوصول. ومع ذلك، في هذا الدليل التعليمي، سنستخدم عنوان IP متاحًا للجميع.
- أدخِل نطاقًا واحدًا أو أكثر من نطاقات IPv4 أو IPv6 بتنسيق حِزم CIDR.
إضافة مستوى الوصول في قاعدة الدخول
ضمن قاعدة الدخول، تتم الإشارة إلى مستوى الوصول ضمن حقل 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 غير مسموح به.
تم رصد الانتهاك في طريقة 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.
بعد تأمين 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 من المشروع-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.
بدء نسخ مجموعة البيانات
لنسخ مجموعة البيانات، نفِّذ الأمر 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 إلى إيقاف الفوترة لجميع الموارد المستخدَمة في ذلك المشروع.
- لحذف حزمة Cloud Storage، أكمِل الخطوات التالية:
- في وحدة تحكّم Google Cloud، انتقِل إلى صفحة حِزم Cloud Storage.
- ضَع علامة في مربّع الاختيار الخاص بالحزمة التي تريد حذفها، ثم انقر على حذف.
- في نافذة التراكب التي تظهر، أكِّد أنّك تريد حذف الحزمة ومحتوياتها.
- لـ حذف مجموعة بيانات BigQuery، أكمِل الخطوات التالية:
- في وحدة تحكّم Google Cloud، انتقِل إلى صفحة BigQuery.
- في لوحة المستكشف، وسِّع مشروعك واختَر مجموعة بيانات.
- وسِّع قائمة الخيارات الإضافية وانقر على حذف.
- في مربّع الحوار حذف مجموعة البيانات، اكتب
delete
في الحقل، ثم انقر على حذف.
- لـ حذف حدود الخدمة، أكمِل الخطوات التالية:
- في وحدة تحكّم 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.