تكوين التصحيح المستمر في Azure Container Registry

في هذه المقالة، ستتعلم كيفية تثبيت التحديث الجزئي المستمر وتمكينه وتكوينه. سيؤدي التصحيح المستمر عند تمكين سجل الحاوية تلقائيا إلى اكتشاف ومعالجة الثغرات الأمنية على مستوى نظام التشغيل (نظام التشغيل) لصور الحاوية.

المتطلبات الأساسية

  • يمكنك استخدام Azure Cloud Shell أو تثبيت محلي ل Azure CLI مع حد أدنى من الإصدار 2.15.0 أو أحدث.
  • لديك مجموعة موارد موجودة مع Azure Container Registry (ACR).
  • لديك سجل حاويات Azure مع تمكين مهام ACR (مهام ACR غير مدعومة في المستوى المجاني من ACR).

قم بتشغيل الأمر التالي لتثبيت ملحق CLI:

    az extension add -n acrcssc

تمكين سير عمل التحديثات المستمر

  1. سجل الدخول إلى Azure CLI باستخدام az login.

    az login
    
  2. تسجيل الدخول إلى ACR.

    az acr login -n <myRegistry>
    
  3. شغل الأمر التالي لإنشاء ملف باسم continuouspatching.json.

    cat <<EOF > continuouspatching.json
    {
        "version": "v1",
        "tag-convention" : "<incremental|floating>",
        "repositories": [{
            "repository": "<Repository Name>",
            "tags": ["<comma-separated-tags>"],   
            "enabled": <true|false>
        }] 
    }
    EOF
    

    يخزن المخطط مستودعات وعلامات معينة بتنسيق صفيف. يتم تعريف كل متغير هنا:

    • version يسمح لفريق ACR بتعقب إصدار المخطط الذي تعمل عليه. لا تغير هذا المتغير ما لم يتم إرشادك إلى.

    • tag-convention هو حقل اختياري. القيم المسموح بها هي "تزايدي" أو "عائم" - راجع المفاهيم الرئيسية للتصحيح المستمر لمزيد من المعلومات.

    • repositories هي مصفوفة تتكون من معلومات مستودع وعلامات مفصلة بالتفصيل:

      • repository يشير إلى اسم المستودع
      • tags هو صفيف من العلامات مفصولة بفواصل. يمكن استخدام حرف * البدل للدلالة على جميع العلامات داخل هذا المستودع.
      • enabled هي قيمة منطقية صحيحة أو خاطئة تحدد ما إذا كان المستودع المحدد ممكنا أم لا.

    المثال أدناه يوضح إعدادا لعميل يريد تصحيح جميع العلامات (باستخدام الرمز *) داخل المستودع python، وتحديث علامات و jammy-20240111 بشكل محدد jammy-20240125 في المستودع ubuntu.

    {
    "version": "v1",
    "tag-convention" : "incremental",
    "repositories": [{
            "repository": "python",
            "tags": ["*"],
            "enabled": true
        },
        {
            "repository": "ubuntu",
            "tags": ["jammy-20240111", "jammy-20240125"],
         "enabled": true, 
        }]
    }
    
  4. بعد إنشاء ملف التكوين الخاص بك، قم بتنفيذ تجربة جذرية للتحقق من اختيار التشويهات المقصودة وفقا لمعايير JSON. يتطلب التشغيل الجاف معلمة تسمى schedule، والتي تحدد عدد مرات تشغيل دورة التصحيح المستمرة. يتم قياس علامة الجدول بالأيام، مع الحد الأدنى لقيمة يوم واحد، وقيمة قصوى 30 يوما. على سبيل المثال، إذا كنت تريد تصحيح صورة كل يوم، يمكنك تحديد الجدول الزمني ك 1d، أو يوم واحد. إذا كنت تريد تصحيحا أسبوعيا (مرة واحدة في الأسبوع)، يمكنك ملء الجدول الزمني ك 7d، أو 7 أيام.

    az acr supply-chain workflow create -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d --dry-run   
    

    إخراج --dry-run العلامة كافة البيانات الاصطناعية المحددة بواسطة تكوين ملف JSON. تحقق من اختيار القطع الأثرية الصحيحة. مع تكوين الأوبونتو النموذجي، يجب عرض النتائج التالية كمخرجات:

    Ubuntu: jammy-20240111
    Ubuntu: jammy-20240125
    
  5. بعد التأكد من نتائج التجربة الجافة، شغل create الأمر مرة أخرى بدون العلم --dry-run لإنشاء سير عمل التحديثات المستمرة.

    إشعار

    --schedule تتبع المعلمة مضاعف يوم ثابت بدءا من اليوم 1 من الشهر. يعني ذلك:

    • إذا قمت بتحديد --schedule 7d الأمر وتشغيله في الثالث، فسيكون التشغيل المجدول التالي في 7th - لأن 7 هو المضاعف الأول من 7 (أيام) بعد الثالث، ويحسب من اليوم الأول من الشهر.
    • إذا كان --schedule هو 3d واليوم هو 7 ، ثم القادم المقرر تشغيل الأراضي على 9 -- منذ 9 هو المضاعف التالي من 3 الذي يلي 7.
    • إذا أضفت العلامة --run-immediately، يمكنك تشغيل تصحيح فوري. سيظل التشغيل المجدول اللاحق محاذاته إلى أقرب مضاعف يوم من أول الشهر، استنادا إلى القيمة الخاصة بك --schedule .
    • يتم إعادة تعيين عداد الجدول كل شهر. بغض النظر عن الجدول الزمني المعين، سيتم تشغيل سير العمل في الأول من كل شهر، ثم اتبع قيمة الجدول الزمني المحددة لبقية الشهر. إذا كان التصحيح الخاص بي يعمل في 28 يناير، وجدولي الزمني هو 7d، سيتم تشغيل التصحيح التالي في فبراير الأول، ثم الثامن، ويستمر بعد 7 أيام.
    az acr supply-chain workflow create -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d --run-immediately
    

    عند نجاح الأمر (سواء أدرجت --run-immediatelyأم لا)، ترى رسالة نجاح تؤكد أن مهام سير العمل الخاصة بك تم وضعها في قائمة الانتظار. كما ترى معامل إخراج يشير إلى موعد جدولة الجولة التالية من سير عملك، لذا يمكنك تتبع موعد حدوث التحديث مرة أخرى بدقة.

