تأمين البيانات المشتركة قيد الاستخدام من خلال المساحة السرية

1. نظرة عامة

توفّر المساحة الآمنة مشاركة البيانات والتعاون الآمنين بين عدة جهات، مع السماح للمؤسسات بالحفاظ على سرية بياناتها. وهذا يعني أنّه يمكن للمؤسسات التعاون مع بعضها البعض مع الحفاظ على التحكّم في بياناتها وحمايتها من الوصول غير المصرَّح به.

تتيح لك "المساحة الآمنة" الاستفادة من سيناريوهات يمكنك فيها تحقيق قيمة متبادلة من خلال تجميع البيانات الحساسة، التي غالبًا ما تكون خاضعة للوائح التنظيمية، وتحليلها، مع الاحتفاظ بالتحكّم الكامل فيها. باستخدام Confidential Space، يمكن للمؤسسات الاستفادة بشكل متبادل من تجميع البيانات الحسّاسة وتحليلها، مثل معلومات تحديد الهوية الشخصية والمعلومات الصحية المحمية والملكية الفكرية وأسرار التشفير، مع الاحتفاظ بالتحكّم الكامل فيها.

المتطلبات

ما ستتعلمه

  • كيفية إعداد موارد السحابة الإلكترونية اللازمة لتشغيل Confidential Space
  • كيفية تشغيل عبء العمل في جهاز Confidential VM يعمل بصورة Confidential Space VM
  • كيفية منح إذن الوصول إلى الموارد المحمية استنادًا إلى سمات رمز عبء العمل (ماذا) وبيئة Confidential Space (أين) والحساب الذي ينفّذ عبء العمل (مَن)

في هذا الدرس التطبيقي حول الترميز، ستعمل على إعداد مساحة آمنة بين مصرفَي Primus وSecundus لتحديد عملائهما المشتركين بدون مشاركة قوائم الحسابات الكاملة مع بعضهما البعض. وتتضمّن الخطوات التالية:

  • الخطوة 1: إعداد موارد السحابة الإلكترونية المطلوبة لمصرفَي Primus وSecundus تشمل موارد السحابة الإلكترونية هذه حِزم Cloud Storage ومفاتيح KMS ومجموعات هوية أحمال العمل وحسابات الخدمة لكلّ من Primus Bank وSecundus Bank. يخزّن كلّ من Primus Bank وSecundus Bank بيانات عملائهما في حِزم Cloud Storage ويشفّران البيانات باستخدام مفاتيح خدمة إدارة المفاتيح في السحابة الإلكترونية.
  • الخطوة 2: إنشاء حساب خدمة خاص بعبء العمل سيتم استخدامه من قِبل الجهاز الافتراضي الخاص بعبء العمل سيطلق بنك Secundus، وهو الجهة التي ستشغّل عبء العمل، الجهاز الافتراضي لعبء العمل. سيتولّى "مصرف Primus" إنشاء الرمز البرمجي لوحدة العمل.
  • الخطوة 3: إنشاء عبء عمل يتضمّن أمرَين من أوامر واجهة سطر الأوامر، أحدهما لاحتساب عدد العملاء من الموقع الجغرافي المقدَّم والآخر للعثور على العملاء المشتركين بين Primus Bank وSecundus Bank سيتم إنشاء عبء العمل من قِبل Primus Bank وسيتم تجميعه كصورة Docker. سيتم نشر صورة Docker هذه في Artifact Registry.
  • الخطوة 4: تفويض عبء عمل سيستخدم Primus Bank مجموعة تعريفات هوية أحمال العمل لمنح أحمال العمل إذن الوصول إلى بيانات العملاء استنادًا إلى سمات الجهة التي تشغّل حمل العمل ونوع عمله ومكان تشغيله.
  • الخطوة 5: عندما يتم تشغيل عبء العمل، سيطلب الوصول إلى موارد السحابة الإلكترونية الخاصة بمساهمي البيانات (Primus Bank وSecundus Bank) من خلال تقديم رمز مميّز لخدمة التحقّق من صحة الشهادة مع مطالبات عبء العمل والبيئة. إذا كانت مطالبات قياس أعباء العمل في الرمز المميز تتطابق مع شرط السمة في مجموعات معرّفات أعباء العمل في مصرفَي Primus وSecundus، سيعرض الرمز المميز للوصول إلى حساب الخدمة الذي لديه إذن بالوصول إلى موارد السحابة الإلكترونية المعنية. لن يتمكّن من الوصول إلى موارد السحابة الإلكترونية سوى حمل العمل الذي يتم تشغيله داخل Confidential Space.
  • الخطوة 5(أ): تشغيل عبء العمل الأول الذي يحسب عملاء Primus Bank من مواقع جغرافية محدّدة بالنسبة إلى عبء العمل هذا، ستكون شركة Primus Bank متعاونة في البيانات ومؤلفة لعبء العمل، ما يوفّر قائمة العملاء المشفّرة لعبء العمل الذي يتم تشغيله في Confidential Space. سيكون Secundus Bank مشغّلاً لوحدة العمل، وسيشغِّل وحدة العمل في مساحة سرية.
  • الخطوة 5(ب): تشغيل عبء العمل الثاني الذي يعثر على العملاء المشتركين بين مصرفَي Primus وSecundus بالنسبة إلى عبء العمل هذا، سيكون كل من "بنك بريموس" و"بنك سيكوندوس" من المتعاونين في البيانات. سيقدّمون قوائم العملاء المشفّرة إلى عبء العمل الذي يتم تشغيله في Confidential Space. سيصبح Secundus Bank مشغّل عبء عمل مرة أخرى. سيتم أيضًا منح إذن الوصول إلى عبء العمل هذا من قِبل "بنك Secundus" لأنّ عبء العمل يحتاج إلى الوصول إلى قوائم العملاء المشفّرة في "بنك Secundus" أيضًا للعثور على العملاء المشتركين. في هذه الحالة، سيسمح "بنك Secundus" للعبء بمعالجة بيانات عملائه استنادًا إلى سمات الجهة التي تعالج البيانات، ونوع المعالجة، ومكان المعالجة، كما هو موضّح في الخطوة 4 لـ "بنك Primus".

