1. مقدمة
في هذا الدرس التطبيقي حول الترميز، ستنشئ تطبيق Hackathon Judge على Google Kubernetes Engine (GKE) وتستخدم Kubernetes-sigs Agent Sandbox لتشغيل أحمال العمل المستندة إلى الوكلاء بأمان.
تم تصميم المنصة لأتمتة عملية مراجعة مشاريع الهاكاثون واختبارها وتقييمها باستخدام وكلاء النماذج اللغوية الكبيرة. بما أنّ التحكيم يتطلّب تقييم عمليات إرسال الرموز البرمجية من المشاركين غير الموثوق بهم، فإنّ وضع الحماية الآمن للتنفيذ ضروري لمنع إدخال الرموز البرمجية أو تصعيد الأذونات أو إساءة استخدام الموارد.
الإجراءات التي ستنفذّها
- توفير خدمات Google Cloud المستهدَفة وإنشاء واجهات برمجة تطبيقات مستهدَفة
- ابدأ إعداد GKE Autopilot وثبِّت تعريفات موارد Agent Sandbox المخصّصة وإعدادات المجموعات وSandbox Router.
- تفعيل Sandbox Gateway وSandbox Claim Template وSandbox WarmPool
- نشر واجهة REST Backend API ووكيل ADK Judging worker وواجهة مستخدم React Frontend.
- ربط التوجيه الخارجي المتوازن الحمل والوصول إلى المنصة لتشغيل مهام سير عمل التحكيم الآمنة في وضع الحماية
المتطلبات
- متصفّح ويب، مثل Chrome
- مشروع Google Cloud تم تفعيل الفوترة فيه
يجب أن تكون تكلفة الموارد التي تم إنشاؤها في هذا الدرس التطبيقي أقل من 5 دولارات أمريكية في إجمالي رسوم وقت التشغيل.
2. المشكلة: تقييم الرمز غير الموثوق به بشكل آمن
فعاليات الهاكاثون هي فعاليات ابتكار سريعة الوتيرة يقدّم فيها المشاركون مشاريعهم، بما في ذلك غالبًا الرموز المصدرية، ليتم تقييمها. تستغرق عملية تقييم هذه الطلبات يدويًا وقتًا طويلاً وتتطلّب الكثير من الموارد. إنّ استخدام وكلاء الذكاء الاصطناعي لأتمتة عملية التصحيح هو حلّ واعد، ولكنّه يطرح تحديًا أمنيًا كبيرًا: كيف يمكن تشغيل الرموز التي يقدّمها المشاركون بأمان، والتي قد تكون مليئة بالأخطاء أو ضارة أو تتطلّب الكثير من الموارد؟
يؤدي تشغيل رموز برمجية غير موثوق بها مباشرةً على البنية الأساسية إلى تعريضك لمخاطر مثل:
- إدخال الرموز البرمجية: قد تحاول البرامج النصية الضارة الوصول إلى البيانات الحسّاسة أو تعديلها.
- تصعيد الامتيازات: قد يحاول الرمز البرمجي الحصول على إذن وصول غير مصرَّح به إلى أنظمة أخرى أو موارد شبكة.
- إساءة استخدام الموارد: يمكن أن يؤدي الرمز البرمجي المكتوب بشكل سيئ أو هجمات رفض الخدمة إلى استهلاك مفرط لوحدة المعالجة المركزية أو الذاكرة أو عرض النطاق الترددي للشبكة، ما يؤثر في العمليات الأخرى.
لأتمتة عملية التحكيم في هاكاثون باستخدام الذكاء الاصطناعي، نحتاج إلى طريقة لتنفيذ الرمز الذي تم إرساله في بيئة معزولة تمامًا عن بقية نظامنا وعن المشاركات الأخرى.
3- الحل: GKE Agent Sandbox
تم تصميم ميزة GKE Agent Sandbox لمواجهة هذا التحدي تحديدًا. تساعد هذه الميزة في إدارة أحمال العمل المعزولة وذات الحالة والنسخة الواحدة على GKE، وهي محسّنة لحالات الاستخدام، مثل أوقات تشغيل وكلاء الذكاء الاصطناعي التي يجب فيها تنفيذ الرموز غير الموثوق بها بشكل آمن وفعّال.
تشمل المزايا الرئيسية لـ "بيئة اختبار الوكيل" ما يلي:
- العزل على مستوى النواة: يوفّر عزلًا قويًا على مستوى النواة للرموز غير الموثوق بها باستخدام تكنولوجيات مثل gVisor، ما يمنع الرموز من الوصول إلى النظام المضيف أو الحاويات الأخرى.
- توفير البيئات في أقل من ثانية: يتيح توفير بيئات وضع الحماية بسرعة (عادةً أقل من ثانية واحدة)، وهو أمر بالغ الأهمية لتقييم الرموز البرمجية عند الطلب.
- إمكانية التوسيع المتوافقة مع السحابة الإلكترونية: تستفيد هذه الميزة من إمكانات Kubernetes والبنية الأساسية المُدارة في GKE.
باستخدام Agent Sandbox، يمكننا إنشاء بيئات معزولة عند الطلب لكل مشاركة في هاكاثون. يمكن بعد ذلك أن يطلب وكيل التقييم المستند إلى الذكاء الاصطناعي من "وضع الحماية للوكيل" إجراء اختبارات أو تجميع الرموز أو تنفيذ خطوات تقييم أخرى ضمن وضع الحماية الآمن هذا بدون تعريض سلامة المنصة بشكل عام للخطر. يوفّر ذلك طريقة قابلة للتوسّع وآمنة وفعّالة لأتمتة عملية تقييم الهاكاثون.
4. قبل البدء
اختيار مشروع أو إنشاؤه
تأكَّد من أنّك تعمل ضمن مشروع Google Cloud المقصود:
- اختيار مشروع أو إنشاؤه: اختَر مشروعًا حاليًا أو أنشِئ مشروعًا جديدًا في Google Cloud Console.
- ضبط المشروع النشط: سجِّل رقم تعريف المشروع لإعداد Cloud Shell لاستخدامه:
gcloud config set project [YOUR_PROJECT_ID]
تأكيد الفوترة
تأكَّد من تفعيل الفوترة لمشروعك على Google Cloud. يمكنك الاطّلاع على مزيد من المعلومات حول كيفية تنفيذ هذا الإجراء من خلال اتّباع هذا الدليل.
بدء Cloud Shell
انقر على الزر أدناه لبدء Google Cloud Shell، الذي يأتي مُعدًا مسبقًا بأدوات سطر الأوامر المطلوبة للمطوّرين والسحابة الإلكترونية.
تفعيل واجهات برمجة التطبيقات
نفِّذ الأمر التالي في Cloud Shell لتفعيل جميع واجهات برمجة التطبيقات المستهدَفة في Google Cloud المطلوبة لتشغيل المنصة:
gcloud services enable \
container.googleapis.com \
artifactregistry.googleapis.com \
cloudbuild.googleapis.com \
pubsub.googleapis.com \
aiplatform.googleapis.com \
cloudresourcemanager.googleapis.com \
iam.googleapis.com \
bigquery.googleapis.com \
bigqueryconnection.googleapis.com
سبب تفعيل واجهات برمجة التطبيقات هذه: يتم إيقاف خدمات Google Cloud تلقائيًا لمنع الوصول غير المصرّح به والرسوم غير المصرّح بها. نفعّل واجهات برمجة التطبيقات المحدّدة هذه لتفعيل تنسيق الحاويات (GKE)، وتخزين الحاويات بشكل آمن (Artifact Registry)، وتغليف الإصدارات بدون خادم (Cloud Build)، وقوائم انتظار الرسائل الموثوقة (Pub/Sub)، وخدمات نماذج الذكاء الاصطناعي (Vertex AI)، وإعداد المشاريع (Cloud Resource Manager وIAM)، وتحليلات البيانات بدون خادم (BigQuery)، وعمليات الربط المستندة إلى الذكاء الاصطناعي على مستوى قاعدة البيانات (BigQuery Connection).
5- إعداد البنية الأساسية
في هذه الخطوة، ستستنسخ مستودع الرموز البرمجية وتنفّذ نص التهيئة البرمجي التلقائي لنشر بنية السحابة الإلكترونية المستهدَفة ومكوّنات المجموعة الأساسية.
إنشاء نسخة طبق الأصل من المستودع
استنسِخ المستودع الذي يحتوي على جميع خدمات التطبيق ونصوص الإعداد البرمجية وبيانات بيان Kubernetes:
git clone --depth 1 --filter=blob:none --sparse https://github.com/GoogleCloudPlatform/devrel-demos.git
cd devrel-demos
git sparse-checkout set codelabs/ai-toolkit-lab-2/hackathon-judge
cd codelabs/ai-toolkit-lab-2/hackathon-judge
تشغيل نص النشر البرمجي
يتم أتمتة عملية الإعداد الأساسية لموارد السحابة ونماذج قواعد البيانات وسياسات مجموعة Kubernetes الأساسية باستخدام النص البرمجي deploy.sh.
شغِّل النص البرمجي:
./deploy.sh
اتّبِع الطلبات التي تظهر في واجهة الأوامر التفاعلية لتوفير إعدادات مثل رقم تعريف المشروع النشط والمنطقة المستهدَفة. ينشئ النص البرمجي تلقائيًا إعدادات .env محلية، ويربط الموارد، ويجمع صور الحاويات، ويسجّل البنية الأساسية لخط الأساس في GKE.
في ما يلي العمليات المستهدَفة التي ينفّذها النص البرمجي:
1. إعدادات ضبط البيئة
ينشئ النص البرمجي ملف إعداد .env لتخزين مَعلمات متغيّرات GKE وPub/Sub وBigQuery والمشروع. يؤدي الحصول على هذا الملف بشكل ديناميكي إلى ملء جميع تعريفات بيان Kubernetes اللاحقة.
سبب إعداد ملف البيئة هذا: يعمل الملف .env على مركزية مَعلمات الإعداد، ما يضمن أنّ بيانات GKE التي نطبّقها يدويًا في الخطوات اللاحقة تستخدم إعدادات إقليمية وأسماء مشاريع وموارد متطابقة، مع فصل إعدادات البيئة تمامًا عن الرمز المصدر.
2. Google Cloud CLI وإعداد المشروع المستهدَف
يتأكّد النص البرمجي من تثبيت الأدوات المساعدة gcloud وbq وkubectl وenvsubst، ويتحقّق من حالة المصادقة، ويقفل استهدافات الإعداد النشطة على مشروع Google Cloud النشط.
سبب استهداف المشروع النشط: يمنع ضبط المشروع المستهدف النشط أوامر واجهة سطر الأوامر من التأثير في المشاريع الأخرى في حسابك، ويُجري عمليات التحقّق من صحة بيانات الاعتماد قبل النشر، ما يضمن عدم تعذُّر تنفيذ أوامر الإعداد في منتصف عملية النشر بسبب بيانات الاعتماد غير الصالحة.
3- تفعيل واجهات برمجة التطبيقات المستهدَفة على Google Cloud
ينفّذ النص البرمجي عملية تحقّق متكرّرة للتأكّد من تفعيل واجهات برمجة التطبيقات المستهدَفة لخدمة Google Cloud (مثل GKE وArtifact Registry وCloud Build وPub/Sub وVertex AI وBigQuery وIAM).
سبب تفعيلنا لواجهات Google Cloud API: يجب تفعيل الخدمات السحابية المُدارة قبل أن يصبح من الممكن الوصول إلى نقاط النهاية أو إنشاء الموارد. يؤدي تفعيلها في البداية إلى إعداد بوابة واجهة برمجة التطبيقات الإقليمية في Google Cloud Platform للتعامل مع أوامر توفير الموارد اللاحقة.
4. توفير مستودع Docker في Artifact Registry
يوفّر النص البرمجي مستودع حاويات Docker باسم hackathon-judge-repo في الموقع الجغرافي المستهدَف المحدّد.
سبب إنشاء مستودع Artifact Registry: تتطلّب مجموعات GKE إمكانية الوصول الآمن إلى سجلات الحاويات الخاصة في الشبكة الإقليمية نفسها لسحب صور التطبيقات بسرعة. توفّر خدمة Artifact Registry مضيفًا آمنًا وخاصًا لفهرسة صور حاويات Docker وفحصها وتخزينها.
5- توفير مجموعة GKE Autopilot
يوفّر النص البرمجي مجموعة في وضع "التوجيه التلقائي" من Google Kubernetes Engine (GKE) باسم hackathon-judge-cluster.
سبب نشر مجموعة GKE Autopilot: يدير GKE Autopilot عمليات توفير العُقد وتحجيمها ورصد سلامتها وترقيات أمان نظام التشغيل المضيف تلقائيًا. توفّر هذه المنصة حاويات جاهزة للاستخدام في بيئة الإنتاج من أجل تنسيق خدماتنا الدائمة، كما أنّها تحدّد بشكل ديناميكي جداول زمنية لبيئات وضع الحماية الآمنة للمنفّذين عند الطلب.
6. إعداد مواضيع واشتراكات Pub/Sub
يوفّر النص البرمجي مواضيع الرسائل (judging-tasks وjudging-results) بالإضافة إلى اشتراكات المشغّل وواجهة برمجة التطبيقات المقابلة لها.
سبب نشر مواضيع واشتراكات Pub/Sub: إنّ تقييم عمليات إرسال الرموز البرمجية يستغرق وقتًا طويلاً ويتطلّب الكثير من الموارد. يؤدي استخدام بنية قائمة انتظار الرسائل إلى فصل واجهة برمجة التطبيقات المتزامنة التي تواجه المستخدم عن عُقد العامل. يرسل الخلفية لواجهة برمجة التطبيقات المهام إلى الموضوع judging-tasks، وتجلب برامج الوكيل المنفِّذة المهام عند توفّرها، ما يمنع حظر واجهة برمجة التطبيقات ويوفر إمكانات إعادة المحاولة التلقائية.
7. ضبط مجموعات البيانات والجداول وعمليات الربط بالذكاء الاصطناعي في BigQuery
ينشئ النص البرمجي مجموعة البيانات hackathon_judge، ويطبّق مخططات قاعدة بيانات SQL البنيوية، ويحمّل سجلّات أولية، ويمنح أدوار الذكاء الاصطناعي والتخزين المطلوبة لحساب خدمة ربط BigQuery ML.
8. تشغيل عمليات إنشاء الحاويات باستخدام Cloud Build
يؤدي النص البرمجي إلى تفعيل تعريف cloudbuild.yaml لتجميع واجهة مستخدم React وخادم Go REST وعامل Python ADK وFastAPI sandbox، وتعبئتها في صور حاويات معزولة تم وضع علامة عليها باستخدام SHA لعملية Git في المستودع النشط وحفظها في Artifact Registry.
9. تسجيل تعريفات موارد مخصّصة (CRD) في Agent Sandbox
ينزّل النص البرمجي أحدث تعريفات موارد مخصّصة لـ Agent Sandbox من Kubernetes-sigs (manifest.yaml وextensions.yaml) ويسجّلها لتوسيع نطاق الإمكانات الأساسية في GKE.
سبب تثبيت البنية الأساسية لـ "بيئة الاختبار المعزولة للوكيل": لا تتيح مجموعات Kubernetes العادية إمكانية تخصيص بيئات اختبار معزولة محمية عند الطلب. يؤدي تسجيل تعريفات موارد مخصّصة (CRD) في Agent Sandbox إلى توسيع نطاق لوحة التحكّم في GKE، ما يتيح لـ Kubernetes تنظيم الحاويات الصغيرة الآمنة في وضع الحماية بشكل أصلي باستخدام موارد مخصّصة (مثل SandboxTemplates وSandboxClaims).
10. ضبط مساحات الأسماء وحسابات الخدمة وهوية عبء العمل
يوفّر النص البرمجي مساحة الاسم hackathon-judge، ويسجّل حسابات خدمة Kubernetes (KSA)، ويُنشئ عمليات ربط Workload Identity لمنح وحدات GKE الإذن المستهدف في Google Cloud.
11. نشر جهاز توجيه وضع الحماية
يطبّق النص البرمجي بيان k8s/sandbox_router.yaml، ويبدأ في نشر خدمة Sandbox Router وينتظر إلى أن تصبح حالتها سليمة.
سبب نشر Sandbox Router: إنّ Sandbox Router هي البوابة المركزية الداخلية لمستوى التحكّم. تعرض هذه الخدمة واجهة برمجة تطبيقات بسيطة يستدعيها وكيل عامل التقييم في ADK لطلب الوصول إلى البيئات التجريبية الآمنة أو إتاحتها أو إلغاء إتاحتها، كما تدير عمليات ربط التوجيه وتجرّد عملية تخصيص وحدات Pod على مستوى المجموعة من منطق التطبيق.
6. ضبط إعدادات Agent Sandbox Gateway وClaims وWarmPool
في هذه الخطوة، عليك ضبط إعدادات بوابة شبكة Sandbox المتخصصة يدويًا، وتسجيل نموذج المطالبة في Sandbox، ونشر Sandbox WarmPool لتفعيل وضع الحماية بوقت استجابة فائق السرعة.
متغيّرات البيئة المصدر
قبل تطبيق النماذج التي تتطلّب متغيّرات بيئية، شغِّل النص البرمجي setup-env.sh لتحليل جميع المتغيّرات اللازمة وتصديرها إلى الصدفة:
source ./setup-env.sh
تطبيق Sandbox Gateway
نشِر البوابة التي تم ضبطها خصيصًا لتوجيه الزيارات إلى وضع الحماية:
kubectl apply -f k8s/sandbox-gateway.yaml
سبب نشر Sandbox Gateway: يعمل Sandbox Gateway كوحدة تحكّم آمنة وعالية الأداء في الدخول مخصّصة لتوجيه وضع الحماية فقط. تعزل هذه الشبكة بيئة الاختبار المعزولة، ما يوفّر هدفًا آمنًا ومحليًا يسمح لوكلاء المنفّذ بالتواصل مع بيئات الاختبار المعزولة التي تمّت المطالبة بها بدون عرض نقاط النهاية خارجيًا.
تطبيق نموذج المطالبة في وضع الحماية
استخدِم envsubst لملء تعريف نموذج وضع الحماية المتوفّر بمتغيّرات البيئة النشطة، ثم طبِّقه:
source ./setup-env.sh
envsubst < k8s/sandbox-claim-template.yaml | kubectl apply -f -
سبب نشر "نموذج طلب الوصول إلى Sandbox": يعمل "نموذج طلب الوصول إلى Sandbox" كإعدادات أساسية تحدّد البيئة. تحدّد هذه السمة صورة الحاوية التي سيتم تشغيلها (المضمّنة مسبقًا مع أدوات المطوّرين) ومَعلمات البيئة (رقم تعريف مشروع Google Cloud Platform) والمنافذ وحدود الموارد (استهداف وحدة المعالجة المركزية/الذاكرة). يضبط هذا الخيار GKE لتشغيل مثيلات الحاويات هذه باستخدام gVisor (بيئة تشغيل gvisor)، ما يضمن تشغيل رمز المشارك غير الموثوق به ضمن طبقة إضافية من عزل محاكاة الأجهزة الافتراضية للنواة.
تطبيق Sandbox WarmPool
طبِّق Sandbox WarmPool على أوضاع الحماية التي يتم تشغيلها مسبقًا:
kubectl apply -f k8s/sandbox-warmpool.yaml
تأكَّد من بدء تشغيل مثيلات الاستعداد في مجموعة النسخ الاحتياطية بنجاح:
kubectl get pods -n hackathon-judge -l app=sandbox
سبب نشر Sandbox WarmPool: يؤدي توفير الموارد وجدولتها وجلب الصور وتشغيل وحدات حاوية جديدة عند الطلب إلى زيادة كبيرة في وقت بدء التشغيل (أوقات التشغيل على البارد التي تزيد عن 30 ثانية). تحتفظ ميزة Sandbox WarmPool بمجموعة احتياطية من وحدات Sandbox النشطة التي تمّت تهيئتها مسبقًا (5 نُسخ طبق الأصل تلقائيًا). عندما يطلب وكيل العامل بيئة تقييم، يخصّص Sandbox Router على الفور مجموعة نشطة تم تسخينها مسبقًا، ما يقلّل من تأخيرات بدء التشغيل إلى سرعات أقل من ثانية.
7. نشر مكوّنات التطبيق
بعد تفعيل البنية الأساسية الآمنة لبيئة الاختبار المعزولة بالكامل، عليك الآن نشر واجهة برمجة التطبيقات الخلفية المركزية، وعامل الخلفية، وواجهة الويب React، وعمليات ربط بوابة الدخول.
نشر الخلفية
انشر الخلفية لواجهة REST API الخاصة بأداة التنسيق:
source ./setup-env.sh
envsubst < k8s/backend.yaml | kubectl apply -f -
نشر الوكيل
انشر وكيل عامل التقييم في حزمة تطوير التطبيقات (ADK) باتّباع الخطوات التالية:
source ./setup-env.sh
envsubst < k8s/agent.yaml | kubectl apply -f -
تفعيل الواجهة الأمامية
نشر واجهة مستخدم الويب التفاعلية:
source ./setup-env.sh
envsubst < k8s/frontend.yaml | kubectl apply -f -
ضبط البوابة الخارجية والتوجيه
نشِر عملية الربط بين مسارات HTTP الرئيسية في Gateway وingress وحركة بيانات العملاء الخارجية:
kubectl apply -f k8s/gateway.yaml
سبب تفعيل External Ingress Gateway: يعرض External Gateway خدماتنا باستخدام Kubernetes Gateway API. وهي توفّر عنوان IP عامًا متوازن التحميل وتربط المسارات استنادًا إلى قواعد المسار، ما يؤدي إلى توجيه طلبات واجهة برمجة التطبيقات ضمن /api/* إلى Go Backend، وربط جميع زيارات الويب الأخرى من العملاء (/) بواجهة React الأمامية، وتأمين الوصول إلى المجموعة العامة.
التحقّق من عمليات الطرح
احظر تنفيذ الأوامر وانتظِر إلى أن تصل عمليات نشر الخدمات الأساسية الثلاث إلى حالة طرح سليمة وجاهزة:
kubectl rollout status deployment/backend -n hackathon-judge --timeout=300s
kubectl rollout status deployment/agent -n hackathon-judge --timeout=300s
kubectl rollout status deployment/frontend -n hackathon-judge --timeout=300s
8. التحقّق من التطبيق واستخدامه
الوصول إلى واجهة المستخدم
استرجِع عنوان IP العلني الخارجي لبوابة موازنة الحمل الرئيسية التي تم توفيرها حديثًا:
لمشاهدة حالة التوفير في الوقت الفعلي، شغِّل الأمر مع علامة المراقبة (-w) وانتظِر إلى أن تتم تعبئة عنوان IP عام في الحقل ADDRESS:
kubectl get gateway -n hackathon-judge hackathon-judge-gateway -w
عند توفيرها بنجاح، من المفترض أن تظهر لك نتيجة مشابهة لما يلي:
NAME CLASS ADDRESS PROGRAMMED AGE hackathon-judge-gateway gke-l7 34.120.120.120 True 3m
بعد ظهور عنوان IP عام صالح في العمود ADDRESS وتغيُّر الحالة PROGRAMMED إلى True، اضغط على Ctrl+C لإيقاف المراقبة.
سبب الحصول على حالة البوابة: تعالج Gateway API عمليات الدخول العامة. يؤدي التحقّق من حالة البوابة إلى عرض عنوان IP خارجي عام وموزّع الحمل تخصّصه موازنة الحمل الخارجية العالمية في Google Cloud لمجموعتنا، ما يمثّل العنوان العام لمنصتنا.
افتح عنوان IP العام المخصّص في المتصفّح لتحميل لوحة بيانات "حكم الهاكاثون".
إرسال المهام
- استخدِم واجهة المستخدم الأمامية للانتقال إلى لوحة البيانات، ثم اختَر مهرجان الهاكاثون.

- في أي من المشاريع، يمكنك النقر على
Run Agentلبدء تقييم الوكيل للمشروع بأكمله وفقًا لقواعد التقييم.

مشاهدة فعالية إطلاق "مبادرة حماية الخصوصية"
راقِب وحدات Pod النشطة داخل مساحة الاسم hackathon-judge للاطّلاع على وحدة Pod في وضع الحماية تم طلبها وتوفيرها بشكلٍ ديناميكي لتقييم التنفيذ:
kubectl get pods -n hackathon-judge -w
راجِع سجلّات لوحة وكيل المنفِّذ لمشاهدة منطق التقييم خطوة بخطوة في "حزمة تطوير التطبيقات":
kubectl logs -l app=agent -n hackathon-judge
سبب فحص سجلّات الوكيل: يعرض فحص سجلّات وكيل العامل الخطوات الداخلية التفصيلية لعملية التقييم في الوقت الفعلي. يمكنك تتبُّع عملية جلب وكيل ADK للمهمة، وطلب حاوية وضع الحماية، وتنفيذ أهداف التجميع، وتحليل التقارير باستخدام Gemini، ونشر بطاقات قياس الأداء.
9. (اختياري) طريقة عمل هذه الميزة
بنية Agent Sandbox
على الرغم من أنّ وظائف BigQuery AI رائعة لتقييم عمليات الإرسال المستندة إلى النصوص ومطالبات ملفات README، فإنّ الحكم على مشروع هندسي يتطلّب تجميع الرموز البرمجية وتثبيت مكتبات تابعة لجهات خارجية وتشغيل مجموعات اختبار حقيقية.
يشكّل تنفيذ رمز المستخدم الأولي مخاطر أمنية كبيرة، بما في ذلك اختراق المضيف، واختراق الحاويات، والوصول غير المصرح به إلى الموارد. يقلّل إطار عمل GKE Agent Sandbox من هذه المخاطر من خلال تنظيم أحمال عمل وضع الحماية المعزولة باستخدام المحاكاة الافتراضية gVisor (runsc).
مسار التفاعل مع النظام
يوضّح المخطّط البياني أدناه كيفية تواصل العناصر المختلفة في نظامنا المستند إلى الأحداث أثناء تنفيذ عملية تقييم آمنة في بيئة الاختبار المعزولة:

كيف تعمل الأدوات والمكوّنات المتفاعلة معًا؟
- واجهة مستخدم React الأمامية: تعرض واجهة تفاعلية يضبط فيها المستخدمون نماذج المعايير ويسجّلون الفِرق ويرسلون عناوين URL للمشاريع ويراجعون بطاقات الأداء النهائية للتقييم، بما في ذلك التناقضات في الملفات الكاملة وتعليقات الهندسة.
- Go REST Backend API: تدير نقاط نهاية واجهة برمجة التطبيقات العامة. يخزِّن إعدادات المشاريع في BigQuery ويدفع مهام التحكيم إلى Pub/Sub لفصل مسارات التنفيذ الحسابية الثقيلة.
- Google Pub/Sub: وسيط موجّه نحو الرسائل يحتفظ برسائل المهام بأمان في قائمة الانتظار، وينسّق التواصل بشكل غير متزامن بين واجهة برمجة التطبيقات ومثيلات العامل النشطة.
- عامل Python ADK (وكيل مشرف): عامل يعمل في الخلفية ويسحب المهام من Pub/Sub. تستفيد هذه الأداة من حزمة تطوير الوكلاء (ADK) من Google لبدء وكيل مشرف رفيع المستوى، والذي يتم توجيهه لتنظيم عملية التقييم. يستدعي المشرف أداته الأساسية،
evaluate_repository، لتفويض اختبار الأوامر الأولية المعقّدة. - جهاز التوجيه والبوابة في وضع الحماية (لوحة التحكّم في GKE): هي بوابة تحكّم داخلية تسجّل تعريفات موارد مخصّصة عادية في وضع الحماية (
SandboxClaimsوSandboxTemplates). وتنسّق شبكات GKE لتخصيص وحدات pod وتأمينها، وإعادة عمليات بث الاتصال إلى أجهزة العميل العاملة. - Sandbox WarmPool: لتجنُّب أوقات بدء تشغيل حاويات GKE الطويلة ("عمليات التشغيل على البارد" التي تستغرق 30 ثانية أو أكثر)، تحتفظ WarmPool بنسخ احتياطية نشطة من الوحدات. عند المطالبة ببيئة الاختبار المعزولة، يربطها جهاز التوجيه على الفور في أوقات أقل من ثانية، ثم يجدول إعادة تدويرها عند إطلاقها.
- العزل باستخدام gVisor (runsc): نواة افتراضية في مساحة المستخدم تعمل كحدود آمنة لوضع الحماية. تعترض هذه الميزة طلبات النظام من مساحة الحاوية إلى نوى عقدة GKE، ما يضمن تشغيل الأوامر الأولية الخطيرة (مثل نصوص النظام أو إعدادات الحزمة) ضمن عزل المحاكاة الافتراضية المطلق.
- FastAPI Sandbox Runtime: خادم API خفيف الوزن بلغة Python يعمل داخل حاوية وضع الحماية تعرض هذه الأداة نقاط نهاية آمنة (
/executeو/uploadو/download) تتيح لأدوات المنفِّذ الخارجي معالجة الملفات وتشغيل مهام shell. - Gemini CLI (
@google/gemini-cli): هو نص برمجي لوكيل مستقل يتم تثبيته داخل البيئة التجريبية. عند تفعيلها باستخدام علامة وقت التشغيل الخاصة ببيئة المطوّرين (--yolo)، تستخدم ورقة تعليمات تقييم صارمة (prompt.md) وتعريفًا للمعايير (criteria.md) من أجل:- تحليل التدرّج الهرمي لقاعدة الرموز البرمجية بشكلٍ ديناميكي (باستخدام أدوات مثل
treeأوripgrep) - تثبيت المتطلبات تلقائيًا (عبر أوامر مثل
npm installوpip installوgo build) - إجراء اختبارات تطوير حقيقية (مثل
npm testأوpytest) للتحقّق من الوظائف - استدعاء نماذج Vertex AI (عبر بيانات اعتماد ربط Workload Identity في الحاوية) لتقييم منطق الملف، والتحقّق من صحة الادعاءات مقارنةً بملف README، ورصد الميزات الوهمية، وتسجيل المشاكل المتعلّقة بالجودة، وكتابة تقرير بطاقة قياس منظَّم إلى
evaluation.json
- تحليل التدرّج الهرمي لقاعدة الرموز البرمجية بشكلٍ ديناميكي (باستخدام أدوات مثل
- بيئات المطوّرين العادية: تتضمّن حِزم node وnpm وyarn وpnpm وpython وpip وuv وgo وgh وgit وtree وripgrep وplaywright في صورة حاوية وضع الحماية، ما يمنح الوكيل الفرعي المستقل مساحة عمل اختبار كاملة.
10. تنظيف
لتجنُّب الرسوم المستمرة على حسابك على Google Cloud، احذف الموارد التي تم إنشاؤها أثناء هذا الدرس العملي.
./destroy.sh
سبب إزالة الموارد: يتم إصدار فواتير Google Cloud استنادًا إلى نموذج استخدام الموارد. تتسبّب الموارد النشطة، مثل مجموعات GKE Autopilot وموازنات تحميل الشبكة والأقراص الثابتة، في تحمّل رسوم مستمرة حتى عندما تكون غير نشطة. يؤدي تنفيذ هذه الخطوة إلى حذف مساحة اسم المجموعة لمحو عناصر Kubernetes، وحذف مضيف مجموعة GKE Autopilot نفسه لإنهاء جميع رسوم الفوترة الأساسية على الفور.
11. تهانينا
تهانينا! لقد تم نشر تطبيق Hackathon Judge بنجاح باستخدام Agent Sandbox على GKE.
لقد نفّذت منصة ذكاء اصطناعي آمنة وعصرية مستندة إلى الأحداث وقادرة على اختبار وتقييم عمليات إرسال الرموز البرمجية غير الموثوق بها ضمن قيود أمان معزولة في حاويات.
ما تعلّمته
- بنية تحتية في GKE: كيفية توفير GKE Autopilot وخدمات Google Cloud المتوافقة، مثل Pub/Sub وBigQuery
- إعدادات Agent Sandbox: كيفية ضبط تعريفات الموارد المخصّصة وSandboxTemplates وSandboxClaims وSandbox WarmPools عالية الأداء
- نشر الخدمات الصغيرة: كيفية ضبط عمليات ربط Workload Identity ونشر بنية خدمات صغيرة متعددة المكوّنات (Frontend React وREST Go وWorker ADK Agent وIsolated Sandbox)
- وضع الحماية الآمن: كيفية استخدام حاويات gVisor المحاكاة لتنفيذ أوامر غير موثوقة تابعة لجهات خارجية بأمان على عُقد GKE
الخطوات التالية
- اطّلِع على مستندات Agent Sandbox.
- مزيد من المعلومات حول ميزات وضع "التشغيل الآلي" في GKE
- اطّلِع على مستندات منصة الوكيل.