استخدام مدخل Microsoft Azure لعرض مهام سير العمل

  1. بمجرد نجاح سير العمل، انتقل إلى مدخل Microsoft Azure لعرض المهام قيد التشغيل. في قائمة الخدمة، تحت الخدمات، اختر المستودعات. يجب أن ترى مستودعا جديدا باسم csscpolicies/patchpolicy. يستضيف هذا المستودع أداة تكوين JSON التي تتم الإشارة إليها باستمرار للتصحيح المستمر.

  2. بعد ذلك، تحت قسم الخدمات، اختر المهام. يجب أن ترى ثلاث مهام جديدة:

    • cssc-trigger-workflow - تقوم هذه المهمة بمسح ملف التكوين وتستدعي مهمة المسح على كل صورة على حدة.
    • cssc-scan-image - تقوم هذه المهمة بمسح الصورة بحثا عن ثغرات في نظام التشغيل. تؤدي هذه المهمة إلى تشغيل مهمة التصحيح فقط إذا تم العثور على ثغرات أمنية في نظام التشغيل.
    • cssc-patch-image - هذه المهمة تقوم بتصحيح الصورة.

    تعمل هذه المهام بالتزامن لتنفيذ سير عمل التصحيح المستمر.

  3. لرؤية تنفيذ المهام المحددة، اختر الجولات. هنا يمكنك عرض معلومات الحالة حول ما إذا كانت المهمة قد نجحت أو فشلت، بالإضافة إلى عرض سجل تصحيح الأخطاء.

لقطة شاشة تعرض تشغيل المهام للتصحيح المستمر.

استخدام CLI لعرض مهام سير العمل

يمكنك أيضا تشغيل أمر عرض CLI التالي للاطلاع على مزيد من التفاصيل حول كل مهمة وسير العمل العام. يقوم الأمر بإخراج الجدول الزمني وتاريخ الإنشاء وبيانات النظام مثل آخر تاريخ تعديل.

على سبيل المثال:

az acr supply-chain workflow show -r myRegistry -g myResourceGroup -t continuouspatchv1 

لرؤية جميع الأعلام المطلوبة والاختيارية، استخدم أمر المساعدة:

az acr supply-chain workflow show --help

تحديث سير عمل التحديثات المستمر

