1. نظرة عامة
المساحة السرية توفر بيئة آمنة للتعاون بين عدة أطراف. يوضح هذا الدرس التطبيقي حول الترميز كيفية استخدام "المساحة السرية" لحماية الملكية الفكرية الحساسة، مثل نماذج تعلُّم الآلة.
في هذا الدرس التطبيقي حول الترميز، ستستخدم "المساحة السرية" لتمكين إحدى الشركات من مشاركة نموذج تعلُّم الآلة الخاص بها بشكل آمن مع شركة أخرى تريد استخدام هذا النموذج. وعلى وجه التحديد، تمتلك شركة Primus نموذج تعلُّم الآلة الذي لن يتم إصداره إلا لأعباء العمل التي يتم تشغيلها في المساحة السرية، ما يتيح لتطبيق Primus الاحتفاظ بالتحكم الكامل في ملكيته الفكرية. سيكون فريق Secundus هو مشغّل عبء العمل وستتولّى إدارة عبء عمل تعلُّم الآلة في "مساحة سرية". سيُحمِّل Secundus هذا النموذج ويُجري استنتاجًا باستخدام عينة من البيانات التي يملكها Secundus.
هنا Primus هو مؤلف عبء العمل الذي يؤلف رمز عبء العمل، والمتعاون الذي يريد حماية الملكية الفكرية من عامل تشغيل عبء العمل غير الموثوق به، Secundus. Secundus هو مشغِّل عبء العمل لتعلم الآلة.
المعلومات التي ستطّلع عليها
- طريقة ضبط بيئة يمكن فيها لأحد الطرفين مشاركة نموذج تعلُّم الآلة الخاص به مع طرف آخر بدون فقدان التحكّم في ملكيته الفكرية
المتطلبات
- مشروع Google Cloud Platform
- المعرفة الأساسية بـ Google Compute Engine ( درس تطبيقي) وجهاز افتراضي سري والحاويات والمستودعات البعيدة
- معرفة أساسية حول حسابات الخدمة واتحاد Workload Identity Federation وشروط السمات
الأدوار المتضمنة في إعداد مساحة سرية
في هذا الدرس التطبيقي حول الترميز، سيكون Company Primus مالك المورد ومؤلف عبء العمل، الذي سيكون مسؤولاً عن ما يلي:
- إعداد الموارد المطلوبة في السحابة الإلكترونية باستخدام نموذج تعلُّم الآلة
- كتابة رمز عبء العمل
- نشر صورة عبء العمل
- ضبط سياسة مجموعة Workload Identity لحماية نموذج تعلُّم الآلة من عامل تشغيل غير موثوق به
وتكون شركة Secundus مشغّل شبكة الجوّال ومسؤولة عن:
- إعداد الموارد السحابية المطلوبة لتخزين نماذج الصور المستخدمة في عبء العمل والنتائج
- تشغيل عبء عمل تعلُّم الآلة في Secret Space باستخدام النموذج الذي يوفّره Primus
طريقة عمل المساحة السرّية
عند تشغيل عبء العمل في "المساحة السرية"، تحدث العملية التالية باستخدام الموارد التي تم ضبطها:
- يطلب حجم العمل رمز دخول عام إلى Google في
$PRIMUS_SERVICEACCOUNT
من Workload Identity Pool. يوفّر رمزًا مميزًا لخدمة Attestation Verifier مع المطالبات المتعلّقة بحجم العمل والبيئة. - إذا تطابقت مطالبات قياس حِمل العمل في الرمز المميّز لخدمة المصادقة المُثبتة للإثبات مع شرط السمة في العمل قيد التقدم، سيتم عرض رمز الدخول
$PRIMUS_SERVICEACCOUNT.
. - تستخدِم أعباء العمل رمز الدخول المميّز إلى حساب الخدمة المرتبط بالمعرّف
$PRIMUS_SERVICEACCOUNT
للوصول إلى نموذج تعلُّم الآلة المخزّن في حزمة$PRIMUS_INPUT_STORAGE_BUCKET
. - ينفذ عبء العمل عملية على البيانات التي يملكها Secundus ويدير عبء العمل هذا ويديره مشروع Secundus في مشروعه.
- وتستخدم هذه الحزمة حساب خدمة
$WORKLOAD_SERVICEACCOUNT
لكتابة نتائج هذه العملية في حزمة$SECUNDUS_RESULT_STORAGE_BUCKET
.
2. إعداد موارد السحابة الإلكترونية
قبل البدء
- استنسِخ هذا المستودع باستخدام الأمر أدناه للحصول على النصوص البرمجية المطلوبة التي يتم استخدامها كجزء من هذا الدرس التطبيقي حول الترميز.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- يمكنك تغيير دليل هذا الدرس التطبيقي حول الترميز.
cd confidential-space/codelabs/ml_model_protection/scripts
- تأكد من ضبط متغيرات بيئة المشروع المطلوبة كما هو موضح أدناه. لمزيد من المعلومات عن إعداد مشروع GCP، يُرجى الاطّلاع على هذا الدرس التطبيقي حول الترميز. يمكنك الرجوع إلى هذا للحصول على تفاصيل حول كيفية استرداد رقم تعريف المشروع وكيفية اختلافه عن اسم المشروع ورقمه.
export PRIMUS_PROJECT_ID=<GCP project id of Primus>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus>
- فعِّل الفوترة لمشاريعك.
- تفعيل واجهة برمجة تطبيقات الحوسبة السرية وواجهات برمجة التطبيقات التالية لكلا المشروعين
gcloud services enable \
cloudapis.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. |
| يشير هذا المصطلح إلى مجموعة هويات أعباء العمل (WIP) في Primus التي تتحقّق من صحة المطالبات. |
| يشير هذا المصطلح إلى موفّر مجموعة بيانات عبء العمل في Primus الذي يتضمّن شرط التفويض لاستخدامه مع الرموز المميّزة الموقَّعة من خلال خدمة Attestation Verifier. |
| حساب خدمة Primus الذي يستخدمه |
| مستودع العناصر الذي سيتم فيه دفع صورة Docker لأعباء العمل |
- يمكنك ضبط المتغيرات التالية باستخدام أسماء موارد السحابة الإلكترونية الحالية في مشروع Secundus. إذا تم تعيين المتغير، فسيتم استخدام مورد السحابة الإلكترونية المقابل من مشروع Secundus. في حال عدم ضبط المتغيّر، سيتم إنشاء اسم مورد السحابة الإلكترونية من اسم المشروع وسيتم إنشاء مورد سحابي جديد بهذا الاسم. في ما يلي المتغيّرات المتوافقة لأسماء الموارد:
| يشير ذلك المصطلح إلى الحزمة التي تخزِّن نماذج الصور التي يرغب Secundus في تصنيفها باستخدام النموذج المقدَّم من Primus. |
| يشير ذلك المصطلح إلى الحزمة التي تخزِّن نتائج أعباء العمل. |
| اسم صورة حاوية حِمل العمل |
| علامة صورة حاوية أحمال العمل |
| يشير ذلك المصطلح إلى حساب الخدمة الذي يتضمن الإذن بالوصول إلى جهاز افتراضي سرّي مسؤول عن تنفيذ حِمل العمل. |
- ستحتاج إلى أذونات معيّنة لهذين المشروعين، ويمكنك الرجوع إلى هذا الدليل عن كيفية منح أدوار "إدارة الهوية وإمكانية الوصول" باستخدام وحدة تحكُّم Google Cloud Platform:
- بالنسبة إلى "
$PRIMUS_PROJECT_ID
"، ستحتاج إلى "مشرف مساحة التخزين" و"مشرف سجلّ Artifact Registry" و"مشرف حساب الخدمة" و"مشرف مجموعة تطبيقات إدارة الهوية وإمكانية الوصول" IAM Workload Identity Pool. - بالنسبة إلى "
$SECUNDUS_PROJECT_ID
"، ستحتاج إلى "مشرف Compute" و"مشرف مساحة التخزين" و"مشرف حساب الخدمة" و"مشرف مجموعة IAM Workload Identity" و"مشرف الأمان" (اختياري). - شغِّل script التالي لضبط أسماء المتغيّرات المتبقية على قيم استنادًا إلى رقم تعريف مشروعك لأسماء الموارد.
source config_env.sh
إعداد موارد شركة Primus
كجزء من هذه الخطوة، عليك إعداد موارد السحابة الإلكترونية المطلوبة لتطبيق Primus. يمكنك تشغيل script التالي لإعداد الموارد لتطبيق Primus. سيتم إنشاء الموارد التالية كجزء من تنفيذ النص البرمجي:
- حزمة التخزين في السحابة الإلكترونية (
$PRIMUS_INPUT_STORAGE_BUCKET
) لتخزين نموذج تعلُّم الآلة في Primus - مجموعة Workload Identity Pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL
) للتحقّق من صحة المطالبات استنادًا إلى شروط السمات التي تم ضبطها من قِبل مقدّم الخدمة - حساب الخدمة (
$PRIMUS_SERVICEACCOUNT
) المرفق أعلاه بمجمّع هويات العمل المذكورة أعلاه ($PRIMUS_WORKLOAD_IDENTITY_POOL
) والذي لديه إذن وصول "إدارة الهوية وإمكانية الوصول" للاطّلاع على البيانات من حزمة مساحة التخزين في السحابة الإلكترونية (باستخدام الدور "objectViewer
") ولربط حساب الخدمة هذا بتجميع هويات أحمال العمل (باستخدام دور "roles/iam.workloadIdentityUser
").
وكجزء من عملية إعداد الموارد السحابية هذه، سنستخدم نموذج TensorFlow. يمكننا حفظ النموذج بالكامل الذي يتضمن بنية النموذج والأوزان وتكوين التدريب في أرشيف ZIP. لأغراض هذا الدرس التطبيقي، سنستخدم نموذج MobileNet V1 المُدرَّب على مجموعة بيانات ImageNet المتوفرة هنا.
./setup_primus_company_resources.sh
سيتولّى النص البرمجي المذكور أعلاه إعداد المورد على السحابة الإلكترونية، وسننزِّل الآن النموذج وننشره على حزمة Cloud Storage التي تم إنشاؤها بواسطة النص البرمجي.
- نزِّل النموذج المدرَّب مسبقًا من هنا.
- بعد اكتمال عملية التنزيل، أعِد تسمية ملف tar الذي تم تنزيله إلى model.tar.gz.
- انشر الملف model.tar.gz في حزمة Cloud Storage باستخدام الأمر التالي من الدليل الذي يحتوي على الملف model.tar.gz.
gsutil cp model.tar.gz gs://${PRIMUS_INPUT_STORAGE_BUCKET}/
إعداد موارد شركة Secundus
كجزء من هذه الخطوة، ستقوم بإعداد موارد السحابة الإلكترونية المطلوبة لـ Secundus. شغِّل script التالي لإعداد الموارد لـ Secundus. وكجزء من هذه الخطوات، سيتم إنشاء المراجع التالية:
- حزمة التخزين في السحابة الإلكترونية (
$SECUNDUS_INPUT_STORAGE_BUCKET
) لتخزين نماذج الصور لتنفيذ الاستنتاجات من خلال Secundus - حزمة Cloud Storage (
$SECUNDUS_RESULT_STORAGE_BUCKET
) لتخزين نتيجة تنفيذ عبء العمل المستند إلى تعلُّم الآلة من خلال Secundus
تتوفّر بعض الصور النموذجية هنا لهذا الدرس التطبيقي حول الترميز.
./setup_secundus_company_resources.sh
3- إنشاء عبء عمل
إنشاء حساب خدمة أحمال العمل
والآن، ستنشئ حساب خدمة لتحميل العمل يتضمّن الأدوار والأذونات المطلوبة. شغِّل script التالي لإنشاء حساب خدمة أحمال عمل في مشروع Secundus. سيتم استخدام حساب الخدمة هذا بواسطة الجهاز الافتراضي الذي يدير عبء عمل تعلُّم الآلة.
سيؤدّي حساب خدمة أحمال العمل هذا ($WORKLOAD_SERVICEACCOUNT
) إلى الأدوار التالية:
confidentialcomputing.workloadUser
للحصول على رمز مصادقة مميزlogging.logWriter
لكتابة السجلات إلى Cloud Logging.objectViewer
لقراءة البيانات من حزمة التخزين في السحابة الإلكترونية$SECUNDUS_INPUT_STORAGE_BUCKET
.objectUser
لكتابة نتيجة عبء العمل إلى حزمة التخزين في السحابة الإلكترونية$SECUNDUS_RESULT_STORAGE_BUCKET
.
./create_workload_service_account.sh
إنشاء أعباء عمل
كجزء من هذه الخطوة، عليك إنشاء صورة Docker لأحمال العمل. من تأليف Primus. إنّ عبء العمل المستخدَم في هذا الدرس التطبيقي حول الترميز هو رمز Python المستخدَم في تعلُّم الآلة ويصل إلى نموذج تعلُّم الآلة المُخزَّن في حزمة تخزين Primus ويُجري الاستنتاجات باستخدام عيّنات الصور المخزّنة في حزمة تخزين.
لن يمكن الوصول إلى نموذج تعلُّم الآلة المُخزَّن في حزمة تخزين Primus إلا من خلال أعباء العمل التي تستوفي شروط السمات المطلوبة. يتم وصف شروط السمات هذه بمزيد من التفصيل في القسم التالي حول تفويض أعباء العمل.
في ما يلي طريقة run_inference() لأعباء العمل التي سيتم إنشاؤها واستخدامها في هذا الدرس التطبيقي حول الترميز. يمكنك العثور على رمز تحميل العمل بالكامل هنا.
def run_inference(image_path, model):
try:
# Read and preprocess the image
image = tf.image.decode_image(tf.io.read_file(image_path), channels=3)
image = tf.image.resize(image, (128, 128))
image = tf.image.convert_image_dtype(image, tf.float32)
image = tf.expand_dims(image, axis=0)
# Get predictions from the model
predictions = model(image)
predicted_class = np.argmax(predictions)
top_k = 5
top_indices = np.argsort(predictions[0])[-top_k:][::-1]
# Convert top_indices to a TensorFlow tensor
top_indices_tensor = tf.convert_to_tensor(top_indices, dtype=tf.int32)
# Use TensorFlow tensor for indexing
top_scores = tf.gather(predictions[0], top_indices_tensor)
return {
"predicted_class": int(predicted_class),
"top_k_predictions": [
{"class_index": int(idx), "score": float(score)}
for idx, score in zip(top_indices, top_scores)
],
}
except Exception as e:
return {"error": str(e)}
شغِّل script التالي لإنشاء أعباء عمل يتم فيها تنفيذ الخطوات التالية:
- يُرجى إنشاء Artifact Registry(
$PRIMUS_ARTIFACT_REGISTRY
) يملكه تطبيق Primus. - عدِّل رمز تحميل العمل بأسماء الموارد المطلوبة.
- قم ببناء عبء العمل لتعلم الآلة وإنشاء ملف Dockerfile لإنشاء صورة Docker لرمز عبء العمل. يمكنك الاطّلاع هنا على ملف Dockerfile المستخدَم في هذا الدرس التطبيقي حول الترميز.
- أنشئ صورة Docker وانشرها في Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY
) الذي يملكه تطبيق Primus. - منح تطبيق "
$WORKLOAD_SERVICEACCOUNT
" إذن قراءة لـ "$PRIMUS_ARTIFACT_REGISTRY
". هذا الإجراء مطلوب لحاوية أحمال العمل لسحب صورة إرساء حِمل العمل من Artifact Registry.
./create_workload.sh
بالإضافة إلى ذلك، يمكن ترميز أعباء العمل لضمان تحميلها للإصدار المتوقّع من نموذج تعلُّم الآلة عن طريق التحقّق من تجزئة النموذج أو توقيعه قبل استخدامه. ومن ميزات عمليات التحقّق الإضافية هذه أنّها تضمن سلامة نموذج تعلُّم الآلة. وبالتالي، سيحتاج عامل تشغيل عبء العمل أيضًا إلى تعديل صورة عبء العمل أو مَعلماته عندما يكون من المتوقّع أن يستخدم عبء العمل إصدارات مختلفة من نموذج تعلُّم الآلة.
4. تفويض حمل العمل وتشغيله
تفويض عبء العمل
يريد Primus السماح لأعباء العمل بالوصول إلى نموذج تعلُّم الآلة بناءً على سمات الموارد التالية:
- التحديث: الرمز الذي تم التحقق منه
- المكان: بيئة آمنة
- من: عامل تشغيل موثوق به
يستخدم Primus خدمة اتحاد هويات أحمال العمل لفرض سياسة وصول استنادًا إلى هذه المتطلّبات. يتيح لك اتحاد هوية أحمال العمل تحديد شروط السمات. تفرض هذه الشروط قيودًا على الهويات التي يمكنها المصادقة باستخدام قاعدة بيانات Workload Identity Pool (WIP). يمكنك إضافة "خدمة Attestation Verifier" (خدمة التحقق من المصادقة) إلى العمل قيد التقدم (WIP) بصفتها موفِّر خدمة تجميع هوية أحمال العمل لعرض القياسات وفرض السياسة.
سبق أن تم إنشاء "مجمع Workload Identity" مسبقًا كجزء من خطوة إعداد الموارد على السحابة الإلكترونية. سينشئ الآن تطبيق Primus موفّر خدمة تجميع هوية أحمال عمل OIDC جديدًا. تسمح السمة --attribute-condition
المحدَّدة بالوصول إلى حاوية حِمل العمل. يتطلّب ذلك ما يلي:
- التحديث: آخر
$WORKLOAD_IMAGE_NAME
تم تحميلها إلى مستودع$PRIMUS_ARTIFACT_REPOSITORY
. - المكان: يتم تشغيل بيئة التنفيذ الموثوقة في المساحة السرية على صورة الجهاز الافتراضي (VM) الخاصة بالمساحة السرية والمتاحة بالكامل.
- مَن: حساب خدمة Secundus
$WORKLOAD_SERVICE_ACCOUNT
.
export WORKLOAD_IMAGE_DIGEST=$(docker images –digests ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}| awk 'NR>1{ print $3 }')
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_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_SERVICEACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
تنفيذ تحميل العمل
كجزء من هذه الخطوة، سنتولّى مهمّة العمل في الجهاز الافتراضي (VM) الخاص بالمساحة السرية. يتم تمرير وسيطات TEE المطلوبة باستخدام علامة البيانات الوصفية. يتم تمرير الوسيطات لحاوية عبء العمل باستخدام "tee-cmd
". من العلامة. سيتم نشر نتيجة تنفيذ عبء العمل على $SECUNDUS_RESULT_STORAGE_BUCKET
.
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=TERMINATE \
--scopes=cloud-platform --zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICEACCOUNT}@${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}
عرض النتائج
بعد اكتمال تحميل العمل بنجاح، سيتم نشر نتيجة مهام العمل المستندة إلى تعلُّم الآلة في "$SECUNDUS_RESULT_STORAGE_BUCKET
".
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
في ما يلي بعض الأمثلة حول ما قد تبدو عليه نتائج الاستنتاج في نماذج الصور:
Image: sample_image_1.jpeg, Response: {'predicted_class': 531, 'top_k_predictions': [{'class_index': 531, 'score': 12.08437442779541}, {'class_index': 812, 'score': 10.269512176513672}, {'class_index': 557, 'score': 9.202644348144531}, {'class_index': 782, 'score': 9.08737564086914}, {'class_index': 828, 'score': 8.912498474121094}]}
Image: sample_image_2.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 9.53619384765625}, {'class_index': 557, 'score': 7.928380966186523}, {'class_index': 783, 'score': 7.70129919052124}, {'class_index': 531, 'score': 7.611623287200928}, {'class_index': 906, 'score': 7.021416187286377}]}
Image: sample_image_3.jpeg, Response: {'predicted_class': 905, 'top_k_predictions': [{'class_index': 905, 'score': 6.09878396987915}, {'class_index': 447, 'score': 5.992854118347168}, {'class_index': 444, 'score': 5.9582319259643555}, {'class_index': 816, 'score': 5.502010345458984}, {'class_index': 796, 'score': 5.450454235076904}]}
لكل نموذج صورة في حزمة تخزين Secundus، سيظهر لك إدخال في النتائج. سيتضمن هذا الإدخال معلومتين أساسيتين:
- مؤشر القيمة المتوقّعة: هذا فهرس عددي يمثّل الفئة التي يتوقّع النموذج أن تنتمي إليها الصورة.
- Top_k_predictions: تقدّم هذه التوقّعات ما يصل إلى ألف توقّعات للصورة، مرتَّبة من الأكثر إلى الأقل احتمالاً. تم ضبط قيمة k على 5 في هذا الدرس التطبيقي حول الترميز، ولكن يمكنك تعديلها في رمز عبء العمل للحصول على عدد أكبر أو أقلّ من التوقّعات.
لترجمة فهرس الفئة إلى اسم فئة يمكن لشخص عادي قراءته، راجع قائمة التصنيفات المتوفرة هنا. فعلى سبيل المثال، إذا رأيت فهرس الفئة 2، فإنه يتجاوب مع تصنيف الفئة "تنش" في قائمة التصنيفات.
في هذا الدرس التطبيقي حول الترميز، أوضحنا أنّ نموذجًا مملوكًا لشركة Primus لا يتم إصداره إلا ضمن عبء العمل الذي يتم تشغيله في بيئة التنفيذ الموثوقة (TEE). يدير Secundus عبء عمل تعلُّم الآلة في بيئة تنفيذ موثوقة (TEE)، ويمكن لهذا العمل الاستفادة من النموذج الذي يملكه تطبيق Primus بينما يحتفظ تطبيق Primus بالتحكم الكامل في النموذج.
تنفيذ حِمل عمل غير مصرَّح به
يغيّر Secundus صورة عبء العمل عن طريق سحب صورة عبء عمل مختلفة من مستودع العناصر الخاص به والذي لم يتم اعتماده من قِبل Primus. تسمح مجموعة Workload Identity Pool في Primus فقط بصورة ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG
Workload..
إعادة تنفيذ أعباء العمل
عندما يحاول Secundus تشغيل عبء العمل الأصلي باستخدام صورة عبء العمل الجديدة هذه، سيفشل الإجراء. لعرض الخطأ، احذف ملف النتائج الأصلي ومثيل الجهاز الافتراضي، ثم حاوِل تنفيذ أعباء العمل مرة أخرى.
يُرجى التأكّد من نشر صورة جديدة في Docker ضمن سجلّ العناصر في Secundus (باسم us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}
) وأنّ حساب خدمة أحمال العمل ($WORKLOAD_SERVICEACCOUNT
) قد منحت قارئ قاعدة بيانات المسجّلين الاصطناعي إذن قراءة صورة عبء العمل الجديدة هذه. يضمن هذا الإجراء عدم إنهاء عبء العمل قبل أن ترفض سياسة العمل قيد التقدم (WIP) في Primus الرمز المميز المقدم من عبء العمل.
حذف ملف النتائج الحالي ومثيل الجهاز الافتراضي
- ضبط المشروع على مشروع
$SECUNDUS_PROJECT_ID
gcloud config set project $SECUNDUS_PROJECT_ID
- احذف ملف النتائج.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
- احذف مثيل الجهاز الافتراضي (VM) السري.
gcloud compute instances delete ${WORKLOAD_VM}
تنفيذ عبء العمل غير المصرّح به:
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=TERMINATE \
--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=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/custom-image/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}
عرض الخطأ
بدلاً من نتائج أعباء العمل، يظهر لك خطأ (The given credential is rejected by the attribute condition
).
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/result
5- تنظيف
إليك النص البرمجي الذي يمكن استخدامه لحذف الموارد التي أنشأناها كجزء من هذا الدرس التطبيقي حول الترميز. وكجزء من عملية الإزالة هذه، سيتم حذف الموارد التالية:
- حزمة تخزين بيانات الإدخال في Primus (
$PRIMUS_INPUT_STORAGE_BUCKET)
. - حساب خدمة Primus (
$PRIMUS_SERVICEACCOUNT
) - مستودع عناصر Primus (
$PRIMUS_ARTIFACT_REPOSITORY
). - مجموعة هويات أحمال العمل في Primus (
$PRIMUS_WORKLOAD_IDENTITY_POOL
) - حساب خدمة أحمال العمل في Secundus (
$WORKLOAD_SERVICEACCOUNT
) - حزمة تخزين الإدخال في Secundus (
$SECUNDUS_INPUT_STORAGE_BUCKET)
. - مثيلات الحوسبة في أحمال العمل
- حزمة تخزين النتائج في Secundus (
$SECUNDUS_RESULT_STORAGE_BUCKET
)
$ ./cleanup.sh
إذا كنت قد انتهيت من الاستكشاف، فيرجى التفكير في حذف مشروعك.
- انتقِل إلى وحدة تحكُّم Cloud Platform
- اختَر المشروع الذي تريد إيقافه، ثم انقر على "حذف". في الجزء العلوي: يؤدي هذا إلى تحديد موعد المشروع للحذف
الخطوات التالية
اطّلع على بعض هذه الدروس التطبيقية المتشابهة حول الترميز...