fdef93a6868a976.png

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. في حال عدم ضبط المتغيّر، سيتم إنشاء اسم مورد السحابة الإلكترونية من اسم المشروع وسيتم إنشاء مورد سحابة إلكترونية جديد كجزء مما يلي:

$PRIMUS_INPUT_STORAGE_BUCKET

الحزمة التي تخزّن ملف بيانات عملاء Primus Bank

$PRIMUS_WORKLOAD_IDENTITY_POOL

مجموعة Workload Identity Pool (WIP) التابعة لمصرف Primus والتي تتحقّق من صحة المطالبات.

$PRIMUS_WIP_PROVIDER

موفِّر مجموعة معرّفات أعباء العمل في Primus Bank الذي يتضمّن شرط التخويل الذي سيتم استخدامه للرموز المميزة الموقَّعة من خدمة Attestation Verifier.

$PRIMUS_SERVICE_ACCOUNT

حساب خدمة Primus Bank الذي يستخدمه $PRIMUS_WORKLOAD_IDENTITY_POOL للوصول إلى الموارد المحمية في هذه الخطوة، يكون لديه إذن بعرض بيانات العملاء المخزّنة في حزمة $PRIMUS_INPUT_STORAGE_BUCKET.

$PRIMUS_ENC_KEY

مفتاح KMS المستخدَم لتشفير البيانات المخزّنة في $PRIMUS_INPUT_STORAGE_BUCKET لحساب Primus Bank

$PRIMUS_ENC_KEYRING

سلسلة مفاتيح KMS التي سيتم استخدامها لإنشاء مفتاح التشفير $PRIMUS_ENC_KEY لـ "بنك بريموس".

$PRIMUS_ARTIFACT_REPOSITORY

مستودع العناصر حيث سيتم إرسال صورة Docker الخاصة بعبء العمل

  • يمكنك ضبط المتغيّرات التالية باستخدام أسماء موارد السحابة الإلكترونية الحالية في مشروع Secundus. في حال تم ضبط المتغيّر، سيتم استخدام مورد السحابة الإلكترونية الحالي المقابل من مشروع Secundus. في حال عدم ضبط المتغيّر، سيتم إنشاء اسم مورد السحابة الإلكترونية من اسم المشروع وسيتم إنشاء مورد سحابة إلكترونية جديد كجزء مما يلي:

