لمحة عن هذا الدرس التطبيقي حول الترميز
1. نظرة عامة
توفّر المساحة السرية مشاركة البيانات والتعاون الآمنَين بين جهات متعددة، مع السماح للمؤسسات بالحفاظ على سرية بياناتها. وهذا يعني أنّه يمكن للمؤسسات التعاون مع بعضها البعض مع الحفاظ على التحكّم في بياناتها وحمايتها من الوصول غير المصرّح به.
تتيح لك "مساحة العمل السرية" الاستفادة من سيناريوهات تريد فيها تحقيق قيمة متبادلة من تجميع البيانات الحسّاسة التي تخضع للوائح التنظيمية في أغلب الأحيان وتحليلها، مع الاحتفاظ بالسيطرة الكاملة عليها. باستخدام "المساحة السرية"، يمكن للمؤسسات تحقيق قيمة متبادلة من خلال تجميع البيانات الحسّاسة وتحليلها، مثل معلومات تحديد الهوية الشخصية (PII) والمعلومات الصحية المحمية (PHI) والملكية الفكرية والأسرار التشفيرية، مع الاحتفاظ بالسيطرة الكاملة عليها.
المتطلبات
- مشروع على Google Cloud Platform
- متصفّح، مثل Chrome أو Firefox
- معرفة أساسية بخدمة Google Compute Engine ( codelab) وأجهزة Confidential VM والحاويات والمستودعات البعيدة
- معرفة أساسية بخدمة Cloud KMS ( الدرس التطبيقي حول الترميز)
- معرفة أساسية بحسابات الخدمة وتوحيد هوية حِزم العمل وشروط السمات
ما ستتعرّف عليه
- كيفية ضبط موارد Cloud اللازمة لتشغيل "المساحة السرية"
- كيفية تشغيل حمولة العمل في جهاز افتراضي "سري" يعمل بنظام التشغيل "صورة Confidential Space VM"
- كيفية تفويض الوصول إلى الموارد المحمية استنادًا إلى سمات رمز "حملات العمل" (ما الذي) وبيئة "مساحة العمل السرية" (أين) والحساب الذي يشغّل "حملات العمل" (من)
في هذا الدرس التطبيقي حول الترميز، ستُعدّ "مساحة سرية" بين بنك Primus وبنك Secundus لتحديد عملائهم المشتركين بدون مشاركة قوائم الحسابات الكاملة مع بعضهم. وتتضمّن الخطوات التالية:
- الخطوة 1: إعداد موارد السحابة الإلكترونية المطلوبة لبنكَي Primus وSecundus وتشمل موارد السحابة الإلكترونية هذه حِزم تخزين السحابة الإلكترونية ومفاتيح إدارة مفاتيح التشفير (KMS) ومجمعات هوية أحمال العمل وحسابات الخدمة لكلّ من بنك Primus وبنك Secundus. يخزّن بنك Primus وبنك Secundus بيانات العملاء في حِزم Cloud Storage ويشفّرون البيانات باستخدام مفاتيح خدمة إدارة مفاتيح التشفير في السحابة الإلكترونية.
- الخطوة 2: أنشئ حساب خدمة لوحدة العمل التي ستستخدمها آلة افتراضية لوحدة العمل. سيشغِّل بنك Secundus الجهاز الافتراضي لتحميل العمل، وهو الجهة التي ستدير عبء العمل. سيُنشئ بنك Primus رمز الحِزمة.
- الخطوة 3: أنشئ عبء عمل يتضمّن أمرَين في سطر الأوامر، أحدهما لاحتساب العملاء من الموقع الجغرافي المقدَّم والآخر للعثور على العملاء المشتركين في بنك Primus وبنك Secundus. سيُنشئ بنك Primus عبء العمل وسيتم حزمه كصورة Docker. سيتم نشر صورة Docker هذه في Artifact Registry.
- الخطوة 4: تفويض إحدى أعباء العمل سيستخدم بنك Primus مجموعة عناوين هوية لعمليات العمل لتفويض عمليات العمل بالوصول إلى بيانات العملاء استنادًا إلى سمات المستخدم الذي يشغّل عملية العمل ووظائفها ومكان تشغيلها.
- الخطوة 5: عند تنفيذ "مهام العمل"، سيطلب الوصول إلى موارد السحابة الإلكترونية الخاصة بمتعاوني البيانات (بنك Primus وبنك Secundus) من خلال تقديم رمز خدمة التحقّق من الإثبات مع مطالبات "مهام العمل" و"البيئة". إذا كانت مطالبات قياس أعباء العمل في الرمز المميّز تتطابق مع شرط السمة في مجموعات معرّفات أعباء العمل في مصرفَي Primus وSecundus، يتم عرض الرمز المميّز للوصول إلى حساب الخدمة الذي يملك الإذن بالوصول إلى موارد السحابة الإلكترونية ذات الصلة. لن يتمكّن سوى "حملات العمل" التي تعمل داخل "المساحة السرية" من الوصول إلى موارد السحابة الإلكترونية.
- الخطوة 5(أ): تنفيذ حِزمة العمل الأولى التي تحتسب عملاء بنك Primus من مواقع جغرافية محدّدة بالنسبة إلى هذه العملية، سيكون بنك Primus متعاونًا في البيانات ومؤلفًا للعملية، ما سيؤدي إلى توفير قائمة العملاء المشفّرة للعملية التي تعمل في "مساحة العمل السرية". سيكون بنك Secundus مشغّلًا لوحدة العمل وسيشغّل وحدة العمل في "مساحة سرية".
- الخطوة 5(ب): تنفيذ حِزمة العمل الثانية التي تعثر على العملاء المشتركين في مصرفَي Primus وSecundus بالنسبة إلى هذه المعالجة، سيكون بنك Primus وبنك Secundus متعاونَين في البيانات. وسيتم تقديم قوائم العملاء المشفَّرة إلى سير العمل التي تعمل في "مساحة العمل السرية". سيكون بنك Secundus مرة أخرى مشغّلًا للحمولة. سيُفوّض بنك Secundus أيضًا بتحميل العمل هذا لأنّه يحتاج إلى الوصول إلى قوائم العملاء المشفَّرة في بنك Secundus أيضًا للعثور على العملاء المشتركين. في هذه الحالة، سيفوّض بنك Secundus "حجم العمل" بالوصول إلى بيانات العملاء استنادًا إلى سمات المستخدم الذي يشغّل "حجم العمل" ووظائفه ومكان تشغيله كما هو موضّح في الخطوة 4 لبنك Primus.
2. إعداد موارد السحابة الإلكترونية
قبل البدء
- يمكنك استنساخ هذا المستودع باستخدام الأمر أدناه للحصول على النصوص البرمجية المطلوبة التي يتم استخدامها كجزء من هذا الدليل التعليمي.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- غيِّر دليل هذا الدليل التعليمي.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
- تأكَّد من ضبط متغيّرات بيئة المشروع المطلوبة كما هو موضّح أدناه. لمزيد من المعلومات حول إنشاء مشروع على Google Cloud Platform، يُرجى الرجوع إلى هذا الدليل التعليمي. يمكنك الرجوع إلى هذا الرابط للحصول على تفاصيل عن كيفية استرداد رقم تعريف المشروع واختلافه عن اسم المشروع ورقمه.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- فعِّل ميزة "الفوترة" لمشاريعك.
- فعِّل واجهة برمجة التطبيقات Confidential Computing API وواجهات برمجة التطبيقات التالية لكلٍّ من المشروعَين.
gcloud services enable \
cloudapis.googleapis.com \
cloudkms.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudshell.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
iam.googleapis.com \
confidentialcomputing.googleapis.com
- اضبط المتغيّرات لأسماء الموارد كما هو موضّح أدناه باستخدام هذا الأمر. يمكنك إلغاء أسماء الموارد باستخدام هذه المتغيّرات (مثل
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'
). - يمكنك ضبط المتغيّرات التالية باستخدام أسماء موارد السحابة الإلكترونية الحالية في مشروع Primus. في حال ضبط المتغيّر، سيتم استخدام مورد السحابة الإلكترونية الحالي المقابل من مشروع Primus. في حال عدم ضبط المتغيّر، سيتم إنشاء اسم مورد السحابة الإلكترونية من project-name وسيتم إنشاء مورد جديد في السحابة الإلكترونية كجزء من ما يلي:
| الحزمة التي تخزِّن ملف بيانات عملاء بنك Primus |
| مجموعة Workload Identity Pool (WIP) في Primus Bank التي تتحقّق من صحة المطالبات |
| موفِّر مجموعة معرّفات أعباء العمل في Primus Bank الذي يتضمّن شرط التفويض لاستخدام الرموز المميّزة التي وقّعت عليها خدمة التحقّق من المصادقة |
| حساب خدمة بنك Primus الذي يستخدمه |
| مفتاح إدارة الخدمات الرئيسية المستخدَم في تشفير البيانات المخزّنة في |
| سلسلة مفاتيح إدارة الخدمات الرئيسية (KMS) التي سيتم استخدامها لإنشاء مفتاح التشفير |
| مستودع العناصر التي سيتمّ دفع صورة Docker لتحميل العمل عليها. |
- يمكنك ضبط المتغيّرات التالية باستخدام أسماء موارد السحابة الإلكترونية الحالية في مشروع Secundus. في حال ضبط المتغيّر، سيتم استخدام مورد السحابة الإلكترونية الحالي المقابل من مشروع Secundus. في حال عدم ضبط المتغيّر، سيتم إنشاء اسم مورد السحابة الإلكترونية من project-name وسيتم إنشاء مورد جديد في السحابة الإلكترونية كجزء من ما يلي:
| الحزمة التي تخزِّن ملف بيانات عملاء بنك Secundus |
| مجموعة Workload Identity Pool (WIP) الخاصة بمصرف Secundus التي تتحقّق من صحة المطالبات |
| موفِّر مجموعة تعريفات أعباء العمل في بنك Secundus الذي يتضمّن شرط التفويض لاستخدام الرموز المميّزة التي وقّعت عليها خدمة التحقّق من المصادقة. |
| حساب الخدمة في بنك Secundus الذي يستخدمه |
| مفتاح إدارة الخدمات الرئيسية (KMS) الذي يُستخدَم لتشفير البيانات المخزّنة في |
| سلسلة مفاتيح KMS المستخدَمة لإنشاء مفتاح التشفير |
| الحزمة التي تخزِّن نتائج عبء العمل |
| اسم صورة حاوية "وحدة العمل" |
| علامة صورة حاوية عبء العمل |
| حساب الخدمة الذي لديه إذن بالوصول إلى "الخادم الافتراضي السري" الذي يشغّل "حمل العمل". |
- هناك بعض العناصر المستخدَمة كجزء من هذا الدليل التعليمي عن الرموز البرمجية كما هو موضّح أدناه:
primus_customer_list.csv
: الملف الذي يحتوي على بيانات عملاء بنك Primus هنا نموذج الملف المستخدَم في هذا الدليل التعليمي للترميز.secundus_customer_list.csv
: الملف الذي يحتوي على بيانات عملاء بنك Secundus هنا نموذج الملف المستخدَم في هذا الدليل التعليمي للترميز.- ستحتاج إلى أذونات معيّنة لهذين المشروعَين:
- بالنسبة إلى
$PRIMUS_PROJECT_ID
، ستحتاج إلى مشرف Cloud KMS ومشرف "مساحة التخزين" ومشرف "مستودع العناصر" ومشرف "حساب الخدمة" ومشرف "مجموعة عناوين العملاء في إدارة الهوية وإمكانية الوصول". - بالنسبة إلى
$SECUNDUS_PROJECT_ID
، ستحتاج إلى مشرف Compute ومشرف Storage ومشرف حساب الخدمة ومشرف Cloud KMS ومشرف Workload Identity Pool في "إدارة الهوية وإمكانية الوصول" (IAM) ومشرف الأمان (اختياري). - شغِّل النص البرمجي التالي لضبط أسماء المتغيّرات المتبقية على قيم استنادًا إلى رقم تعريف مشروعك لأسماء الموارد.
source config_env.sh
إعداد موارد السحابة الإلكترونية لبنك Primus
يجب توفُّر موارد السحابة الإلكترونية التالية لمصرف Primus. شغِّل هذا البرنامج النصي لإعداد موارد بنك Primus:
- حزمة تخزين على السحابة الإلكترونية (
$PRIMUS_INPUT_STORAGE_BUCKET
) لتخزين ملف بيانات العملاء المشفَّر في بنك Primus - مفتاح التشفير (
$PRIMUS_ENC_KEY
) ومفتاح سلسلة المفاتيح ($PRIMUS_ENC_KEYRING
) في "إدارة الخدمات الرئيسية" (KMS) لتشفير ملف بيانات العملاء في بنك Primus - Workload Identity Pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL
) للتحقّق من صحة المطالبات استنادًا إلى شروط السمات التي تم ضبطها ضمن موفّرها - يملك حساب الخدمة (
$PRIMUS_SERVICE_ACCOUNT
) المرتبط بحزمة تعريفات المهام ($PRIMUS_WORKLOAD_IDENTITY_POOL
) المذكورة أعلاه إذن الوصول إلى فك تشفير البيانات باستخدام مفتاح KMS (باستخدام دورroles/cloudkms.cryptoKeyDecrypter
)، وقراءة البيانات من حزمة تخزين السحابة الإلكترونية (باستخدام دورobjectViewer
)، وربط حساب الخدمة بحزمة تعريفات المهام (باستخدام دورroles/iam.workloadIdentityUser
).
./setup_primus_bank_resources.sh
إعداد موارد السحابة الإلكترونية لبنك Secundus
بالنسبة إلى بنك Secundus، يجب توفُّر موارد السحابة الإلكترونية التالية. شغِّل هذا البرنامج النصي لإعداد موارد بنك Secundus. كجزء من هذه الخطوات، سيتم إنشاء المراجع المذكورة أدناه:
- حزمة تخزين على السحابة الإلكترونية (
$SECUNDUS_INPUT_STORAGE_BUCKET
) لتخزين ملف بيانات العملاء المشفَّر في بنك Secundus - مفتاح التشفير (
$SECUNDUS_ENC_KEY
) ومفتاح سلسلة المفاتيح ($SECUNDUS_ENC_KEYRING
) في "إدارة الخدمات الرئيسية" لتشفير ملف بيانات بنك Secundus - Workload Identity Pool (
$SECUNDUS_WORKLOAD_IDENTITY_POOL
) للتحقّق من صحة المطالبات استنادًا إلى شروط السمات التي تم ضبطها ضمن موفّرها - يملك حساب الخدمة (
$SECUNDUS_SERVICE_ACCOUNT
) المرتبط بحزمة تعريفات المهام ($SECUNDUS_WORKLOAD_IDENTITY_POOL
) المذكورة أعلاه إذن الوصول إلى فك تشفير البيانات باستخدام مفتاح KMS (باستخدام دورroles/cloudkms.cryptoKeyDecrypter
) وقراءة البيانات من حزمة التخزين في السحابة الإلكترونية (باستخدام دورobjectViewer
) وربط حساب الخدمة بحزمة تعريفات المهام (باستخدام دورroles/iam.workloadIdentityUser
). - حزمة تخزين في السحابة الإلكترونية (
$SECUNDUS_RESULT_STORAGE_BUCKET
) لتخزين نتيجة تنفيذ حِزم العمل من قِبل بنك Secundus
./setup_secundus_bank_resources.sh
3. إنشاء "حمل عمل"
إنشاء حساب خدمة "وحدة العمل"
الآن، عليك إنشاء حساب خدمة لوحدة العمل مع الأدوار والأذونات المطلوبة كما هو موضّح أدناه. شغِّل النص البرمجي التالي لإنشاء حساب خدمة "وحدة العمل" في مشروع "بنك سيكوندوس". ستستخدم الآلة الافتراضية التي تشغّل حجم العمل هذا الحساب.
سيتضمّن حساب الخدمة هذا ($WORKLOAD_SERVICE_ACCOUNT
) للأحمال المهام الأدوار التالية:
- امنح الدور
confidentialcomputing.workloadUser
لحساب خدمة "وحدة العمل". سيسمح ذلك لحساب المستخدم بإنشاء رمز مميز للإثبات. - امنح الدور
logging.logWriter
لإذن حساب خدمة "وحدة العمل". يتيح ذلك لبيئة "مساحة العمل السرية" كتابة السجلات في "تسجيلات Cloud" بالإضافة إلى وحدة تحكّم التسلسل، وبالتالي تتوفّر السجلات بعد إنهاء تشغيل الجهاز الظاهري. objectViewer
لقراءة البيانات من حزمة التخزين السحابي$PRIMUS_INPUT_STORAGE_BUCKET
objectViewer
لقراءة البيانات من حزمة التخزين السحابي$SECUNDUS_INPUT_STORAGE_BUCKET
objectAdmin
لكتابة نتيجة "حمل العمل" في حزمة التخزين السحابي$SECUNDUS_RESULT_STORAGE_BUCKET
./create_workload_service_account.sh
إنشاء حمل عمل
كجزء من هذه الخطوة، عليك إنشاء صورة Docker لوحدة العمل المستخدَمة في هذا الدرس التطبيقي حول الترميز. ووحدة العمل هي تطبيق GoLang بسيط:
- احتساب العملاء في موقع جغرافي محدّد
- العثور على العملاء المشتركين في بنك Primus وبنك Secundus من قوائم العملاء المخزّنة في حِزم تخزين السحابة الإلكترونية الخاصة بكل بنك
شغِّل النص البرمجي التالي لإنشاء حمولة يتم فيها تنفيذ الخطوات التالية:
- أنشئ Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY
) مملوكًا لشركة Primus Bank حيث سيتم نشر حمولة العمل. - أنشئ الرمز البرمجي وعدِّله بأسماء الموارد المطلوبة. يمكن العثور على رمز "عبء العمل" المستخدَم في هذا الدرس التطبيقي حول الترميز هنا.
- أنشئ الرمز البرمجي وحِزمه في صورة Docker. يمكن العثور على ملف Dockerfile المقابل هنا.
- انشر صورة Docker في "مستودع العناصر" (
$PRIMUS_ARTIFACT_REGISTRY
) الذي يملكه بنك Primus. - امنح حساب الخدمة
$WORKLOAD_SERVICE_ACCOUNT
إذن القراءة في Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY
).
./create_workload.sh
4. تفويض أحمال العمل وتشغيلها
منح الإذن لـ Workload
يريد بنك Primus تفويض أعباء العمل بالوصول إلى بيانات العملاء استنادًا إلى سمات الموارد التالية:
- المحتوى: الرمز الذي تم التحقّق منه
- المكان: بيئة آمنة
- المشغّل: مشغّل موثوق به
يستخدم Primus إدارة الهوية في Workload Identity لفرض سياسة وصول استنادًا إلى هذه المتطلبات.
يتيح لك اتحاد هوية Workload تحديد شروط السمات. تحدّ هذه الشروط من الهويات التي يمكنها المصادقة باستخدام مجموعة معرّفات أعباء العمل (WIP). يمكنك إضافة خدمة التحقّق من الإثبات إلى مجموعة المعلومات التعريفية لتحميل العمل كـ موفِّر مجموعة معلومات تعريفية لتحميل العمل لتقديم القياسات وفرض السياسة.
سبق أن تم إنشاء مجموعة المعلومات التعريفية للمعالجة كجزء من خطوة إعداد موارد السحابة الإلكترونية. سينشئ بنك Primus الآن موفِّرًا جديدًا لمجموعة المعلومات التعريفية لمعالجة بروتوكول OpenID Connect. يمنح --attribute-condition
المحدّد الإذن بالوصول إلى حاوية عبء العمل. يتطلب ذلك ما يلي:
- المحتوى: أحدث
$WORKLOAD_IMAGE_NAME
تم تحميله إلى مستودع$PRIMUS_ARTIFACT_REPOSITORY
- المكان: يتم تشغيل بيئة التنفيذ الموثوقة في Confidential Space على صورة الجهاز الافتراضي (VM) المتوافقة بالكامل مع Confidential Space.
- المُرسِل: حساب الخدمة
$WORKLOAD_SERVICE_ACCOUNT
في بنك Secundus
gcloud config set project $PRIMUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
على غرار عملية المعالجة الجارية التي تم إنشاؤها لبنك Primus، يريد بنك Secundus تفويض عمليات المعالجة بالوصول إلى بيانات العملاء استنادًا إلى ما يلي:
- المحتوى: عبء العمل.
- المكان: بيئة "المساحة السرية"
- المستخدِم: الحساب (
$WORKLOAD_SERVICE_ACCOUNT
) الذي يشغِّل حجم العمل.
يستخدم بنك Primus مطالبة image_reference
التي تتضمّن علامة الصورة لتحديد ما إذا كان يجب تفويض الوصول. ويمكنهم التحكّم في المستودع البعيد، ما يضمن لهم الإشارة إلى الصور التي لا تؤدي إلى تسرُّب بياناتهم.
في المقابل، لا يتحكّم بنك Secundus في المستودع الذي يحصل منه على الصورة، لذا لا يمكنه إجراء هذا الافتراض بأمان. بدلاً من ذلك، يختارون تفويض الوصول إلى أعباء العمل استنادًا إلى image_digest
. على عكس image_reference
الذي يمكن أن يغيّره بنك Primus ليشير إلى صورة مختلفة، لا يمكن لبنك Primus جعل image_digest
يشير إلى صورة غير الصورة التي تحقّق منها بنك Secundus في الخطوة السابقة.
قبل إنشاء موفِّري مجموعة المعلومات التعريفية لوحدة العمل، سنجمع image_digest
لصورة حاوية وحدة العمل التي سيتم استخدامها في شروط السمات لموفِّر مجموعة المعلومات التعريفية.
export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$SECUNDUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
تشغيل أحمال العمل
كجزء من هذه الخطوة، سيشغّل بنك Secundus حجم العمل في "المساحة السرية". ستحصل هذه "عبء العمل" على رموز الوصول من مجموعة معرّفات "عبء العمل" في Primus ومجموعة معرّفات "عبء العمل" في Secundus لقراءة بيانات العملاء في Primus Bank وSecundus Bank وفك تشفيرها على التوالي.
يتم تمرير وسيطات TEE المطلوبة باستخدام علامة البيانات الوصفية. يتم تمرير الوسائط لحاوية "وحدة العمل" باستخدام الجزء "tee-cmd
" من العلامة. سيتم نشر نتيجة تنفيذ أعباء العمل على $SECUNDUS_RESULT_STORAGE_BUCKET
.
تنفيذ عبء العمل الأول
كجزء من تنفيذ أولّ "حِزمة عمل"، ستحصي "حِزمة العمل" عملاء "بنك بريموس" من الموقع الجغرافي المقدَّم في وسيطات حاوية "حِزمة العمل". كما هو موضّح أدناه، ستنفِّذ حِزمة العمل الأولى الأمر "count-location
" وسيتم تخزين النتيجة في $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
.
gcloud compute instances create ${WORKLOAD_VM1} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]""
عرض النتائج
في مشروع Secundus، اطّلِع على نتائج أولّ "عبء عمل". انتظِر من 3 إلى 5 دقائق حتى تكمل حِزمة العمل عملية التنفيذ وتصبح النتيجة متاحة في حزمة تخزين السحابة الإلكترونية.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
من المفترض أن تكون النتيجة 3
، لأنّ هذا هو عدد الأشخاص من سياتل المدرَجين في ملف primus_customer_list.csv
.
تشغيل عبء العمل الثاني
كجزء من تنفيذ حِزمة العمل الثانية، سنجد العملاء المشتركين في بنك Primus وبنك Secundus. كما هو موضّح أدناه، ستنفِّذ حِزمة العمل الثانية الأمر "list-common-customers
" وسيتم تخزين النتيجة في $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count
.
gcloud compute instances create ${WORKLOAD_VM2} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
عرض النتائج
في مشروع Secundus، اطّلِع على نتائج حمولة العمل الثانية. انتظِر من 3 إلى 5 دقائق حتى تكمل حِزمة العمل عملية التنفيذ وتصبح النتيجة متاحة في حزمة تخزين السحابة الإلكترونية.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
من المفترض أن تكون النتيجة هي القائمة التالية لأنّ هؤلاء هم العملاء المشتركون بين بنك Primus وبنك Secundus.
إخراج:
Eric
Clinton
Ashley
Cooper
تشغيل "حمل عمل غير مصرّح بها"
تنتهي صلاحية عقد بنك Primus الذي يسمح لبنك Secundus بالوصول إلى بياناته. لذلك، عدّل بنك Primus شرط السمة للسماح بأجهزة افتراضية باستخدام حساب الخدمة من شريكه الجديد، بنك Tertius.
يُعدِّل بنك Primus موفِّر Workload Identity Pool
في $PRIMUS_PROJECT_ID
، عدِّل شرط السمة لموفِّر هوية أداة التحقّق من الإثبات من أجل تفويض عمليات المعالجة في موقع جغرافي جديد.
- اضبط المشروع على $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
- تصدير معرّف مشروع Tertius Bank على Google Cloud Platform باستخدام الأمر أدناه سيستخدم بنك Primus هذا لاحقًا لتعديل شرط السمة لموفِّر مجموعة المعلومات التعريفية لوحدة العمل. لن يتوقف مصرف Primus عن تفويض حسابات خدمة "الحِزم المُشغّلة" في مصرف Secundus. سيسمح الآن بحسابات خدمة "عمليات سير العمل" في بنك Tertius.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- عدِّل موفِّر OIDC في مجموعة المعلومات التعريفية. تم تغيير
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts
إلى'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.
. بدلاً من تفويض حساب خدمة "وحدة العمل" من مصرف Secundus، سيتم الآن تفويض حساب خدمة "وحدة العمل" من مصرف Tertius.
gcloud iam workload-identity-pools providers update-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$PRIMUS_WORKLOAD_IDENTITY_POOL" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
إعادة تشغيل "حمل العمل"
عندما يحاول بنك Secundus تشغيل حمولة العمل الأصلية، يتعذّر عليه ذلك. للاطّلاع على الخطأ، عليك حذف ملف النتائج الأصلي ومثيل الجهاز الظاهري، ثم محاولة تشغيل حمولة العمل مرة أخرى.
حذف ملف النتائج الحالي ومثيل الجهاز الظاهري
- اضبط المشروع على مشروع
$SECUNDUS_PROJECT_ID
.
gcloud config set project $SECUNDUS_PROJECT_ID
- حذف ملف النتائج
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- احذف نسخة "الخادم الافتراضي السري".
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
شغِّل حمولة العمل غير المصرّح بها:
gcloud compute instances create ${WORKLOAD_VM2} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE}\
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
عرض الخطأ
بدلاً من نتائج أعباء العمل، يظهر لك خطأ (The given credential is rejected by the attribute condition
).
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
وبالمثل، إذا عدّل "مصرف بريموس" سرًا حجم العمل لإرسال قائمة عملاء "مصرف سيكندوس" بالكامل إلى حزمة يملكها "مصرف بريموس"، ستتعذّر هذه المحاولة لأنّ ملخّص حجم العمل الضارّ سيكون مختلفًا عن ملخّص الصورة الذي تمّ تفويضه في "مجموعة عناوين العملاء" في "مصرف سيكندوس".
5. تنظيف
في ما يلي البرنامج النصي الذي يمكن استخدامه لتنظيف الموارد التي أنشأناها كجزء من هذا الدرس التطبيقي حول الترميز. كجزء من عملية التنظيف هذه، سيتم حذف الموارد التالية:
- أدخِل حزمة التخزين في السحابة الإلكترونية الخاصة ببنك Primus (
$PRIMUS_INPUT_STORAGE_BUCKET)
. - حساب خدمة تابعة لبنك Primus (
$PRIMUS_SERVICE_ACCOUNT
). - سجلّ عناصر بنك Primus الذي يحتوي على توقيعات الصور (
$PRIMUS_COSIGN_REPOSITORY
). - مجموعة معلومات تعريفية لـ Workload Identity في بنك Primus(
$PRIMUS_WORKLOAD_IDENTITY_POOL
). - حساب خدمة "حمولة العمل" لبنك Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - أدخِل حزمة التخزين في السحابة الإلكترونية لبنك Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET)
. - حساب خدمة تابع لبنك Secundus (
$SECUNDUS_SERVICE_ACCOUNT
). - سجلّ عناصر بنك Secundus الذي يحتوي على توقيعات الصور (
$SECUNDUS_COSIGN_REPOSITORY
). - مجموعة معلومات تعريفية لتحميل العمل في بنك Secundus(
$SECUNDUS_WORKLOAD_IDENTITY_POOL
). - حساب خدمة "حمولة العمل" في بنك Secundus (
$WORKLOAD_SERVICE_ACCOUNT
). - مثيلات Compute لتطبيقات Workload
- حزمة تخزين النتائج الخاصة ببنك Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET
). - مستودع عناصر Primus Bank (
$PRIMUS_ARTIFACT_REPOSITORY
).
./cleanup.sh
إذا انتهيت من الاستكشاف، يُرجى التفكير في حذف مشروعك.
- انتقِل إلى وحدة تحكّم Cloud Platform.
- اختَر المشروع الذي تريد إيقافه، ثم انقر على "حذف" في أعلى الصفحة: سيؤدي ذلك إلى جدولة المشروع للحذف.
تهانينا
تهانينا، لقد أكملت دورة codelab بنجاح.
لقد تعرّفت على كيفية تأمين البيانات المشترَكة مع الحفاظ على سرّيتها باستخدام "مساحة سرية".
الخطوة التالية
اطّلِع على بعض هذه الدروس التطبيقية حول الترميز المشابهة...
- الدرس التطبيقي حول صورة الحاوية الموقَّعة
- كيفية إجراء معاملات مواد العرض الرقمية باستخدام ميزة "الحساب المتعدّد الأطراف" والمساحات السرية
- تحليل البيانات السرية باستخدام "المساحات السرية"