1. نظرة عامة
هل أنت مستعد لتعزيز أمان وخصوصية أحمال العمل التي تستخدم وحدات معالجة الرسومات؟ سيرشدك هذا الدرس التطبيقي حول الترميز إلى إمكانات مساحة موثوقة، وهي خدمة تهدف إلى توفير عزل قوي للمشغّل ودعم أدوات التسريع لأحمال عمل الذكاء الاصطناعي/تعلُّم الآلة الحسّاسة.
أصبحت حماية البيانات والنماذج والمفاتيح القيّمة أكثر أهمية من أي وقت مضى. تقدّم Trusted Space حلاً من خلال ضمان تشغيل أحمال العمل في بيئة آمنة وموثوقة لا يمكن حتى لمشغّل أحمال العمل الوصول إليها.
في ما يلي الميزات التي يوفّرها تطبيق "المساحة الآمنة":
- الخصوصية والأمان المحسّنان: توفّر "المساحة الموثوقة" بيئة تنفيذ موثوقة تظل فيها أصولك الحسّاسة (مثل النماذج والبيانات والمفاتيح القيّمة) محمية، مع إثبات التشفير.
- عزل المشغّل: يمكنك التخلص من المخاوف بشأن تداخل المشغّل. باستخدام Trusted Space، لا يمكن حتى لمشغّلي أحمال العمل الوصول إلى البيانات، ما يمنعهم من استخدام SSH أو الوصول إلى البيانات أو تثبيت البرامج أو التلاعب بالرمز البرمجي.
- التوافق مع أدوات التسريع: تم تصميم Trusted Space ليعمل بسلاسة مع مجموعة كبيرة من أدوات تسريع الأجهزة، بما في ذلك وحدات معالجة الرسومات مثل H100 وA100 وT4 وL4. ويضمن ذلك تشغيل تطبيقات الذكاء الاصطناعي/تعلُّم الآلة المهمة لتحقيق الأداء بسلاسة.
ما ستتعلمه
- التعرّف على العروض الرئيسية في Trusted Space
- تعرَّف على كيفية نشر بيئة Trusted Space وضبطها لتأمين الأصول القيّمة لأحمال عمل الذكاء الاصطناعي/تعلُّم الآلة.
المتطلبات
- مشروع على Google Cloud Platform
- معرفة أساسية بخدمة Google Compute Engine والمسرّعات
- معرفة أساسية بحسابات الخدمة وإدارة المفاتيح واتحاد هوية عبء العمل وشروط السمات
- معرفة أساسية بالحاويات ومستودع Artifact
حماية طلبات إنشاء الرموز البرمجية الحساسة باستخدام Primus Company
في هذا الدرس العملي، سنضع أنفسنا مكان شركة Primus التي تولي الأولوية لخصوصية بيانات موظفيها وأمانها. تريد شركة Primus نشر نموذج لإنشاء الرموز البرمجية لمساعدة المطوّرين في مهام الترميز. ومع ذلك، يشعرون بالقلق بشأن حماية سرية الطلبات التي يرسلها موظفوهم، لأنّ هذه الطلبات غالبًا ما تحتوي على مقتطفات حساسة من الرموز أو تفاصيل المشاريع الداخلية أو الخوارزميات الخاصة.
لماذا لا تثق شركة Primus في المشغّل؟
تعمل شركة Primus Corp في سوق شديد التنافسية. يحتوي قاعدة بيانات الرموز البرمجية على ملكية فكرية قيّمة، بما في ذلك الخوارزميات الخاصة ومقتطفات الرموز الحساسة التي توفّر ميزة تنافسية. ويساورهم القلق بشأن إمكانية التجسس على الشركات من قِبل مشغّلي أحمال العمل. بالإضافة إلى ذلك، قد تتضمّن طلبات الموظفين أجزاءً سرية من الرمز البرمجي يجب حمايتها، وهو ما تريده شركة Primus Corp.
لمعالجة هذه المشكلة، ستستفيد شركة Primus Corp من Trusted Space لعزل خادم الاستدلال الذي يشغّل النموذج لإنشاء الرموز البرمجية. وإليك كيفية تنفيذ ذلك:
- تشفير الطلبات: قبل إرسال طلب إلى خادم الاستنتاج، سيقوم كل موظف بتشفيره باستخدام مفتاح KMS تديره شركة Primus Corp في Google Cloud. يضمن ذلك ألا يتمكن من فك تشفيرها والوصول إلى الطلب بنص عادي سوى بيئة "المساحة الآمنة" التي يتوفّر فيها مفتاح فك التشفير المقابل. في سيناريو واقعي، يمكن التعامل مع التشفير من جهة العميل باستخدام المكتبات المتاحة (مثل tink). في إطار هذا الدرس العملي، سنستخدم تطبيق العميل النموذجي هذا مع التشفير بطبقتَين.
- عزل المشغّل: لن يتمكّن من الوصول إلى المفتاح المستخدَم في التشفير إلا خادم الاستدلال الذي يعمل ضمن بيئة "مساحة موثوقة"، وسيتمكّن من فك تشفير الطلب في بيئة موثوقة. ستتم حماية إمكانية الوصول إلى مفتاح التشفير من خلال مجموعة Workload Identity Pool. بفضل ضمانات العزل التي توفّرها "مساحة موثوقة"، لا يمكن حتى لمشغّل عبء العمل الوصول إلى المفتاح المستخدَم للتشفير والمحتوى الذي تم فك تشفيره.
- الاستدلال الآمن باستخدام أدوات التسريع: سيتم تشغيل خادم الاستدلال على جهاز افتراضي محمي (كجزء من إعداد المساحة الموثوقة)، ما يضمن عدم تعرّض مثيل عبء العمل للبرامج الضارة أو أدوات الوصول إلى الجذر على مستوى التشغيل أو النواة. يفكّ هذا الخادم تشفير الطلب داخل بيئة Trusted Space، وينفّذ الاستنتاج باستخدام نموذج إنشاء الرموز، ثم يعرض الرمز الذي تم إنشاؤه للموظف.
2. إعداد "موارد السحابة"
قبل البدء
- استنسِخ هذا المستودع باستخدام الأمر أدناه للحصول على النصوص البرمجية المطلوبة التي يتم استخدامها كجزء من هذا الدرس العملي.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- غيِّر الدليل الخاص بهذا الدرس البرمجي.
cd confidential-space/codelabs/trusted_space_codelab/scripts
- تأكَّد من ضبط متغيرات بيئة المشروع المطلوبة كما هو موضّح أدناه. لمزيد من المعلومات حول إعداد مشروع على Google Cloud Platform، يُرجى الاطّلاع على هذا الدرس العملي. يمكنك الرجوع إلى هذا الرابط للحصول على تفاصيل حول كيفية استرداد رقم تعريف المشروع وكيفية اختلافه عن اسم المشروع ورقمه.
export PRIMUS_PROJECT_ID=<GCP project id of Primus>
- فعِّل الفوترة لمشاريعك.
- فعِّل واجهة برمجة التطبيقات Confidential Computing API وواجهات برمجة التطبيقات التالية لكلا المشروعَين.
gcloud services enable \
cloudapis.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudkms.googleapis.com \
cloudshell.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
iam.googleapis.com \
confidentialcomputing.googleapis.com
- عيِّن قيمًا للمتغيرات الخاصة بأسماء الموارد المحدّدة أعلاه باستخدام الأمر التالي. تتيح لك هذه المتغيرات تخصيص أسماء الموارد حسب الحاجة واستخدام الموارد الحالية أيضًا إذا تم إنشاؤها من قبل. (مثلاً
export PRIMUS_SERVICE_ACCOUNT='my-service-account')
- يمكنك ضبط المتغيّرات التالية باستخدام أسماء موارد السحابة الإلكترونية الحالية في مشروع Primus. في حال ضبط المتغيّر، سيتم استخدام مرجع السحابة الإلكترونية الحالي المقابل من مشروع Primus. إذا لم يتم ضبط المتغيّر، سيتم إنشاء اسم مورد السحابة الإلكترونية من اسم المشروع وسيتم إنشاء مورد سحابة إلكترونية جديد بهذا الاسم. في ما يلي المتغيرات المتاحة لأسماء الموارد:
| المنطقة التي سيتم إنشاء الموارد الإقليمية ضمنها لشركة Primus |
| الموقع الجغرافي الذي سيتم فيه إنشاء الموارد لشركة Primus |
| النطاق الذي سيتم إنشاء الموارد الخاصة بالنطاق ضمنه لشركة Primus |
| مجموعة معلومات تعريفية في شركة Primus لحماية موارد السحابة الإلكترونية |
| موفِّر مجموعة معرّفات أعباء العمل لشركة Primus الذي يتضمّن شرط التفويض الذي سيتم استخدامه للرموز المميزة الموقَّعة من خدمة "التحقّق من صحة المصادقة". |
| حساب خدمة شركة Primus الذي يستخدمه |
| يُستخدَم مفتاح KMS لتشفير الطلبات التي يقدّمها موظفو شركة Primus. |
| سلسلة مفاتيح KMS التي سيتم استخدامها لإنشاء مفتاح التشفير |
| إصدار مفتاح KMS لمفتاح التشفير |
| مستودع العناصر حيث سيتم إرسال صورة Docker الخاصة بعبء العمل |
| المنطقة التي يقع فيها مستودع العناصر، والتي ستتضمّن صورة Docker المنشورة الخاصة بعبء العمل |
| اسم الجهاز الظاهري لوحدة العمل. |
| اسم صورة Docker الخاصة بوحدة العمل |
| علامة صورة حاوية وحدة العمل |
| حساب الخدمة الذي لديه إذن بالوصول إلى Confidential VM الذي يشغّل عبء العمل |
| اسم الجهاز الافتراضي للعميل الذي سيشغّل تطبيق العميل لخادم الاستنتاج. |
| حساب الخدمة المستخدَم من قِبل |
- ستحتاج إلى أدوار "مشرف مساحة التخزين" و"مشرف Artifact Registry" و"مشرف Cloud KMS" و"مشرف حساب الخدمة" و"مشرف Workload Identity Pool في إدارة الهوية وإمكانية الوصول" (IAM) للمشروع
$PRIMUS_PROJECT_ID. يمكنك الرجوع إلى هذا الدليل لمعرفة كيفية منح أدوار "إدارة الهوية وإمكانية الوصول" باستخدام وحدة تحكّم Google Cloud Platform. - بالنسبة إلى
$PRIMUS_PROJECT_ID، شغِّل البرنامج النصي التالي لضبط أسماء المتغيرات المتبقية على قيم استنادًا إلى رقم تعريف مشروعك لأسماء الموارد.
source config_env.sh
إعداد موارد شركة Primus
كجزء من هذه الخطوة، عليك إعداد موارد السحابة الإلكترونية المطلوبة لـ Primus. شغِّل النص البرمجي التالي لإعداد الموارد الخاصة بـ Primus. سيتم إنشاء الموارد التالية كجزء من تنفيذ النص البرمجي:
- مفتاح التشفير (
$PRIMUS_ENC_KEY) وسلسلة المفاتيح ($PRIMUS_ENC_KEYRING) في KMS لتشفير ملف بيانات العملاء الخاص بشركة Primus - مجموعة معلومات تعريفية (
$PRIMUS_WORKLOAD_IDENTITY_POOL) للتحقّق من صحة المطالبات استنادًا إلى شروط السمات التي تم ضبطها ضمن الموفِّر - يملك حساب الخدمة (
$PRIMUS_SERVICE_ACCOUNT) المرتبط بمجموعة تعريفات عبء العمل المذكورة أعلاه ($PRIMUS_WORKLOAD_IDENTITY_POOL) إذنًا بفك تشفير البيانات باستخدام مفتاح KMS (باستخدام دورroles/cloudkms.cryptoKeyDecrypter)، وتشفير البيانات باستخدام مفتاح KMS (باستخدام دورroles/cloudkms.cryptoKeyEncrypter)، وقراءة البيانات من حزمة التخزين السحابي (باستخدام دورobjectViewer)، وربط حساب الخدمة بمجموعة تعريفات عبء العمل (باستخدامroles/iam.workloadIdentityUser).
./setup_primus_resources.sh
3- إنشاء حمل عمل
إنشاء حساب خدمة خاص بعبء العمل
الآن، عليك إنشاء حساب خدمة لعبء العمل مع الأدوار والأذونات المطلوبة. نفِّذ النص البرمجي التالي لإنشاء حساب خدمة خاص بعبء العمل في مشروع Primus. سيتم استخدام حساب الخدمة هذا من قِبل الجهاز الظاهري الذي يشغّل خادم الاستدلال.
سيحصل حساب الخدمة الخاص بعبء العمل هذا ($WORKLOAD_SERVICEACCOUNT) على الأدوار التالية:
confidentialcomputing.workloadUserللحصول على رمز مميز للتصديقlogging.logWriterلكتابة السجلّات في Cloud Logging
./create_workload_service_account.sh
إنشاء حمل عمل
كجزء من هذه الخطوة، ستنشئ صورة Docker لعبء العمل. سيتم إنشاء عبء العمل من قِبل شركة Primus. حِمل العمل المستخدَم في هذا الدرس التطبيقي حول الترميز هو رمز Python البرمجي الذي يستخدم نموذج CodeGemma من حزمة GCS المتاحة للجميع (في Vertex Model Garden). سيحمّل عبء العمل نموذج codegemma ويشغّل خادم الاستدلال الذي سيتولّى معالجة طلبات إنشاء الرموز البرمجية من مطوّري Primus.
عند طلب إنشاء الرمز، سيتلقّى Workload مفتاح تشفير البيانات (DEK) المغلف مع طلب مشفّر. بعد ذلك، سيُجري عبء العمل طلبًا إلى واجهة برمجة تطبيقات KMS لفك تشفير مفتاح تشفير البيانات، ثم سيفك تشفير الطلب باستخدام مفتاح تشفير البيانات هذا. ستتم حماية مفاتيح التشفير (لمفتاح تشفير البيانات) من خلال مجموعة معرّفات أعباء العمل، وسيتم منح إذن الوصول إلى أعباء العمل التي تستوفي شروط السمة. يتم وصف شروط السمات هذه بمزيد من التفصيل في القسم التالي حول تفويض عبء العمل. بعد أن يتلقّى خادم الاستنتاج الطلب الذي تم فك تشفيره، سينشئ الرمز باستخدام نموذج تم تحميله وسيعيد الردّ.
نفِّذ البرنامج النصي التالي لإنشاء عبء عمل يتم فيه تنفيذ الخطوات التالية:
- أنشئ مستودع Artifact Registry(
$PRIMUS_ARTIFACT_REGISTRY) مملوكًا لشركة Primus. - عدِّل رمز عبء العمل باستخدام أسماء الموارد المطلوبة.
- أنشئ عبء عمل خادم الاستدلال وأنشئ ملف Dockerfile لإنشاء صورة Docker لرمز عبء العمل. إليك ملف Dockerfile المستخدَم في هذا الدرس التطبيقي حول الترميز.
- أنشئ صورة Docker وانشرها في Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) المملوكة لشركة Primus. - امنح
$WORKLOAD_SERVICEACCOUNTإذن القراءة لـ$PRIMUS_ARTIFACT_REGISTRY. هذا الإذن مطلوب لكي يسحب حاوية عبء العمل صورة Docker لعبء العمل من Artifact Registry.
./create_workload.sh
للعلم، إليك طريقة generate() الخاصة بعبء العمل الذي يتم إنشاؤه واستخدامه في هذا الدرس التطبيقي حول الترميز (يمكنك العثور على رمز عبء العمل الكامل هنا).
def generate():
try:
data = request.get_json()
ciphertext = base64.b64decode(data["ciphertext"])
wrapped_dek = base64.b64decode(data["wrapped_dek"])
unwrapped_dek_response = kms_client.decrypt(
request={"name": key_name, "ciphertext": wrapped_dek}
)
unwrapped_dek = unwrapped_dek_response.plaintext
f = Fernet(unwrapped_dek)
plaintext = f.decrypt(ciphertext)
prompt = plaintext.decode("utf-8")
tokens = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(**tokens, max_new_tokens=128)
generated_code = tokenizer.decode(outputs[0])
generated_code_bytes = generated_code.encode("utf-8")
response = f.encrypt(generated_code_bytes)
ciphertext_base64 = base64.b64encode(response).decode("utf-8")
response = {"generated_code_ciphertext": ciphertext_base64}
return jsonify(response)
except (ValueError, TypeError, KeyError) as e:
return jsonify({"error": str(e)}), 500
4. منح الإذن بتشغيل حمل العمل
منح الإذن لحمل العمل
تريد شركة Primus السماح لأحمال العمل بالوصول إلى مفتاح KMS المستخدَم لتشفير الطلبات استنادًا إلى سمات الموارد التالية:
- المحتوى: الرمز الذي تم التحقّق منه
- المكان: بيئة آمنة
- المشغّل: مشغّل موثوق به
تستخدم Primus اتحاد هوية عبء العمل لفرض سياسة وصول استنادًا إلى هذه المتطلبات. تتيح لك ميزة "اتحاد موفّري هويات المستخدمين" تحديد شروط السمات. تفرض هذه الشروط قيودًا على الهويات التي يمكنها المصادقة باستخدام مجموعة معرّفات أعباء العمل (WIP). يمكنك إضافة خدمة Attestation Verifier إلى WIP بصفتها موفِّر مجموعة معلومات تعريفية لعرض القياسات وتنفيذ السياسة.
تم إنشاء مجموعة المعلومات التعريفية مسبقًا كجزء من خطوة إعداد موارد السحابة الإلكترونية. سينشئ Primus الآن موفِّرًا جديدًا لمجموعة معلومات تعريفية للمعالجة باستخدام OIDC. يمنح --attribute-condition المحدّد إذن الوصول إلى حاوية عبء العمل. يتطلّب ذلك ما يلي:
- التعديل: تم تحميل أحدث إصدار من
$WORKLOAD_IMAGE_NAMEإلى مستودع$PRIMUS_ARTIFACT_REPOSITORY. - المكان: تعمل بيئة التنفيذ الموثوقة في "مساحة للبيانات السرية" على صورة الجهاز الافتراضي المتوافقة بالكامل مع "مساحة للبيانات السرية".
- المستخدم: حساب خدمة Primus
$WORKLOAD_SERVICE_ACCOUNT
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 iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
--location="global" \
--project="$PRIMUS_PROJECT_ID" \
--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 == 'HARDENED_SHIELDED' && assertion.hwmodel == 'GCP_SHIELDED_VM' &&
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@$PRIMUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
يتحقّق الأمر أعلاه من أنّ عبء العمل يتم تشغيله في بيئة مساحة موثوق بها من خلال التأكّد من ضبط hwmodel على "GCP_SHIELDED_VM" وضبط swname على "HARDENED_SHIELDED". بالإضافة إلى ذلك، يتضمّن تأكيدات خاصة بأحمال العمل، مثل image_digest وimage_reference، لتعزيز الأمان وضمان سلامة حمل العمل قيد التشغيل.
تشغيل حجم المعالجة
في إطار هذه الخطوة، سنشغّل عبء العمل في الجهاز الافتراضي "مساحة موثوقة" الذي سيتم ربط أداة تسريع به. يتم تمرير وسيطات TEE المطلوبة باستخدام علامة البيانات الوصفية. يتم تمرير وسيطات حاوية عبء العمل باستخدام جزء "tee-cmd" من العلامة. لتزويد الجهاز الظاهري الخاص بعبء العمل بوحدة معالجة رسومات Nvidia Tesla T4، سنستخدم العلامة --accelerator=type=nvidia-tesla-t4,count=1. سيؤدي ذلك إلى ربط وحدة معالجة رسومات واحدة بالجهاز الظاهري. يجب أيضًا تضمين tee-install-gpu-driver=true في علامات البيانات الوصفية لتفعيل تثبيت برنامج تشغيل وحدة معالجة الرسومات المناسب.
gcloud compute instances create ${WORKLOAD_VM} \
--accelerator=type=nvidia-tesla-t4,count=1 \
--machine-type=n1-standard-16 \
--shielded-secure-boot \
--image-project=conf-space-images-preview \
--image=confidential-space-0-gpupreview-796705b \
--zone=${PRIMUS_PROJECT_ZONE} \
--maintenance-policy=TERMINATE \
--boot-disk-size=40 \
--scopes=cloud-platform \
--service-account=${WORKLOAD_SERVICEACCOUNT}@${PRIMUS_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-install-gpu-driver=true~tee-restart-policy=Never"
تنفيذ طلب استنتاج
بعد تشغيل خادم الاستدلال الخاص بعبء العمل بنجاح، يمكن لموظفي شركة Primus الآن إرسال طلبات إنشاء الرموز إلى خادم الاستدلال.
في هذا الدرس التطبيقي حول الترميز، سنستخدم النص البرمجي التالي لإعداد تطبيق العميل الذي سيتفاعل مع خادم الاستدلال. شغِّل هذا النص البرمجي لإعداد الجهاز الظاهري للعميل.
./setup_client.sh
توضّح الخطوات التالية كيفية استخدام SSH للدخول إلى الجهاز الظاهري للعميل وتنفيذ نموذج لتطبيق العميل ضمن بيئة Python الظاهرية. يستخدم هذا التطبيق النموذجي التشفير المزدوج مع مكتبة Fernet، ولكن يُرجى العِلم أنّه يمكن تعديل مكتبات التشفير المحدّدة لتناسب حالات الاستخدام المختلفة.
gcloud compute ssh ${CLIENT_VM} --zone=${PRIMUS_PROJECT_ZONE}
نفِّذ الأوامر التالية لتفعيل البيئة الافتراضية للغة Python في جهاز VM الخاص بالعميل وتنفيذ تطبيق العميل.
source venv/bin/activate
python3 inference_client.py
ستعرض نتائج نموذج تطبيق العميل هذا طلبات التشفير والنص العادي، بالإضافة إلى الردود المشفرة وغير المشفرة المقابلة لها.
5- تنظيف
في ما يلي البرنامج النصي الذي يمكن استخدامه لتنظيف الموارد التي أنشأناها كجزء من هذا الدرس التطبيقي حول الترميز. وكجزء من عملية التنظيف هذه، سيتم حذف الموارد التالية:
- حساب خدمة Primus (
$PRIMUS_SERVICEACCOUNT) - مفتاح تشفير Primus (
$PRIMUS_ENC_KEY) - مستودع العناصر في Primus (
$PRIMUS_ARTIFACT_REPOSITORY) - مجموعة معلومات تعريفية للمعالجة في Primus (
$PRIMUS_WORKLOAD_IDENTITY_POOL) مع موفِّرها - حساب خدمة عبء العمل في Primus (
$WORKLOAD_SERVICEACCOUNT) - الآلة الافتراضية الخاصة بعبء العمل (
$WORKLOAD_VM) والآلة الافتراضية الخاصة بالعميل ($CLIENT_VM)
./cleanup.sh
إذا انتهيت من استكشاف المشروع، يُرجى التفكير في حذفه.
- انتقِل إلى وحدة تحكّم Cloud Platform.
- اختَر المشروع الذي تريد إيقافه، ثم انقر على "حذف" في أعلى الصفحة: يؤدي ذلك إلى تحديد موعد لحذف المشروع.