$SECUNDUS_INPUT_STORAGE_BUCKET

الحزمة التي تخزّن ملف بيانات العملاء الخاص بـ "بنك سيكوندوس"

$SECUNDUS_WORKLOAD_IDENTITY_POOL

مجموعة معرّفات أعباء العمل (WIP) التابعة لمصرف Secundus والتي تتحقّق من صحة المطالبات

$SECUNDUS_WIP_PROVIDER

موفِّر مجموعة معرّفات أعباء العمل في Secundus Bank الذي يتضمّن شرط التفويض الذي سيتم استخدامه للرموز المميزة الموقَّعة من خلال خدمة Attestation Verifier Service.

$SECUNDUS_SERVICE_ACCOUNT

حساب خدمة Secundus Bank الذي يستخدمه $SECUNDUS_WORKLOAD_IDENTITY_POOL للوصول إلى الموارد المحمية في هذه الخطوة، يكون لديه إذن بعرض بيانات العملاء المخزّنة في حزمة $SECUNDUS_INPUT_STORAGE_BUCKET.

$SECUNDUS_ENC_KEY

مفتاح KMS المستخدَم لتشفير البيانات المخزَّنة في $SECUNDUS_INPUT_STORAGE_BUCKET لحساب Secundus Bank

$SECUNDUS_ENC_KEYRING

سلسلة مفاتيح KMS المستخدَمة لإنشاء مفتاح التشفير $SECUNDUS_ENV_KEY لمصرف Secundus.

$SECUNDUS_RESULT_STORAGE_BUCKET

الحزمة التي تخزّن نتائج عبء العمل

$WORKLOAD_IMAGE_NAME

اسم صورة حاوية عبء العمل

$WORKLOAD_IMAGE_TAG

علامة صورة حاوية وحدة العمل

$WORKLOAD_SERVICE_ACCOUNT

حساب الخدمة الذي لديه إذن بالوصول إلى Confidential VM التي تشغّل عبء العمل

  • في ما يلي بعض العناصر المستخدَمة في هذا الدرس التطبيقي كما هو موضّح أدناه:
  • primus_customer_list.csv: الملف الذي يحتوي على بيانات عملاء Primus Bank هنا يمكنك الاطّلاع على نموذج الملف المستخدَم في هذا الدرس العملي.
  • secundus_customer_list.csv: الملف الذي يحتوي على بيانات عملاء Secundus Bank هنا يمكنك الاطّلاع على نموذج الملف المستخدَم في هذا الدرس العملي.
  • ستحتاج إلى أذونات معيّنة لهذين المشروعَين:
  • بالنسبة إلى $PRIMUS_PROJECT_ID، ستحتاج إلى "مشرف Cloud KMS" و"مشرف التخزين" و"مشرف Artifact Registry" و"مشرف حساب الخدمة" و"مشرف Workload Identity Pool في إدارة الهوية وإمكانية الوصول" (IAM).
  • بالنسبة إلى $SECUNDUS_PROJECT_ID، ستحتاج إلى "مشرف Compute" و"مشرف التخزين" و"مشرف حساب الخدمة" و"مشرف Cloud KMS" و"مشرف Workload Identity Pool في إدارة الهوية وإمكانية الوصول" و"مشرف الأمان" (اختياري).
  • نفِّذ البرنامج النصي التالي لضبط أسماء المتغيرات المتبقية على قيم استنادًا إلى رقم تعريف مشروعك لأسماء الموارد.
source config_env.sh

إعداد موارد السحابة الإلكترونية لشركة Primus Bank

