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 الخلفية API ووكيل ADK Judging worker وواجهة مستخدم React الأمامية
- ربط التوجيه الخارجي المتوازن الحمل والوصول إلى المنصة لتشغيل مهام سير عمل التحكيم الآمنة في وضع الحماية
المتطلبات
- متصفّح ويب، مثل Chrome
- مشروع Google Cloud تم تفعيل الفوترة فيه
يجب أن تكون تكلفة الموارد التي تم إنشاؤها في هذا الدرس التطبيقي أقل من 5 دولارات أمريكية في إجمالي رسوم وقت التشغيل.
2. المشكلة: تقييم الرمز غير الموثوق به بشكل آمن
فعاليات الهاكاثون هي فعاليات ابتكار سريعة الوتيرة يقدّم فيها المشاركون مشاريع، غالبًا ما تتضمّن رمزًا مصدرًا، ليتم تقييمها. إنّ تقييم هذه الطلبات يدويًا يستغرق وقتًا طويلاً ويستهلك الكثير من الموارد. يُعدّ استخدام وكلاء الذكاء الاصطناعي لأتمتة عملية التصحيح حلاً واعدًا، ولكنّه يطرح تحديًا أمنيًا كبيرًا: كيف يمكن تشغيل الرموز التي يقدّمها المشاركون بأمان، والتي قد تكون مليئة بالأخطاء أو ضارة أو تتطلّب الكثير من الموارد؟
يؤدي تشغيل رموز برمجية غير موثوق بها مباشرةً على البنية الأساسية إلى تعرّضك لمخاطر مثل:
- إدخال الرموز البرمجية: قد تحاول البرامج النصية الضارة الوصول إلى البيانات الحسّاسة أو تعديلها.
- تصعيد الامتيازات: قد يحاول الرمز البرمجي الحصول على إذن وصول غير مصرَّح به إلى أنظمة أو موارد شبكة أخرى.
- إساءة استخدام الموارد: يمكن أن تؤدي الرموز البرمجية المكتوبة بشكل سيئ أو هجمات رفض الخدمة إلى استهلاك مفرط لوحدة المعالجة المركزية أو الذاكرة أو عرض النطاق الترددي للشبكة، ما يؤثر في العمليات الأخرى.
لأتمتة عملية التحكيم في هاكاثون باستخدام الذكاء الاصطناعي، نحتاج إلى طريقة لتنفيذ الرمز الذي تم إرساله في بيئة معزولة تمامًا عن بقية نظامنا وعن المشاركات الأخرى.
3- الحلّ: GKE Agent Sandbox
تم تصميم ميزة GKE Agent Sandbox لمواجهة هذا التحدي تحديدًا. تساعد هذه الميزة في إدارة أحمال العمل المعزولة وذات الحالة والنسخة الواحدة على GKE، وهي محسّنة لحالات الاستخدام، مثل أوقات تشغيل وكلاء الذكاء الاصطناعي التي يجب فيها تنفيذ الرموز غير الموثوق بها بشكل آمن وفعّال.
تشمل المزايا الرئيسية لـ "بيئة الاختبار" الخاصة بالوكلاء ما يلي:
- العزل على مستوى النواة: يوفّر عزلًا قويًا على مستوى النواة للرموز غير الموثوق بها باستخدام تقنيات مثل gVisor، ما يمنع الرموز من الوصول إلى النظام المضيف أو الحاويات الأخرى.
- توفير البيئات في أقل من ثانية: يتيح توفير بيئات وضع الحماية بسرعة (عادةً أقل من ثانية واحدة)، وهو أمر بالغ الأهمية لتقييم الرموز البرمجية عند الطلب.
- إمكانية التوسّع المتوافقة مع السحابة الإلكترونية: تستفيد من إمكانات Kubernetes والبنية الأساسية المُدارة في GKE.
باستخدام Agent Sandbox، يمكننا إنشاء بيئات معزولة عند الطلب لكل مشاركة في هاكاثون. يمكن بعد ذلك أن يطلب وكيل التقييم المستند إلى الذكاء الاصطناعي من "وضع الحماية للوكيل" إجراء اختبارات أو تجميع الرموز أو تنفيذ خطوات تقييم أخرى ضمن وضع الحماية الآمن هذا بدون تعريض سلامة المنصة بشكل عام للخطر. يوفّر ذلك طريقة قابلة للتوسّع وآمنة وفعّالة لأتمتة عملية تقييم الهاكاثون.
4. قبل البدء
بدء Cloud Shell
انقر على الزر أدناه لبدء Google Cloud Shell الذي تم إعداده مسبقًا باستخدام أدوات سطر الأوامر المطلوبة للمطوّرين والسحابة الإلكترونية.
تفعيل واجهات برمجة التطبيقات
نفِّذ الأمر التالي في Cloud Shell لتفعيل جميع Cloud APIs المستهدَفة في 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 وإدارة الهوية وإمكانية الوصول)، وتحليلات البيانات بدون خادم (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
اتّبِع الطلبات التي تظهر في واجهة Shell التفاعلية لتقديم إعدادات مثل رقم تعريف المشروع النشط والمنطقة المستهدَفة. ينشئ النص البرمجي تلقائيًا إعدادات .env محلية، ويربط الموارد، ويجمع صور الحاويات، ويسجّل البنية الأساسية لخط الأساس في GKE.
في ما يلي العمليات المستهدَفة التي ينفّذها النص البرمجي:
1. إعدادات ضبط البيئة
ينشئ النص البرمجي ملف إعداد .env لتخزين مَعلمات متغيّرات GKE وPub/Sub وBigQuery والمشروع. يؤدي الحصول على هذا الملف بشكل ديناميكي إلى ملء جميع تعريفات بيان Kubernetes اللاحقة.
سبب إعداد ملف البيئة هذا: يركّز ملف .env مَعلمات الإعداد، ما يضمن أنّ بيانات GKE التي نطبّقها يدويًا في الخطوات اللاحقة تستخدم إعدادات إقليمية وأسماء مشاريع وموارد متطابقة، مع فصل إعدادات البيئة تمامًا عن الرمز المصدر.
2. Google Cloud CLI وإعداد المشروع المستهدَف
يتأكّد النص البرمجي من تثبيت برامج الخدمات gcloud وbq وkubectl وenvsubst، ويتحقّق من حالة المصادقة، ويقفل استهدافات الإعداد النشطة على مشروع على السحابة الإلكترونية من Google النشط.
سبب استهداف المشروع النشط: يمنع ضبط المشروع المستهدف النشط أوامر واجهة سطر الأوامر من التأثير في المشاريع الأخرى في حسابك، ويجري عمليات التحقّق من المصادقة قبل التشغيل، ما يضمن عدم تعذُّر تنفيذ أوامر الإعداد في منتصف عملية النشر بسبب بيانات اعتماد غير صالحة.
3- تفعيل واجهات برمجة التطبيقات المستهدَفة على Google Cloud
ينفّذ النص البرمجي عملية تحقّق متكرّرة للتأكّد من تفعيل واجهات برمجة التطبيقات المستهدَفة لخدمة Google Cloud (مثل GKE وArtifact Registry وCloud Build وPub/Sub وVertex AI وBigQuery وIAM).
سبب تفعيل واجهات برمجة تطبيقات Google Cloud: يجب تفعيل الخدمات السحابية المُدارة قبل أن يصبح من الممكن الوصول إلى نقاط النهاية أو إنشاء الموارد. يؤدي تفعيلها في البداية إلى إعداد بوابة واجهة برمجة التطبيقات الإقليمية في Google Cloud Platform للتعامل مع أوامر توفير الموارد اللاحقة.
4. توفير مستودع Docker في Artifact Registry
يوفّر النص البرمجي مستودع حاويات Docker باسم hackathon-judge-repo في الموقع الجغرافي المستهدَف المحدّد.
سبب إنشاء مستودع Artifact Registry: تتطلّب مجموعات GKE إمكانية الوصول الآمن إلى سجلات الحاويات الخاصة في الشبكة الإقليمية نفسها لسحب صور التطبيقات بسرعة. توفّر خدمة Artifact Registry مضيفًا آمنًا وخاصًا لفهرسة صور حاويات Docker وفحصها وتخزينها.
5- توفير مجموعة GKE Autopilot
يوفّر النص البرمجي مجموعة Google Kubernetes Engine (GKE) Autopilot باسم 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
ينزّل النص البرمجي أحدث تعريفات موارد مخصّصة (manifest.yaml وextensions.yaml) من Kubernetes-sigs Agent Sandbox ويسجّلها لتوسيع إمكانات GKE الأساسية.
سبب تثبيت البنية الأساسية لـ Agent Sandbox: لا تتوافق مجموعات 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 كوحدة تحكّم آمنة وعالية الأداء في الدخول مخصّصة لتوجيه وضع الحماية فقط. تعزل هذه الشبكة بيئة الاختبار المعزولة، ما يوفّر هدفًا محليًا آمنًا يسمح لوكلاء العامل بالتواصل مع بيئات الاختبار المعزولة التي تمّت المطالبة بها بدون عرض نقاط النهاية خارجيًا.
تطبيق نموذج المطالبة في Sandbox
استخدِم envsubst لتعبئة تعريف نموذج وضع الحماية بمتغيّرات البيئة النشطة وتطبيقه:
source ./setup-env.sh
envsubst < k8s/sandbox-claim-template.yaml | kubectl apply -f -
سبب نشر "نموذج المطالبة ببيئة الاختبار": يعمل "نموذج المطالبة ببيئة الاختبار" كإعدادات أساسية تحدّد البيئة. تحدّد هذه السمة صورة الحاوية التي سيتم تشغيلها (المضمّنة مسبقًا مع أدوات المطوّرين) ومَعلمات البيئة (رقم تعريف مشروع 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 ثانية). تحتفظ ميزة WarmPool في بيئة الاختبار المعزولة بمجموعة احتياطية من وحدات بيئة الاختبار المعزولة النشطة والمحمّاة مسبقًا (5 نُسخ طبق الأصل تلقائيًا). عندما يطلب وكيل المنفِّذ بيئة تقييم، يخصّص Sandbox Router على الفور وحدة pod مُسخّنة مسبقًا، ما يقلّل من تأخيرات بدء التشغيل إلى سرعات أقل من ثانية واحدة.
7. نشر مكوّنات التطبيق
بعد تفعيل البنية الأساسية الآمنة لبيئة الاختبار المعزولة بالكامل، يمكنك الآن تفعيل واجهة برمجة التطبيقات الخلفية المركزية، والمنفِّذ الوكيل، وواجهة الويب المستندة إلى React، وعملية تعيين بوابة الدخول.
نشر الخلفية
انشر الخلفية لواجهة برمجة تطبيقات REST الخاصة بخدمة التنسيق:
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 الأمامية، وتأمين الوصول إلى المجموعة العامة.
التحقّق من عمليات الطرح
احظر تنفيذ الأوامر في shell وانتظِر إلى أن تصل جميع عمليات نشر الخدمات الأساسية الثلاث إلى حالة طرح سليم وجاهز:
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
راجِع سجلّات وحدة Worker Agent للتعرّف على منطق التقييم خطوة بخطوة في "أداة تقييم جودة الإعلانات":
kubectl logs -l app=agent -n hackathon-judge
سبب فحص سجلّات الوكيل: يعرض فحص سجلّات وكيل المنفِّذ الخطوات الداخلية التفصيلية لمسار التعلّم في الوقت الفعلي. يمكنك تتبُّع عملية جلب مهمة من خلال وكيل ADK، وطلب حاوية وضع الحماية، وتنفيذ أهداف التجميع، وتحليل التقارير باستخدام Gemini، ونشر بطاقات قياس الأداء.
9- (اختياري) طريقة عمل هذه الميزة
بنية Agent Sandbox
على الرغم من أنّ وظائف الذكاء الاصطناعي في BigQuery رائعة لتقييم الطلبات المستندة إلى النصوص ومطالبات ملفات README، فإنّ الحكم على مشروع هندسي يتطلّب تجميع الرموز البرمجية وتثبيت مكتبات تابعة لجهات خارجية وتشغيل مجموعات اختبار حقيقية.
يشكّل تنفيذ رمز المستخدم الأولي مخاطر أمنية كبيرة، بما في ذلك اختراق المضيف، واختراق الحاويات، والوصول غير المصرح به إلى الموارد. يقلّل إطار عمل GKE Agent Sandbox من هذه المخاطر من خلال تنظيم أحمال عمل معزولة في وضع الحماية باستخدام المحاكاة الافتراضية gVisor (runsc).
مسار التفاعل مع النظام
يوضّح المخطّط البياني أدناه كيفية تواصل العناصر المختلفة في نظامنا المستند إلى الأحداث أثناء تنفيذ عملية تقييم آمنة في بيئة معزولة:

كيف تعمل الأدوات والمكوّنات التي تتضمّن تفاعلاً معًا؟
- واجهة مستخدم React الأمامية: تعرض واجهة تفاعلية يضبط فيها المستخدمون نماذج المعايير ويسجّلون الفرق ويرسلون عناوين URL للمشاريع ويراجعون بطاقات الأداء النهائية للتقييم، بما في ذلك التناقضات في الملفات الكاملة وتعليقات الهندسة.
- Go REST Backend API: تدير نقاط نهاية واجهة برمجة التطبيقات العامة. يخزِّن هذا التطبيق إعدادات المشاريع في BigQuery ويدفع مهام التحكيم إلى Pub/Sub لفصل مسارات التنفيذ الحسابية المعقّدة.
- Google Pub/Sub: وسيط موجّه نحو الرسائل يحتفظ برسائل المهام بأمان في قائمة الانتظار، وينسّق الاتصال بشكل غير متزامن بين واجهة برمجة التطبيقات (API) ونسخ العامل النشطة.
- عامل Python في حزمة تطوير الوكلاء (وكيل مشرف): عامل يعمل في الخلفية ويسحب المهام من Pub/Sub. تستفيد هذه الأداة من مجموعة أدوات تطوير الوكلاء (ADK) من Google لبدء وكيل مشرف رفيع المستوى، والذي يتم توجيهه لتنظيم عملية التقييم. يستدعي المشرف أداته الأساسية،
evaluate_repository، لتفويض اختبار الأوامر الأولية المعقّدة. - جهاز التوجيه والبوابة في وضع الحماية (لوحة التحكّم في GKE): هي بوابة تحكّم داخلية تسجّل تعريفات الموارد المخصّصة العادية في وضع الحماية (
SandboxClaimsوSandboxTemplates). وتنسّق شبكات GKE لتخصيص لوحات وتأمينها، وإعادة عمليات بث الاتصال إلى أجهزة العميل العاملة. - 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
- اطّلِع على مستندات منصة الوكيل.