لغة التعبير الشائعة (CEL) هي لغة تعبيرات متعددة الأغراض مصمّمة لتكون سريعة وآمنة وقابلة للنقل وسهلة التنفيذ. يمكنك استخدام لغة التعبير الشائعة (CEL) بمفردها أو تضمينها في منتج أكبر. تتلاءم لغة التعبير الشائعة (CEL) مع مجموعة كبيرة من التطبيقات، بدءًا من توجيه طلبات الإجراءات عن بُعد (RPC) وصولاً إلى تحديد السياسات الأمنية. تتميّز لغة التعبير الشائعة (CEL) بأنّها قابلة للتوسيع ومستقلة عن المنصة ويمكن التحقّق منها رسميًا ومحسّنة لعمليات سير العمل التي يتم فيها التجميع مرة واحدة والتقييم عدة مرات.
تم تصميم لغة التعبير الشائعة (CEL) خصيصًا لتكون آمنة لتنفيذ رمز المستخدم. في حين أنّه من الخطير استدعاء eval() بشكل أعمى على رمز Python الخاص بالمستخدم، يمكنك تنفيذ رمز CEL الخاص بالمستخدم بأمان. وبما أنّ لغة التعبير الشائعة (CEL) تمنع السلوك الذي يقلّل من أدائها، يتم تقييمها بأمان في أجزاء من الثانية أو أجزاء من الألف من الثانية. تُعد سرعة لغة التعبير الشائعة (CEL) وأمانها مثاليَين للتطبيقات التي تتطلّب أداءً عاليًا.
تُقيّم لغة التعبير الشائعة (CEL) التعبيرات المشابهة لوظائف السطر الواحد أو تعبيرات لامدا. في حين أنّ لغة التعبير الشائعة (CEL) تُستخدم عادةً لاتخاذ القرارات المنطقية، يمكنك أيضًا استخدامها لإنشاء عناصر أكثر تعقيدًا مثل رسائل JSON أو رسائل المخزن المؤقت للبروتوكول.
ما هي مزايا لغة التعبير الشائعة (CEL)؟
تُقيّم العديد من الخدمات والتطبيقات الإعدادات التصريحية. على سبيل المثال، التحكّم في الوصول المستند إلى الدور (RBAC) هو إعداد تصريحي ينتج قرار وصول بالنظر إلى دور المستخدم ومجموعة من المستخدمين. في حين أنّ الإعدادات التصريحية كافية في معظم الحالات، تحتاج أحيانًا إلى قوة تعبيرية أكبر. وهنا يأتي دور لغة التعبير الشائعة (CEL).
كمثال على توسيع إعداد تصريحي باستخدام لغة التعبير الشائعة (CEL)، يمكنك الاطّلاع على إمكانات خدمة Google Cloud Identity and Access Management (IAM). في حين أنّ التحكّم في الوصول المستند إلى الدور (RBAC) هو الحالة الشائعة، توفّر خدمة IAM تعبيرات لغة التعبير الشائعة (CEL) للسماح للمستخدمين بزيادة تقييد نطاق المنحة المستندة إلى الدور وفقًا لخصائص رسالة proto للطلب أو الموارد التي يتم الوصول إليها. سيؤدي وصف هذه الشروط من خلال نموذج البيانات إلى واجهة برمجة تطبيقات معقدة يصعب التعامل معها. بدلاً من ذلك، يُعد استخدام لغة التعبير الشائعة (CEL) مع التحكّم في الوصول المستند إلى السمات (ABAC) توسيعًا قويًا ومعبّرًا للتحكّم في الوصول المستند إلى الدور (RBAC).
المفاهيم الأساسية للغة التعبير الشائعة (CEL)
في لغة التعبير الشائعة (CEL)، يتم تجميع التعبير مقابل بيئة. تنتج خطوة التجميع شجرة بناء جملة مجردة (AST) بتنسيق Protocol Buffers. يتم تخزين التعبيرات المجمّعة لاستخدامها في المستقبل للحفاظ على سرعة التقييم قدر الإمكان. يمكن تقييم تعبير مجمّع واحد باستخدام العديد من الإدخالات المختلفة.
في ما يلي نظرة فاحصة على بعض هذه المفاهيم.
التعبيرات
يكتب المستخدمون التعبيرات. تشبه التعبيرات نص دالة السطر الواحد أو تعبيرات لامدا. تتم كتابة توقيع الدالة الذي يعلن عن الإدخال خارج تعبير لغة التعبير الشائعة (CEL)، ويتم استيراد مكتبة الدوال المتاحة للغة التعبير الشائعة (CEL) تلقائيًا.
على سبيل المثال، يأخذ تعبير لغة التعبير الشائعة (CEL) التالي عنصر طلب، ويتضمّن الطلب رمزًا مميّزًا claims. يعرض التعبير قيمة منطقية تشير إلى ما إذا كان الرمز المميّز claims لا يزال صالحًا.
مثال على تعبير لغة التعبير الشائعة (CEL) لمصادقة رمز مميّز للمطالبات
// Check whether a JSON Web Token has expired by inspecting the 'exp' claim.
//
// Args:
// claims - authentication claims.
// now - timestamp indicating the current system time.
// Returns: true if the token has expired.
//
timestamp(claims["exp"]) < now
في حين أنّ المستخدمين يحدّدون تعبير لغة التعبير الشائعة (CEL)، تحدّد الخدمات والتطبيقات البيئة التي يتم فيها تشغيله.
البيئات
تحدّد الخدمات البيئات. تعلن الخدمات والتطبيقات التي تضمّن لغة التعبير الشائعة (CEL) عن بيئة التعبير. البيئة هي مجموعة المتغيّرات والدوال التي يمكن استخدامها في تعبيرات لغة التعبير الشائعة (CEL).
على سبيل المثال، يعلن رمز textproto التالي عن بيئة تحتوي على المتغيّرات request وnow باستخدام رسالة CompileRequest من إحدى خدمات لغة التعبير الشائعة (CEL).
مثال على إعلان بيئة لغة التعبير الشائعة (CEL)
# Format: $SOURCE_PATH/service.proto#CompileRequest
declarations {
name: "request"
ident {
type { message_type: "google.rpc.context.AttributeContext.Request" }
}
}
declarations {
name: "now"
ident {
type { well_known: "TIMESTAMP" }
}
}
تستخدم أداة التحقّق من النوع في لغة التعبير الشائعة (CEL) الإعلانات المستندة إلى proto للتأكّد من أنّ جميع مراجع المعرّفات والدوال ضمن التعبير معلَنة ومستخدَمة بشكلٍ صحيح.
مراحل معالجة التعبير
تتم معالجة تعبيرات لغة التعبير الشائعة (CEL) على ثلاث مراحل:
- تحليل
- شيك
- التقييم
النمط الأكثر شيوعًا لاستخدام لغة التعبير الشائعة (CEL) هو تحليل التعبيرات والتحقّق منها في وقت الإعداد، وتخزين شجرة بناء الجملة المجردة (AST)، ثم استرداد شجرة بناء الجملة المجردة (AST) وتقييمها بشكل متكرّر في وقت التشغيل.
رسم توضيحي لمراحل معالجة لغة التعبير الشائعة (CEL)