في ما يلي موارد السحابة الإلكترونية المطلوبة لمصرف Primus Bank. نفِّذ هذا البرنامج النصي لإعداد المراجع الخاصة بـ "بنك بريموس":

  • حزمة التخزين على السحابة الإلكترونية ($PRIMUS_INPUT_STORAGE_BUCKET) لتخزين ملف بيانات العملاء المشفَّر الخاص بـ "بنك بريموس"
  • مفتاح التشفير ($PRIMUS_ENC_KEY) وسلسلة المفاتيح ($PRIMUS_ENC_KEYRING) في KMS لتشفير ملف بيانات العملاء الخاص بـ "بنك بريموس"
  • مجموعة معرّفات أعباء العمل ($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 Bank، يجب توفير موارد السحابة الإلكترونية التالية. نفِّذ هذا النص البرمجي لإعداد موارد Secundus Bank. كجزء من هذه الخطوات، سيتم إنشاء المراجع المذكورة أدناه:

  • حزمة التخزين السحابي ($SECUNDUS_INPUT_STORAGE_BUCKET) لتخزين ملف بيانات العملاء المشفَّر الخاص بـ "بنك Secundus"
  • مفتاح التشفير ($SECUNDUS_ENC_KEY) وسلسلة المفاتيح ($SECUNDUS_ENC_KEYRING) في "إدارة المفاتيح" لتشفير ملف بيانات "بنك Secundus"
  • مجموعة معرّفات أعباء العمل ($SECUNDUS_WORKLOAD_IDENTITY_POOL) للتحقّق من صحة المطالبات استنادًا إلى شروط السمات التي تم ضبطها ضمن الموفِّر
  • يملك حساب الخدمة ($SECUNDUS_SERVICE_ACCOUNT) المرتبط بمجموعة معرّفات أحمال العمل المذكورة أعلاه ($SECUNDUS_WORKLOAD_IDENTITY_POOL) إذنًا بفك تشفير البيانات باستخدام مفتاح KMS (باستخدام الدور roles/cloudkms.cryptoKeyDecrypter)، وقراءة البيانات من حزمة التخزين السحابي (باستخدام الدور objectViewer)، وربط حساب الخدمة بمجموعة معرّفات أحمال العمل (باستخدام الدور roles/iam.workloadIdentityUser).
  • حزمة التخزين في السحابة الإلكترونية ($SECUNDUS_RESULT_STORAGE_BUCKET) لتخزين نتيجة تنفيذ عبء العمل من قِبل Secundus Bank
./setup_secundus_bank_resources.sh

3- إنشاء حمل عمل

إنشاء حساب خدمة خاص بعبء العمل

الآن، عليك إنشاء حساب خدمة لعبء العمل مع الأدوار والأذونات المطلوبة كما هو موضّح أدناه. نفِّذ النص البرمجي التالي لإنشاء حساب خدمة خاص بأحمال العمل في مشروع Secundus Bank. ستستخدم الآلة الافتراضية التي تشغّل عبء العمل حساب الخدمة هذا.

سيحصل حساب الخدمة الخاص بعبء العمل هذا ($WORKLOAD_SERVICE_ACCOUNT) على الأدوار التالية:

  • امنح حساب خدمة عبء العمل الدور confidentialcomputing.workloadUser . سيسمح ذلك لحساب المستخدم بإنشاء رمز مميّز للتصديق.
  • امنح الإذن logging.logWriter لحساب خدمة عبء العمل. يتيح ذلك لبيئة Confidential Space كتابة السجلّات في Cloud Logging بالإضافة إلى Serial Console، وبالتالي تتوفّر السجلّات بعد إيقاف الجهاز الظاهري.
  • objectViewer لقراءة البيانات من حزمة التخزين السحابي $PRIMUS_INPUT_STORAGE_BUCKET
  • objectViewer لقراءة البيانات من حزمة التخزين السحابي $SECUNDUS_INPUT_STORAGE_BUCKET
  • objectAdmin لكتابة نتيجة عبء العمل في حزمة التخزين السحابي $SECUNDUS_RESULT_STORAGE_BUCKET
./create_workload_service_account.sh

إنشاء حمل عمل

كجزء من هذه الخطوة، ستنشئ صورة Docker لعبء العمل المستخدَم في هذا الدرس التطبيقي حول الترميز. وحدة العمل هي تطبيق GoLang بسيط ينفّذ ما يلي:

  • تحسب هذه السمة عدد العملاء في موقع جغرافي محدّد.
  • تعثر هذه العملية على العملاء المشتركين بين Primus وSecundus Bank من قوائم العملاء المخزَّنة في حِزم التخزين السحابي الخاصة بكل منهما.

نفِّذ البرنامج النصي التالي لإنشاء عبء عمل يتم فيه تنفيذ الخطوات التالية:

  • أنشئ مستودع Artifact Registry ($PRIMUS_ARTIFACT_REPOSITORY) تملكه شركة Primus Bank وسيتم نشر عبء العمل فيه.
  • أنشئ الرمز البرمجي وعدِّله باستخدام أسماء الموارد المطلوبة. يمكنك العثور على رمز عبء العمل المستخدَم في هذا الدرس العملي هنا.
  • أنشئ الرمز البرمجي وحزِّمه في صورة Docker. يمكن العثور على ملف Dockerfile ذي الصلة هنا.
  • انشر صورة Docker في Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY) المملوكة من Primus Bank.
  • امنح حساب الخدمة إذن القراءة $WORKLOAD_SERVICE_ACCOUNT في Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY).