لإجراء تعديلات على سير عمل التحديثات المستمرة، استخدم أمر التحديث. يمكنك تحديث جدولك أو مخطط تكوين JSON باستخدام أمر تحديث CLI مباشرة. على سبيل المثال:

az acr supply-chain workflow update -r myRegistry -g myResourceGroup -t continuouspatchv1 --config ./continuouspatching.json --schedule 1d

لتحديث الجدول الزمني، قم بتشغيل الأمر السابق مع إدخال جديد للجدول الزمني. لتحديث تكوين JSON الخاص بك، نوصي بإجراء تغييرات على الملف، وتشغيل التشغيل الجاف، ثم تشغيل أمر التحديث.

حذف سير عمل التحديثات المستمر

لحذف سير عمل التحديث المستمر، قم بتشغيل أمر CLI التالي:

az acr supply-chain workflow delete -r myregistry -g myresourcegroup -t continuouspatchv1

بمجرد حذف سير العمل بنجاح، سيتم حذف المستودع "csscpolicies/patchpolicy" تلقائيا. سيتم حذف المهام الثلاث التي تقوم بتشغيل سير العمل الخاص بك أيضا، بالإضافة إلى أي عمليات تشغيل مدرجة في قائمة الانتظار حاليا.

استكشاف أخطاء التحديث المستمر

راجع هذه النصائح لحل المشكلات التي قد تواجهها أثناء التحديث المستمر.

قائمة المهام الجارية

للحصول على معلومات تصحيح الأخطاء المهمة، استخدم الأمر التالي لسرد أحدث مهام التحديث المستمر التي تم تنفيذها:

az acr supply-chain workflow list -r <registryname> -g <resourcegroup> [--run-status <failed || successful || running>] -t continuouspatchv1

النتيجة الناجحة ستعيد المعلومات التالية:

  • اسم الصورة والعلامة
  • نوع سير العمل
  • حالة المسح
  • تاريخ ووقت المسح الأخير (إذا فشل الحالة، سيبقى التاريخ فارغا)
  • مسح معرف المهمة (لمزيد من التصحيح)
  • حالة التحديث
  • تاريخ ووقت آخر تحديث (إذا فشل الحالة، سيبقى التاريخ فارغا)
  • اسم الصورة المصحح + العلامة
  • معرف مهمة التصحيح (لمزيد من التصحيح)

استخدم [--run-status] لإعادة جميع حالات المهام التي تطابق المرشح المحدد. على سبيل المثال، إذا حددت --run-status failed، فقط الصور التي فشلت في تصحيحها ستدرج.

إلغاء المهام الجارية

قد تتطلب بعض السيناريوهات منك إلغاء المهام التي تعمل حاليا أو تنتظر التنفيذ. على سبيل المثال، قد ترى خطأ في التكوين تفضل إصلاحه فورا، بدلا من الانتظار حتى تكتمل مهام التحديث.

لإلغاء المهام الجارية، استخدم أمر CLI التالي:

az acr supply-chain workflow cancel-run -r <registryname> -g <resourcegroup> --type <continuouspatchv1>

يقوم هذا الأمر بإلغاء جميع مهام التحديث المستمرة التي تحمل حالة Running، Queued، أو Started للجدول الزمني الحالي. على سبيل المثال، إذا ألغيت المهام على جدول يومي (--schedule 1d)، يتم إلغاء المهام في تلك الولايات لذلك اليوم، ثم تعود مجدولة لليوم التالي. إذا كان جدولك أسبوعيا، تظهر المهام الملغاة مرة أخرى في الأسبوع التالي.

ابحث عن المهام الفاشلة

استخدم أمر قائمة المهام لإخراج جميع المهام الفاشلة. تحديد الأمر cssc-patch هو الأفضل للفشل.

على سبيل المثال، هذا الأمر يعيد أفضل 10 مهام تصحيح فاشلة:

az acr task list-runs -r <registryname> -n cssc-patch-image --run-status Failed --top 10

للتحقق من فشل معين، لاحظ ال runID الذي تم إرجاعه من هذا الأمر وقم بتشغيل:

az acr task logs -r <registryname> --run-id <run-id>

إلغاء سير العمل الذي تم تكوينه بشكل خاطئ

إلغاء المهام المدرجة في الطابور باستخدام أمر الإلغاء:

az acr supply-chain workflow cancel-run -r <registryname> -g <resourcegroup> --type <continuouspatchv1>