يتم تحليل لغة التعبير الشائعة (CEL) من تعبير قابل للقراءة إلى شجرة بناء جملة مجردة (AST) باستخدام محلّل معجمي
ANTLR وقواعد المحلّل اللغوي. تُنشئ مرحلة التحليل شجرة بناء جملة مجردة (AST) مستندة إلى proto، حيث تحتوي كل عقدة Expr في شجرة بناء الجملة المجردة (AST) على رقم تعريف عدد صحيح يُستخدم
للفهرسة في البيانات الوصفية التي يتم إنشاؤها أثناء التحليل والتحقّق. الملف
syntax.proto الذي يتم إنشاؤه أثناء التحليل يمثّل
التمثيل المجرّد لما تم إدخاله في النموذج السلسلي للـ
تعبير.
بعد تحليل التعبير، يتم التحقّق من نوعه مقابل البيئة للتأكّد من أنّ جميع معرّفات المتغيّرات والدوال في التعبير معلَنة ومستخدَمة بشكلٍ صحيح. تُنشئ أداة التحقّق من النوع
checked.proto ملف يتضمّن بيانات وصفية لحل النوع والمتغيّر والدالة
يمكن أن تحسّن بشكل كبير من كفاءة التقييم.
أخيرًا، بعد تحليل التعبير والتحقّق منه، يتم تقييم شجرة بناء الجملة المجردة (AST) المخزّنة.
يحتاج مُقيّم لغة التعبير الشائعة (CEL) إلى ثلاثة عناصر:
- روابط الدوال لأي إضافات مخصّصة
- روابط المتغيّرات
- شجرة بناء جملة مجردة (AST) لتقييمها
يجب أن تتطابق روابط الدوال والمتغيّرات مع ما تم استخدامه لتجميع شجرة بناء الجملة المجردة (AST). يمكن إعادة استخدام أي من هذه الإدخالات في عمليات تقييم متعدّدة، مثل تقييم شجرة بناء جملة مجردة (AST) في العديد من مجموعات روابط المتغيّرات، أو استخدام المتغيّرات نفسها مقابل العديد من أشجار بناء الجملة المجردة (AST)، أو استخدام روابط الدوال طوال فترة بقاء العملية (وهي حالة شائعة).
التحقّق الرسمي
بالإضافة إلى التقييم في وقت التشغيل، يمكن التحقّق رسميًا من تعبيرات وسياسات لغة التعبير الشائعة (CEL) لإثبات صحتها رياضيًا على جميع الإدخالات الممكنة.
بالاستناد إلى أداة إثبات النظريات Z3، يحوّل إطار عمل التحقّق الرسمي للغة التعبير الشائعة (CEL) في CEL-Java التعبيرات وسياسات لغة التعبير الشائعة (CEL) إلى صيغ Satisfiability Modulo Theories (SMT) من أجل:
- إثبات الثوابت الأمنية: التأكّد من أنّه لا يمكن تجاوز السياسات المهمة في أي مجموعة من الإدخالات باستخدام مواصفات
assumeوassert. - التحقّق من التكافؤ المنطقي: إثبات رياضيًا أنّ التعبيرات التي تم إعادة هيكلتها أو التي تم إنشاؤها باستخدام الذكاء الاصطناعي تتصرف بشكل مطابق للقاعدة الأصلية.
- فرض الصلاحية الشاملة: ضمان تطبيق الحواجز الوقائية (مثل سياسات التحقّق من طلبات القبول في Kubernetes) على جميع الإدخالات، أو إنشاء أمثلة مضادة ملموسة عند انتهاكها.
- إزالة النتائج الإيجابية الخاطئة: استخدام تتبُّع التلوّث بثلاث مراحل لعزل الدوال المخصّصة غير المحدّدة، ما يضمن أنّ الانتهاكات المُبلَغ عنها هي دائمًا أخطاء قابلة للتكرار.
للحصول على مقدمة وأمثلة من العالم الواقعي، يمكنك الاطّلاع على مشاركة مدونة Google Open Source post: Securing the agentic era: Introducing formal verification for CEL.