./create_workload.sh

4. منح الإذن بتشغيل أحمال العمل

منح الإذن لحمل العمل

يريد "بنك بريموس" السماح لأحمال العمل بالوصول إلى بيانات العملاء استنادًا إلى سمات الموارد التالية:

  • الوصف: رمز تم التحقّق منه
  • المكان: بيئة آمنة
  • المشغّل: مشغّل موثوق به

تستخدم Primus اتحاد هوية عبء العمل لفرض سياسة وصول استنادًا إلى هذه المتطلبات.

يتيح لك اتحاد موفّري هويات المستخدمين تحديد شروط السمات. تفرض هذه الشروط قيودًا على الهويات التي يمكنها المصادقة باستخدام مجموعة معرّفات أعباء العمل (WIP). يمكنك إضافة خدمة Attestation Verifier إلى WIP بصفتها موفِّر مجموعة معلومات تعريفية لعرض القياسات وتنفيذ السياسة.

تم إنشاء مجموعة المعلومات التعريفية مسبقًا كجزء من خطوة إعداد موارد السحابة الإلكترونية. ستنشئ Primus Bank الآن موفِّرًا جديدًا لمجموعة المعلومات التعريفية للمعالجة المتوافقة مع معيار OIDC. يمنح --attribute-condition المحدّد إذن الوصول إلى حاوية عبء العمل. يتطلّب ذلك ما يلي:

  • التعديل: تم تحميل آخر إصدار من $WORKLOAD_IMAGE_NAME إلى مستودع $PRIMUS_ARTIFACT_REPOSITORY.
  • المكان: يتم تشغيل بيئة التنفيذ الموثوقة في "مساحة للبيانات السرية" على صورة الجهاز الافتراضي المتوافقة بالكامل مع "مساحة للبيانات السرية".
  • المستلِم: حساب خدمة Secundus Bank $WORKLOAD_SERVICE_ACCOUNT
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"

على غرار WIP الذي تم إنشاؤه لـ "بنك بريموس"، يريد "بنك سيكوندوس" السماح لأحمال العمل بالوصول إلى بيانات عملائه استنادًا إلى ما يلي:

  • ما هو: هو عبء العمل.
  • المكان: بيئة "مساحة للبيانات السرية"
  • المستخدم: الحساب ($WORKLOAD_SERVICE_ACCOUNT) الذي يشغّل وحدة العمل.

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

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

قبل إنشاء موفِّري مجموعات المعلومات التعريفية، كنا نجمع 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 Bank عبء العمل على Confidential Space. سيحصل عبء العمل هذا على رموز الدخول المميزة من مجموعة معرّفات أعباء العمل في Primus ومجموعة معرّفات أعباء العمل في Secundus لقراءة بيانات العملاء وفك تشفيرها في كل من Primus Bank وSecundus Bank على التوالي.

يتم تمرير وسيطات TEE المطلوبة باستخدام علامة البيانات الوصفية. يتم تمرير وسيطات حاوية عبء العمل باستخدام جزء "tee-cmd" من العلامة. سيتم نشر نتيجة تنفيذ عبء العمل في $SECUNDUS_RESULT_STORAGE_BUCKET.

تشغيل أول عبء عمل

كجزء من تنفيذ وحدة العمل الأولى، ستحسب وحدة العمل عملاء Primus Bank من الموقع الجغرافي المقدَّم في وسيطات حاوية وحدة العمل. كما هو موضّح أدناه، ستنفّذ عبء العمل الأول الأمر "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 Bank.

