تعمل صور Docker الموقعة على تعزيز ثقة النظام البيئي وأمانه من خلال السماح للمستخدمين بالتحقق من أن الصور التي يقومون بتنزيلها تأتي منك بالفعل. وعلى الرغم من الفوائد الواضحة للتوقيع، إلا أن الإقبال بين مستخدمي Docker كان بطيئًا ولم يتم تمكينه افتراضيًا.
الآن تسعى نسخة جديدة من نظام التوقيع لدى كاتب العدل إلى تغيير ذلك. تم إنشاء مجموعة عمل متعددة البائعين في ديسمبر 2019 لتحسين تجربة التوقيع على الصور وحل العديد من المشكلات المتعلقة بالتنفيذ الأصلي. Notary v2 تم إطلاقه في ألفا النموذج في أكتوبر 2021. وإليك كيفية جعل التوقيع أكثر توافقًا مع أنماط استخدام الحاويات الحديثة.
ما هو كاتب العدل؟
Notary هو مشروع بدأته Docker في عام 2015 قبل التبرع به لمؤسسة Cloud Native Computing Foundation (CNCF). يتم توجيه الإصدار v2 بواسطة مجموعة من مختلف الصناعات وهذا يشمل Docker وMicrosoft وGoogle وAmazon.
يوفر Notary، المعروف أيضًا باسم Docker Content Trust، الآليات التي توقع وتتحقق من صحة صور الحاوية الخاصة بك. تعمل التكرارات الحالية عن طريق إضافة مفتاحك العام إلى السجل الخاص بك، وتوقيع صورتك باستخدام نظير المفتاح الخاص، ثم دفع الصورة الموقعة إلى السجل. يمكن للمستخدمين الآخرين التحقق من الصورة عن طريق مطالبة السجل بمطابقة مفتاحها العام مع البيانات التي سحبوها. يتم تضمين كل هذه الوظائف في Docker CLI الحالي ضمن
docker trust
مجموعة الأوامر.
المشاكل مع الإصدار 1
تم تطوير الإصدار الأصلي من Notary قبل انتشار سجلات Docker اليوم. تم تصميمه لـ Docker Hub في المقام الأول، بينما قد تستخدم اليوم سجلات من العديد من المزودين المختلفين. بدأت GitHub وGitLab ومنصات النشر السحابي الشهيرة في تقديم سجلات متكاملة.
يعمل Notary حاليًا جنبًا إلى جنب مع السجل. إذا كنت تريد استخدامه مع سجل خاص، فيجب عليك أيضًا نشر خادم Notary الخاص بك. وهذا يجعل من الصعب استخدام التوقيع بالصور في البيئات التي لا تعتمد على Docker Hub.
لا يعمل الإصدار 1 بين السجلات أيضًا. يتم فقد بيانات التوقيع عندما تقوم بسحب صورة عامة ثم دفعها إلى سجل خاص بدون خادم Notary مصاحب. لا يمكنك التحقق مما إذا كانت النسخة الخاصة تظل كما هي في الأصل أثناء وجودها في وضع السكون في السجل الخاص بك. وبالمثل، لا تقدم بنية Notary الحالية دعمًا للشبكات الخاصة والبيئات المعزولة التي تحتاج إلى عزل مادي عن العالم الخارجي.
هندسة الإصدار 2 الجديدة
يعيد الجيل القادم من Notary التصميم إلى لوحة الرسم لإنشاء تجربة أبسط وأكثر قابلية للتطبيق عالميًا. أحد أهداف المشروع هو في نهاية المطاف الوصول إلى حالة يتم فيها تشغيل عمليات التحقق من توقيع الصورة بشكل افتراضي، وهي خطوة من شأنها أن تساعد في حماية عدد أكبر من المستخدمين من التلاعب المحتمل بالصور.
سيتم الآن دفع بيانات التوقيع وسحبها مع بيانات الصورة، مما يزيل الخطوة المنفصلة. سيتم نقل كل ما يلزم للتحقق من صحة الصورة جنبًا إلى جنب معها، مع الحفاظ على توفرها عند دفعها إلى سجل آخر أو استخدامها في بيئة معزولة.
لا يقتصر Notary v2 على توقيع صور الحاويات أيضًا. فهو يعمل مع أي قطعة أثرية مخزنة في متوافق مع OCI السجل. يمكنك الآن التوقيع على الأصول التي تصاحب صورك، مثل قوائم التبعيات في فواتير المواد البرمجية (SBOMs) والنتائج من محركات مسح الصور. وهذا يفرض الثقة عبر خط أنابيب النشر بالكامل من خلال تسليط الضوء على المحاولات غير المصرح بها لتعديل عمليات التدقيق والوثائق الداعمة.
هناك مجال آخر يفشل فيه Notary v1 عندما يتعلق الأمر بالموافقة على استخدام صورة في بيئتك الخاصة. فهو يدعم توقيعًا واحدًا فقط لكل صورة؛ إذا تم توقيع صورة Docker Hub بواسطة البائع، فلن تتمكن من إضافة توقيعك الخاص لتمييز الصورة على أنها مناسبة لمؤسستك.
يضيف Notary v2 الدعم لسير العمل هذا أيضًا. بصفتك مستخدمًا للصورة في المصب، يمكنك إضافة توقيعات جديدة إلى صورة (أو أي قطعة أثرية أخرى) والتي سيتمكن الآخرون في أسفل السلسلة من التحقق منها. على سبيل المثال، يعني هذا أنه سيكون بإمكانك التحقق من التأكيدات التالية حول صورة يتم تحديدها على أنها
ubuntu:latest
:
- تم نشر الصورة على Docker Hub بواسطة Canonical ولم يتم العبث بها منذ ذلك الحين.
- لقد تم توقيع الصورة لاستخدامها بواسطة مؤسستك.
- لم تتغير الصورة منذ تخزينها مؤقتًا في سجل Docker الخاص بخادم CI الخاص بك.
إن Notary v2 قادر على الحفاظ على الثقة في جميع أنحاء النظام البيئي، بدلاً من الاقتصار في الغالب على عمليات سحب الصور الفورية من Docker Hub. وهو يشجعك على تحدي الافتراض التقليدي بأن الصور “آمنة” لأنها يتم سحبها مباشرة من Docker Hub. يتيح لك استخدام توقيعات متعددة التحقق من صحة هذا البيان، ثم تسجيله كختم موافقة خاص بك.
استخدام Notary v2 اليوم
لم يتم إعداد Notary v2 للاستخدام العام بعد. ومع ذلك، فإن الإصدار التجريبي الأول متاح للتنزيل. يسمى مكون التوقيع والتحقق
notation
إنه حاليًا غير مكتمل الميزات ويتم تقديمه كملف ثنائي مستقل يعمل بشكل مستقل عن Docker CLI.
تنزيل التدوين من صفحة إصدارات GitHubاستخرج الملف القابل للتنفيذ، ثم ضعه في مكان ما على مسارك. ابدأ بإنشاء شهادة توقيع اختبارية لاستخدامك الشخصي:
notation cert generate-test --default "my-certificate"
يمكنك الآن توقيع الصور. يعمل Notary حاليًا فقط مع الصور الموجودة في سجل. يمكنك استخدام Docker لبدء تشغيل سجل متوافق بسرعة على localhost:5000:
docker run -d -p 5000:5000 ghcr.io/oras-project/registry:v0.0.3-alpha
قم ببناء صورتك ودفعها إلى السجل الخاص بك، ثم استخدم Notation لتوقيعها:
docker build -t localhost:5000/my-image:latest .docker push localhost:5000/my-image:latest
notation sign --plain-http localhost:5000/my-image:latest
لقد قمت الآن بإضافة توقيعك إلى الصورة. حاول التحقق منه باستخدام verify
يأمر:
notation verify --plain-http localhost:5000/my-image:latest
سيؤدي هذا إلى إنشاء خطأ لأن cert generate-test
لا يقوم الأمر تلقائيًا بتسجيل المفتاح العام للشهادة المولدة. نظرًا لأن Notation لن يعرف المفتاح المستخدم لتوقيع الصورة، فسوف تفشل عملية التحقق. يمكنك تصحيح هذا الأمر عن طريق إضافة المفتاح العام للشهادة إلى Notation، ثم محاولة التحقق من صورتك مرة أخرى:
notation cert add --name "my-certificate" ~/.config/notation/certificate/my-certificate.crtnotation verify --plain-http localhost:5000/my-image:latest
هذه المرة، يجب أن يصدر Notation رمز SHA256 الخاص بالصورة، مما يشير إلى نجاح عملية التحقق. الآن، يجب أن تتمكن من سحب الصورة والتحقق منها على جهاز آخر مثبت عليه Notation. تذكر إضافة المفتاح العام لشهادتك إلى تثبيت Notation الثاني.
ال --plain-http
يتيح العلم الموجود في الأوامر أعلاه لـ Notation استخدام HTTP للاتصال بالسجل. وهذا ضروري لهذه الأمثلة حيث تم إنشاء سجل Docker محليًا لأغراض الاختبار. يجب عليك حذف هذا العلم عند الاتصال بسجل حقيقي مؤمن بتقنية TLS.
ما هو التالي في مجال التوثيق والتصديق؟
لا يزال Notary v2 قيد التطوير وستظهر إمكانيات جديدة في إصدارات Notation المستقبلية. إلغاء الشهادة، وسياسات التحقق الخاصة بالبيئة، ودعم السجلات التي لا تدعم ORAS هي كل شيء على خريطة الطريق.
لا يوجد حاليًا إطار زمني محدد لإصدار مستقر. بمجرد وصوله، سيضيف Notary v2 أخيرًا توقيعًا سهل الوصول ومرنًا وقابلًا للتطوير إلى نظام صور الحاوية. من المفترض أن يجعل التحقق من التوقيع قابلاً للاستخدام في العديد من السيناريوهات الأخرى، مما يقلل من خطر التلاعب بالسحب عبر الأسلاك واستخدام الصور غير المصرح به.
بمجرد طرحه على نطاق أوسع، ستتمكن أنظمة النشر الخاصة بك من التحقق مما إذا كانت الصورة هي إصدار “رسمي” من بائعها، وما إذا كانت معتمدة للاستخدام في مؤسستك، وما إذا كانت تحتوي على نتيجة فحص أمان مناسبة موقعة بنفس المفتاح. سيضيف هذا طبقة ترحيبية من الحماية الإضافية والشفافية للمؤسسات التي تهتم بالأمن والتي تدير حاويات في بيئات عالية الخطورة.