1. نظرة عامة
يستند هذا الدرس التطبيقي حول الترميز إلى الدرس التطبيقي حول الترميز في Confidential Space. إتاحة استخدام صور الحاويات الموقّعة من خلال توفير خيار لمصادقة حاوية باستخدام مفتاح عام تم إثبات صحته بدلاً من تحديد ملخّص الصورة في سياسة Workload Identity Pool (WIP)
التغييرات التي طرأت على إتاحة استخدام صور الحاويات الموقّعة في Confidential Space:
تحسين سهولة الاستخدام: من خلال تقديم ميزة "صورة الحاوية الموقّعة"، يمكننا الآن الانتقال من أسلوب ملخّص صورة عبء العمل إلى أسلوب توقيع الحاوية للمتعاونين/المراجعين الذين يمنحون إذنًا لصورة ما.
- عند استخدام ملخّصات الصور مباشرةً، على مالكي الموارد تعديل سياساتهم بإضافة ملخّص صورة في كل مرة يمنحون فيها الإذن باستخدام صورة جديدة. باستخدام توقيعات الصور، تحتوي السياسة على بصمة مفتاح عام، والمفتاح الخاص المقابل مملوك للمتعاون أو المدقّق ويُستخدم لتوقيع الصور المدقّقة.
- في بعض نماذج الأمان، يكون الرجوع إلى مفتاح توقيع صورة موثوق به أكثر ملاءمةً من تعديل قائمة بقيم ملخّص الصور الجديدة.
عدم حدوث تراجع في الأمان: لن يؤدي استخدام توقيع الحاوية إلى حدوث أي تراجع في الأمان مقارنةً بالنهج السابق الخاص بملخّص الصورة، لأنّ حدود الثقة تظل كما هي. في أسلوب توقيع الحاوية، يمنح مالك المورد إذنًا لمفتاح التحقّق من خلال تحديد الملف المرجعي للمفتاح العام الموثوق به في سياسة WIP، وتُجري خدمة Attestation Verifier وWIP عملية التحقّق من الإذن. تتحقّق خدمة Attestation Verifier من أنّ التوقيع مرتبط بعبء العمل قيد التشغيل، وتتحقّق سياسة WIP من أنّ المفتاح العام الذي تؤكده الخدمة مصرح به بموجب السياسة.
أمان قوي: يتيح استخدام توقيعات صور الحاويات تفويض بعض الثقة إلى موقّع الصورة. من خلال تحديد بصمة المفتاح العام للموقّع الموثوق به في سياسة الإقرار، يمنح مالك المورد هذا الموقّع الإذن بتقديم تأييدات بشأن صور الحاويات التي تستوفي السياسة. تتحقّق خدمة Attestation Verifier من أنّ التوقيع مرتبط بعبء العمل قيد التشغيل، وتتحقّق السياسة من أنّ المفتاح العام الذي أنشأ التوقيع مصرح به بموجب السياسة. من خلال ذلك، تحافظ طبقة عدم التحديد المباشر الإضافية التي توفّرها عملية توقيع الصور على ضمانات الأمان القوية التي يوفّرها Confidential Space.
والفرق الوحيد بين هذين الأسلوبين هو أنّ الأسلوب الأخير يستخدم طبقة إضافية من التوجيه غير المباشر يتم فيها تفويض صور أحمال العمل باستخدام مفتاح توقيع. ولا يؤدي ذلك إلى ظهور أي ثغرات أمنية جديدة لأنّ حدود الثقة تظل كما هي.
ما ستتعلمه
في هذا الدرس التطبيقي حول الترميز، ستتعرّف على كيفية استخدام توقيع صورة حاوية لتفويض الوصول إلى الموارد المحمية:
- كيفية توقيع صورة حاوية تم تدقيقها باستخدام
cosign - كيفية تحميل توقيعات صور الحاويات إلى سجلات OCI لاكتشاف التوقيعات وتخزينها
- كيفية إعداد موارد السحابة الإلكترونية اللازمة لتشغيل Confidential Space
- كيفية تشغيل عبء العمل في Confidential Space مع إتاحة استخدام صورة الحاوية الموقّعة
يوضّح لك هذا الدرس التطبيقي حول الترميز كيفية استخدام Confidential Space للمصادقة عن بعد على صورة حاوية تم توقيعها باستخدام مفتاح موثوق به يعمل على Google Compute Engine.
المتطلبات
- أكمِل الدرس التطبيقي حول الترميز بعنوان "مساحة للبيانات السرية"
- مشروع على Google Cloud Platform
- متصفّح، مثل Chrome أو Firefox
- الإلمام بأدوات تحرير النصوص العادية في Linux، مثل Vim أو Emacs أو Nano
- معرفة أساسية بـ Sigstore cosign
- معرفة أساسية بـ Google Compute Engine ( درس تطبيقي حول الترميز) وConfidential VM والحاويات والمستودعات البعيدة
- معرفة أساسية بخدمة Cloud KMS ( درس تطبيقي حول الترميز)
- معرفة أساسية بحسابات الخدمة واتحاد هوية حمل العمل وشروط السمات
- معرفة أساسية بخدمة Artifact Registry
- معرفة أساسية بالتوقيعات الرقمية
الأدوار المشارِكة في "مساحة سرية" تتضمّن صورة حاوية موقَّعة
في هذا الدرس التطبيقي حول الترميز، سيكون "بنك بريموس" هو المدقّق ومالك المورد، وسيكون مسؤولاً عمّا يلي:
- إعداد المراجع المطلوبة باستخدام بيانات نموذجية
- تدقيق الرمز البرمجي لوحدة العمل
- استخدام
cosignلتوقيع صورة عبء العمل - تحميل التوقيع إلى مستودع
- ضبط سياسة "حماية معلومات العمل" لحماية بيانات العملاء
سيكون Secundus Bank هو الجهة التي أنشأت عبء العمل وتديره، وسيكون مسؤولاً عمّا يلي:
- إعداد الموارد المطلوبة لتخزين النتيجة
- كتابة الرمز البرمجي لوحدة العمل
- نشر صورة عبء العمل
- تشغيل عبء العمل في Confidential Space مع إتاحة استخدام صور الحاويات الموقّعة
سيقوم "بنك Secundus" بتطوير ونشر عبء عمل سيطلب بيانات العميل المخزّنة في حزمة تخزين على السحابة الإلكترونية يملكها "بنك Primus". سيراجع "بنك Primus" عبء العمل ويوقّع على صورة الحاوية ويضبط سياسات Workload Identity Pool للسماح لأحمال العمل المعتمَدة بالوصول إلى بياناته. سيتم تخزين نتيجة تنفيذ عبء العمل هذا في حزمة تخزين على السحابة الإلكترونية تملكها شركة Secundus Bank.
الموارد المعنية بإعداد "مساحة سرية"
يشير هذا الدرس التطبيقي حول الترميز إلى عدد من المتغيرات التي يجب ضبطها على قيم مناسبة لمشروعك على Google Cloud Platform. تفترض الأوامر الواردة في هذا الدرس التطبيقي حول الترميز أنّه تم ضبط هذه المتغيّرات. (على سبيل المثال، يمكن استخدام export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket' لضبط اسم حزمة التخزين الخاصة ببيانات الإدخال في مصرف Primus). في حال عدم ضبط متغيّرات أسماء الموارد، سيتم إنشاؤها استنادًا إلى رقم تعريف مشروع Google Cloud Platform.
اضبط ما يلي في مشروع Primus:
$PRIMUS_INPUT_STORAGE_BUCKET: الحزمة التي تخزّن ملف بيانات العملاء- استبدِل
$PRIMUS_WORKLOAD_IDENTITY_POOLبمجموعة Workload Identity Pool (WIP) التي تتحقّق من صحة المطالبات. - استبدِل
$PRIMUS_WIP_PROVIDERبموفِّر مجموعة Workload Identity الذي يتضمّن شرط التفويض الذي سيتم استخدامه للرموز المميزة الموقَّعة من خلال خدمة التحقّق من صحة الشهادة. $PRIMUS_SERVICEACCOUNT: حساب الخدمة الذي يستخدمه$PRIMUS_WORKLOAD_IDENTITY_POOLللوصول إلى الموارد المحمية في هذه الخطوة، يكون لديه إذن بعرض بيانات العملاء المخزّنة في حزمة$PRIMUS_INPUT_STORAGE_BUCKET.$PRIMUS_ENC_KEY: مفتاح KMS المستخدَم لتشفير البيانات المخزَّنة في$PRIMUS_INPUT_STORAGE_BUCKET
المراجع الجديدة في هذا الدرس التطبيقي حول الترميز:
-
$PRIMUS_COSIGN_REPOSITORY: Artifact Registry لتخزين توقيعات صور أحمال العمل -
$PRIMUS_SIGNING_KEY: مفتاح نظام إدارة المفاتيح (KMS) المستخدَم لتوقيع صورة عبء العمل من قِبل المدقّق/المتعاونين في البيانات (مثل مصرف Primus في هذه الحالة).
اضبط ما يلي في مشروع Secundus:
$SECUNDUS_ARTIFACT_REGISTRY: سجلّ العناصر حيث سيتم إرسال صورة Docker الخاصة بعبء العمل$WORKLOAD_IMAGE_NAME: اسم صورة Docker الخاصة بعبء العمل- استبدِل
$WORKLOAD_IMAGE_TAGبعلامة صورة Docker الخاصة بعبء العمل. - استبدِل
$WORKLOAD_SERVICEACCOUNTبحساب الخدمة الذي لديه إذن بالوصول إلى Confidential VM التي تشغّل عبء العمل. $SECUNDUS_RESULT_BUCKET: الحزمة التي تخزّن نتائج حجم المعالجة
المراجع الأخرى:
- يحتوي
primus_customer_list.csvعلى بيانات العميل. سنحمّل هذه البيانات إلى$PRIMUS_INPUT_STORAGE_BUCKETوننشئ عبء عمل سيستعلم عن هذه البيانات.
سير العمل الحالي
عند تشغيل عبء العمل في Confidential Space، تتم العملية التالية باستخدام الموارد التي تم إعدادها:
- يطلب عبء العمل رمز دخول عامًا إلى Google من
$PRIMUS_SERVICEACCOUNTمن WIP. يوفّر رمزًا مميّزًا لخدمة "التحقّق من صحة الشهادة" يتضمّن مطالبات بشأن عبء العمل والبيئة. - إذا كانت مطالبات قياس أعباء العمل في رمز خدمة "أداة التحقّق من صحة الشهادة" تتطابق مع شرط السمة في مجموعة معرّفات أعباء العمل، سيتم عرض رمز الدخول إلى
$PRIMUS_SERVICEACCOUNT. - يستخدم عبء العمل رمز الدخول المميز لحساب الخدمة المرتبط بـ
$PRIMUS_SERVICEACCOUNTللوصول إلى بيانات العميل في الحزمة$PRIMUS_INPUT_STORAGE_BUCKET. - ينفّذ عبء العمل عملية على هذه البيانات.
- يستخدم عبء العمل حساب الخدمة
$WORKLOAD_SERVICEACCOUNTلكتابة نتائج هذه العملية في الحزمة$SECUNDUS_RESULT_STORAGE_BUCKET.
سير عمل جديد يتضمّن إمكانية استخدام الحاويات الموقَّعة
سيتم دمج ميزة الحاويات الموقَّعة في سير العمل الحالي، كما هو موضّح أدناه. عند تشغيل عبء العمل في Confidential Space مع إتاحة استخدام صورة حاوية موقَّعة، تتم العملية التالية باستخدام الموارد التي تم ضبطها:
- تكتشف ميزة "المساحة الآمنة" أي توقيعات حاويات مرتبطة بصورة عبء العمل الحالي وترسلها إلى خدمة التحقّق من صحة الشهادة. يتأكّد برنامج التحقّق من صحة الشهادة من التوقيع، ويتضمّن أي توقيعات صالحة في بيانات الشهادة.
- يطلب عبء العمل رمز دخول عامًا إلى Google من
$PRIMUS_SERVICEACCOUNTمن WIP. يوفّر رمزًا مميّزًا لخدمة "التحقّق من صحة الشهادة" يتضمّن مطالبات بشأن عبء العمل والبيئة. - إذا كانت مطالبات توقيع الحاوية في رمز خدمة "أداة التحقّق من صحة الإقرار" تتطابق مع شرط السمة في WIP، سيتم عرض رمز الدخول إلى
$PRIMUS_SERVICEACCOUNT. - يستخدم عبء العمل رمز الدخول المميز لحساب الخدمة المرتبط بـ
$PRIMUS_SERVICEACCOUNTللوصول إلى بيانات العميل في الحزمة$PRIMUS_INPUT_STORAGE_BUCKET. - ينفّذ عبء العمل عملية على هذه البيانات.
- يستخدم عبء العمل
$WORKLOAD_SERVICEACCOUNTلكتابة نتائج هذه العملية في الحزمة$SECUNDUS_RESULT_STORAGE_BUCKET.
2. إعداد موارد السحابة
كجزء من عملية إعداد Confidential Space، عليك أولاً إنشاء موارد السحابة الإلكترونية المطلوبة ضمن مشاريع Google Cloud Platform الخاصة بمصرفَي Primus وSecundus. في ما يلي المراجع الجديدة في هذا الدرس التطبيقي حول الترميز:
في مشروع Primus:
- مفتاح توقيع KMS المستخدَم لتوقيع أحمال عمل Secundus بعد تدقيق الرمز
- مستودع Artifact Registry لتخزين توقيعات Cosign
ما مِن موارد جديدة في مشروع Secundus. بعد إعداد هذه المراجع، عليك إنشاء حساب خدمة لعبء العمل مع الأدوار والأذونات المطلوبة. بعد ذلك، ستنشئ صورة عبء عمل وسيوقّع المدقّق، أي مصرف Primus، على صورة عبء العمل. بعد ذلك، سيتم منح إذن الوصول إلى عبء العمل من قِبل المتعاونين في البيانات (بنك Primus في هذا الدرس التطبيقي حول الترميز)، وسينفّذ مشغّل عبء العمل (بنك Secundus في هذه الحالة) عبء العمل.
كجزء من عملية إعداد Confidential Space، ستنشئ موارد السحابة الإلكترونية المطلوبة في مشروعي Primus وSecundus على Google Cloud Platform.
قبل البدء
- استنسِخ هذا المستودع باستخدام الأمر أدناه للحصول على النصوص البرمجية المطلوبة التي يتم استخدامها كجزء من هذا الدرس التطبيقي.
git clone https://github.com/GoogleCloudPlatform/confidential-space
- غيِّر الدليل الخاص بهذا الدرس البرمجي.
cd confidential-space/codelabs/signed_container_codelab/scripts
- تأكَّد من ضبط المشاريع المطلوبة كما هو موضّح أدناه.
export PRIMUS_PROJECT_ID=<GCP project id of primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of secundus bank>
- اضبط متغيّرات أسماء الموارد المذكورة أعلاه باستخدام هذا الأمر. يمكنك تجاهل أسماء الموارد باستخدام هذه المتغيرات (مثل
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket'). - نفِّذ البرنامج النصي التالي لضبط أسماء المتغيرات المتبقية على قيم استنادًا إلى رقم تعريف مشروعك لأسماء الموارد.
source config_env.sh
- ثبِّت cosign باتّباع التعليمات الواردة هنا.
إعداد موارد مصرف Primus
كجزء من هذه الخطوة، عليك إعداد موارد السحابة الإلكترونية المطلوبة لمصرف Primus. شغِّل النص البرمجي التالي لإعداد الموارد الخاصة بمصرف Primus. كجزء من هذه الخطوات، سيتم إنشاء الموارد المذكورة أدناه:
- حزمة التخزين في السحابة الإلكترونية (
$PRIMUS_INPUT_STORAGE_BUCKET) لتخزين ملف بيانات العملاء المشفَّر الخاص بمصرف Primus - مفتاح التشفير (
$PRIMUS_ENC_KEY) وسلسلة المفاتيح ($PRIMUS_ENC_KEYRING) في KMS لتشفير ملف بيانات مصرف Primus - مجموعة معلومات تعريفية (
$PRIMUS_WORKLOAD_IDENTITY_POOL) للتحقّق من صحة المطالبات استنادًا إلى شروط السمات التي تم ضبطها ضمن الموفّر - حساب الخدمة (
$PRIMUS_SERVICEACCOUNT) المرتبط بمجموعة تعريف هوية عبء العمل المذكورة أعلاه ($PRIMUS_WORKLOAD_IDENTITY_POOL) مع إذن الوصول التالي في "إدارة الهوية وإمكانية الوصول" (IAM): roles/cloudkms.cryptoKeyDecrypterلفك تشفير البيانات باستخدام مفتاح KMSobjectViewerلقراءة البيانات من حزمة التخزين في السحابة الإلكترونية.roles/iam.workloadIdentityUserلربط حساب الخدمة هذا بمجموعة المعلومات التعريفية.
./setup_primus_bank_resources.sh
إعداد موارد مصرف Secundus
كجزء من هذه الخطوة، عليك إعداد موارد السحابة الإلكترونية المطلوبة لمصرف Secundus. شغِّل البرنامج النصي التالي لإعداد الموارد لمصرف Secundus. كجزء من هذه الخطوات، سيتم إنشاء المراجع المذكورة أدناه:
- حزمة التخزين في السحابة الإلكترونية (
$SECUNDUS_RESULT_STORAGE_BUCKET) لتخزين نتيجة تنفيذ عبء العمل من قِبل مصرف Secundus
./setup_secundus_bank_resources.sh
3- إنشاء حمل عمل وتوقيعه
إنشاء حساب خدمة خاص بعبء العمل
الآن، عليك إنشاء حساب خدمة لعبء العمل مع الأدوار والأذونات المطلوبة. نفِّذ النص البرمجي التالي لإنشاء حساب خدمة خاص بأحمال العمل في مشروع Secundus bank. سيتم استخدام حساب الخدمة هذا من قِبل الجهاز الظاهري الذي ينفّذ عبء العمل.
- سيحصل حساب الخدمة الخاص بعبء العمل هذا (
$WORKLOAD_SERVICEACCOUNT) على الأدوار التالية: confidentialcomputing.workloadUserللحصول على رمز مميز للتصديقlogging.logWriterلكتابة السجلّات في Cloud LoggingobjectViewerلقراءة البيانات من حزمة التخزين في السحابة الإلكترونية$PRIMUS_INPUT_STORAGE_BUCKETobjectAdminلكتابة نتيجة عبء العمل في حزمة التخزين في السحابة الإلكترونية$SECUNDUS_RESULT_STORAGE_BUCKET
./create_workload_serviceaccount.sh
إنشاء حمل عمل
كجزء من هذه الخطوة، ستنشئ صورة Docker لعبء العمل. حِمل العمل المستخدَم في هذا الدرس التطبيقي حول الترميز هو تطبيق Go بسيط يستند إلى واجهة سطر الأوامر ويحصي العملاء (من بيانات العميل لمصرف Primus) من موقع جغرافي محدّد في الوسيطة. نفِّذ البرنامج النصي التالي لإنشاء عبء عمل يتم فيه تنفيذ الخطوات التالية:
- أنشئ مستودع Artifact Registry(
$SECUNDUS_ARTIFACT_REGISTRY) مملوكًا لمصرف Secundus. - عدِّل رمز عبء العمل باستخدام أسماء الموارد المطلوبة. إليك رمز وحدة العمل المستخدَم في هذا الدرس التطبيقي حول الترميز.
- أنشئ ملف Go ثنائيًا وأنشئ ملف Dockerfile لإنشاء صورة Docker لرمز عبء العمل. في ما يلي ملف Dockerfile المستخدَم في هذا الدرس التطبيقي.
- أنشئ صورة Docker وانشرها في Artifact Registry (
$SECUNDUS_ARTIFACT_REGISTRY) المملوك لمصرف Secundus. - امنح
$WORKLOAD_SERVICEACCOUNTإذن القراءة لـ$SECUNDUS_ARTIFACT_REGISTRY. هذا الإذن مطلوب لكي يسحب حاوية عبء العمل صورة Docker لعبء العمل من Artifact Registry.
./create_workload.sh
Sign Workload
سنستخدم Cosign لتوقيع صورة عبء العمل. سيتم تلقائيًا تخزين التواقيع في Cosign في المستودع نفسه الذي يتم فيه تخزين الصورة التي يتم توقيعها. لتحديد مستودع مختلف للتواقيع، يمكنك ضبط متغيّر البيئة COSIGN_REPOSITORY.
سنستخدم هنا Artifact Registry كمثال. يمكنك أيضًا اختيار سجلات أخرى مستندة إلى OCI، مثل Docker Hub وAWS CodeArtifact، استنادًا إلى تفضيلاتك.
- أنشئ مستودع Docker في Artifact Registry.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud artifacts repositories create $PRIMUS_COSIGN_REPOSITORY \
--repository-format=docker --location=${PRIMUS_PROJECT_REPOSITORY_REGION}
- أنشئ سلسلة مفاتيح ومفتاحًا ضمن KMS لتوقيع صورة عبء العمل.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud kms keyrings create $PRIMUS_SIGNING_KEYRING \
--location=${PRIMUS_PROJECT_LOCATION}
gcloud kms keys create $PRIMUS_SIGNING_KEY \
--keyring=$PRIMUS_SIGNING_KEYRING \
--purpose=asymmetric-signing \
--default-algorithm=ec-sign-p256-sha256 \
--location=${PRIMUS_PROJECT_LOCATION}
- بالنسبة إلى Artifact Registry، من المتوقّع استخدام اسم صورة كامل، مثل
$LOCATION/$PROJECT/$REPOSITORY/$IMAGE_NAME. يمكنك تحميل أي صورة حاوية إلى المستودع لتخزين التوقيع.
export COSIGN_REPOSITORY=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo
- امنح حساب الخدمة
$WORKLOAD_SERVICEACCOUNTدور "المشاهد" في مستودع$PRIMUS_COSIGN_REPOSITORY. يسمح ذلك لـ Confidential Space باكتشاف أي توقيعات لصور الحاويات تم تحميلها إلى$PRIMUS_COSIGN_REPOSITORY.
gcloud artifacts repositories add-iam-policy-binding ${PRIMUS_COSIGN_REPOSITORY} \
--project=${PRIMUS_PROJECT_ID} --role='roles/viewer' --location=us \
--member="serviceAccount:${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com"
Cosign هي أداة فعّالة تتضمّن ميزات توقيع متعددة. بالنسبة إلى حالة الاستخدام لدينا، لا نحتاج إلا إلى Cosign للتوقيع باستخدام زوج من المفاتيح. لا تتوافق ميزة توقيع صور الحاويات مع ميزة التوقيع بدون مفتاح في Cosign.
عند تسجيل الدخول باستخدام زوج مفاتيح، يتوفّر خياران:
- وقِّع باستخدام مفتاحَي تشفير محليَّين تم إنشاؤهما بواسطة Cosign.
- التوقيع باستخدام زوج مفاتيح مخزَّن في مكان آخر (على سبيل المثال، في خدمة إدارة المفاتيح (KMS))
- أنشئ زوجًا من المفاتيح في Cosign إذا لم يكن لديك مفتاح. لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة التوقيع باستخدام مفاتيح مُدارة ذاتيًا. لقد حدّدنا هنا الطريقتَين (محليًا وباستخدام موفّر KMS) لإنشاء زوج المفاتيح وتوقيع حجم العمل، يُرجى اتّباع إحدى هاتين الطريقتَين لتوقيع حاوية حجم العمل.
// Set Application Default Credentials.
gcloud auth application-default login
// Generate keys using a KMS provider.
cosign generate-key-pair --kms <provider>://<key>
// Generate keys using Cosign.
cosign generate-key-pair
في السطر أعلاه، استبدِل <provider>://<key> بالقيمة gcpkms://projects/$PRIMUS_PROJECT_ID/locations/global/keyRings/$PRIMUS_SIGNING_KEYRING/cryptoKeys/$PRIMUS_SIGNING_KEY/cryptoKeyVersions/$PRIMUS_SIGNING_KEYVERSION
- <provider> : يشير إلى حلّ إدارة المفاتيح الذي تستخدمه
- <key> : يشير إلى مسار المفتاح في KMS
- استرداد المفتاح العام لإثبات صحة التوقيع
// For KMS providers.
cosign public-key --key <some provider>://<some key> > pub.pem
// For local key pair signing.
cosign public-key --key cosign.key > pub.pem
- وقِّع عبء العمل باستخدام Cosign. إجراء ترميز base64 غير مضاف على المفتاح العام
PUB=$(cat pub.pem | openssl base64)
// Remove spaces and trailing "=" signs.
PUB=$(echo $PUB | tr -d '[:space:]' | sed 's/[=]*$//')
- وقِّع عبء العمل باستخدام Cosign مع المفتاح العام الذي تم تصديره وخوارزميات التوقيع المرفقة.
IMAGE_REFERENCE=us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/$SECUNDUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG
// Sign with KMS support.
cosign sign --key <some provider>://<some key> $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
// Sign with a local key pair.
cosign sign --key cosign.key $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
-
--key[مطلوب] يحدّد مفتاح التوقيع الذي سيتم استخدامه. عند الإشارة إلى مفتاح يديره موفّر خدمة إدارة المفاتيح (KMS)، يُرجى اتّباع تنسيق معرّف الموارد المنتظم (URI) المحدّد من دعم Sigstore KMS. عند الإشارة إلى مفتاح تم إنشاؤه بواسطة Cosign، استخدِم cosign.key بدلاً من ذلك. $IMAGE_REFERENCE[مطلوب] تحدّد هذه السمة صورة الحاوية التي سيتم توقيعها. يمكن تحديد تنسيقIMAGE_REFERENCEمن خلال العلامة أو ملخّص الصورة. على سبيل المثال:us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container:latest or us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container[IMAGE-digest]- -a [مطلوب] يحدّد التعليقات التوضيحية المرفقة بحِزمة بيانات التوقيع. بالنسبة إلى صور الحاويات الموقَّعة في "المساحة الآمنة"، يجب إرفاق المفتاح العام وخوارزميات التوقيع بحِمل التوقيع.
- تقبل السمة
dev.cosignproject.cosign/sigalgONLY ثلاث قيم: - RSASSA_PSS_SHA256: خوارزمية RSASSA مع حشو PSS مع ترميز SHA256
- RSASSA_PKCS1V15_SHA256: خوارزمية RSASSA مع مساحة متروكة PKCS#1 v1.5 مع ملخّص SHA256.
- ECDSA_P256_SHA256: خوارزمية ECDSA على منحنى P-256 مع تجزئة SHA256. وهذه هي أيضًا خوارزمية التوقيع التلقائية لمفاتيح التشفير التي تم إنشاؤها باستخدام Cosign.
- تحميل التواقيع إلى مستودع Docker
سيحمّل تطبيق Cosign Sign التواقيع تلقائيًا إلى COSIGN_REPOSITORY. المحدّد
4. تفويض حمل العمل وتشغيله
منح الإذن لحمل العمل
كجزء من هذه الخطوة، سنعمل على إعداد موفِّر المعلومات التعريفية ضمن مجموعة المعلومات التعريفية ($PRIMUS_WORKLOAD_IDENTITY_POOL). تم إعداد شروط السمات الخاصة بالمعلومات التعريفية على النحو الموضّح أدناه. أحد الشروط هو التحقّق من صحة الملف المرجعي لتوقيع صورة عبء العمل مقارنةً بالملف المرجعي للمفتاح العام للتوقيع. باستخدام شرط السمة هذا، عندما يطرح "بنك Secundus" صورة جديدة لوحدة العمل، يراجع "بنك Primus" الرمز البرمجي لوحدة العمل ويوقّع على صورة وحدة العمل الجديدة بدون الحاجة إلى تعديل سياسة WIP باستخدام ملخّص الصورة.
gcloud config set project $PRIMUS_PROJECT_ID
PUBLIC_KEY_FINGERPRINT=$(openssl pkey -pubin -in pub.pem -outform DER | openssl sha256 | cut -d' ' -f2)
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
&& '${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com' in
assertion.google_service_accounts
&& ['ECDSA_P256_SHA256:${PUBLIC_KEY_FINGERPRINT}']
.exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig,sig.signature_algorithm+':'+sig.key_id))"
تشغيل حجم المعالجة
كجزء من هذه الخطوة، سنشغّل عبء العمل على Confidential VM. يتم تمرير وسيطات TEE المطلوبة باستخدام علامة البيانات الوصفية. يتم تمرير وسيطات حاوية عبء العمل باستخدام جزء "tee-cmd" من العلامة. تم ترميز عبء العمل لنشر النتيجة في $SECUNDUS_RESULT_STORAGE_BUCKET.
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--project=${SECUNDUS_PROJECT_ID} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/${SECUNDUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]"~tee-signed-image-repos=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo"
عرض النتائج
في مشروع Secundus، اطّلِع على نتائج عبء العمل.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
يجب أن تكون النتيجة 3، لأنّ هذا هو عدد الأشخاص من سياتل المُدرَجين في الملف primus_customer_list.csv.
5- تنظيف
في ما يلي البرنامج النصي الذي يمكن استخدامه لتنظيف الموارد التي أنشأناها كجزء من هذا الدرس التطبيقي حول الترميز. وكجزء من عملية التنظيف هذه، سيتم حذف الموارد التالية:
- أدخِل حزمة التخزين الخاصة بمصرف Primus (
$PRIMUS_INPUT_STORAGE_BUCKET). - حساب خدمة مصرف Primus (
$PRIMUS_SERVICEACCOUNT) - سجلّ Primus Bank لنتائج البحث التي تتضمّن توقيعات الصور (
$PRIMUS_COSIGN_REPOSITORY). - مجموعة Primus Bank Workload Identity Pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL) - حساب خدمة عبء العمل الخاص بـ Secundus Bank (
$WORKLOAD_SERVICEACCOUNT) - مثيل Compute لأعباء العمل
- حزمة تخزين النتائج الخاصة بمصرف Secundus Bank (
$SECUNDUS_RESULT_STORAGE_BUCKET) - سجلّ العناصر في Secundus Bank (
$SECUNDUS_ARTIFACT_REGISTRY) - الجهاز الافتراضي الخاص بعبء العمل في Secundus Bank (
$WORKLOAD_VM)
./cleanup.sh
إذا انتهيت من استكشاف المشروع، يُرجى التفكير في حذفه.
- انتقِل إلى وحدة تحكّم Cloud Platform.
- اختَر المشروع الذي تريد إيقافه، ثم انقر على "حذف" في أعلى الصفحة: يؤدي ذلك إلى تحديد موعد لحذف المشروع.
تهانينا
تهانينا، لقد أكملت الدرس التطبيقي حول الترميز بنجاح.
تعرّفت على كيفية الاستفادة من ميزة صورة الحاوية الموقّعة لتحسين قابلية استخدام Confidential Space.
ما هي الخطوات التالية؟
اطّلِع على بعض دروس الترميز التطبيقية المشابهة...
- تأمين البيانات المشترَكة المستخدَمة في "المساحة الآمنة"
- كيفية إجراء معاملات الأصول الرقمية باستخدام الحوسبة المتعددة الأطراف والمساحات السرية
- تحليل البيانات السرية باستخدام "المساحات السرية"