إخراج:

Eric
Clinton
Ashley
Cooper

تشغيل حمل عمل غير مصرّح به

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

تعدّل شركة Primus Bank موفِّر مجموعة المعلومات التعريفية

في $PRIMUS_PROJECT_ID، عدِّل شرط السمة لموفّر الهوية Attestation Verifier من أجل السماح بأحمال العمل في موقع جغرافي جديد.

  1. اضبط المشروع على $PRIMUS_PROJECT_ID.
gcloud config set project $PRIMUS_PROJECT_ID
  1. صدِّر معرّف مشروع GCP الخاص بـ Tertius Bank باستخدام الأمر أدناه. ستستخدم Primus Bank هذا المعرّف لاحقًا لتعديل شرط السمة لموفِّر مجموعة المعلومات التعريفية. لن يتوقف مصرف Primus عن منح الإذن لحسابات خدمة أعباء العمل في مصرف Secundus. سيسمح الآن بحسابات خدمة أعباء العمل في Tertius Bank.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
  1. عدِّل موفِّر 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 Bank، سيتم الآن تفويض حساب خدمة عبء العمل من Tertius Bank.
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 Bank تنفيذ عبء العمل الأصلي، يتعذّر ذلك. لعرض الخطأ، احذف ملف النتائج الأصلي والجهاز الافتراضي، ثم حاوِل تشغيل عبء العمل مرة أخرى.

حذف ملف النتائج الحالي ومثيل الجهاز الافتراضي

  1. اضبط المشروع على مشروع $SECUNDUS_PROJECT_ID.
gcloud config set project $SECUNDUS_PROJECT_ID
  1. احذف ملف النتائج.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
  1. احذف مثيل Confidential VM.
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_INPUT_STORAGE_BUCKET).
  • حساب خدمة تابع لمصرف Primus Bank ‏ ($PRIMUS_SERVICE_ACCOUNT)
  • سجلّ عناصر Primus Bank الذي يحتوي على توقيعات الصور ($PRIMUS_COSIGN_REPOSITORY)
  • مجموعة معلومات تعريفية في Workload Identity Pool تابعة لمصرف Primus Bank($PRIMUS_WORKLOAD_IDENTITY_POOL)
  • حساب خدمة عبء العمل الخاص بمصرف Secundus Bank ($WORKLOAD_SERVICE_ACCOUNT)
  • أدخِل حزمة التخزين السحابي الخاصة ببنك Secundus ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • حساب خدمة تابع لمصرف Secundus Bank ($SECUNDUS_SERVICE_ACCOUNT)
  • مسجّل بيانات Secundus Bank الذي يحتوي على توقيعات الصور ($SECUNDUS_COSIGN_REPOSITORY)
  • مجموعة معلومات تعريفية لـ Workload Identity Pool تابعة لـ "بنك Secundus" ($SECUNDUS_WORKLOAD_IDENTITY_POOL)
  • حساب خدمة عبء العمل الخاص بـ "بنك سيكوندوس" ($WORKLOAD_SERVICE_ACCOUNT)
  • Workload Compute Instances
  • حزمة تخزين النتائج الخاصة بمصرف Secundus Bank ($SECUNDUS_RESULT_STORAGE_BUCKET)
  • مستودع عناصر Primus Bank ($PRIMUS_ARTIFACT_REPOSITORY)
./cleanup.sh

إذا انتهيت من استكشاف المشروع، يُرجى التفكير في حذفه.

  • انتقِل إلى وحدة تحكّم Cloud Platform.
  • اختَر المشروع الذي تريد إيقافه، ثم انقر على "حذف" في أعلى الصفحة: يؤدي ذلك إلى تحديد موعد لحذف المشروع.

تهانينا

تهانينا، لقد أكملت درس البرمجة بنجاح.

تعرّفت على كيفية تأمين البيانات المشترَكة مع الحفاظ على سريتها باستخدام ميزة "المساحة الآمنة".

ما هي الخطوات التالية؟

يمكنك الاطّلاع على بعض الدروس التطبيقية المشابهة حول الترميز...

Further reading