Приложение 2. Создание пользовательских правил на языке CEL
04 сентября 2026
ID 325717
В Kaspersky Container Security для создания пользовательских правил используется общий язык выражений CEL (англ. Common Expression Language), который - предназначен для быстрой оценки условий над структурированными данными (например, данными в формате JSON или YAML). Этот язык используется решением для нахождения сущностей, которые не соответствуют пользовательским правилам.
В Kaspersky Container Security правила на языке CEL используются для проверки JSON-файла для проверяемого объекта на соответствие заданным параметрам. Правила используются при следующих проверках:
- Проверка на соответствие отраслевым стандартам. Проверка осуществляется для следующих входных объектов:
- Ресурс Kubernetes.
- Набор прав и разрешений файла хоста.
- Содержание файла хоста.
- Аргументы процесса на хосте.
Входящие данные для проверки на соответствие отраслевым стандартам
- Реализация политик контроля доступа. Проверка осуществляется для объекта AdmissionReview с информацией об изменяемом ресурсе Kubernetes.
Входящие данные для проверки при реализации политик контроля доступа
- Реализация политик безопасности образов. Проверка проводится для отчета о сканировании образа.
Входящие данные для проверки при реализации политик безопасности образов
Вы можете обработать свои файлы в формате JSON с помощью инструмента для работы с CEL.
Проверка пользовательских правил на языке CEL
Kaspersky Container Security проверяет пользовательские правила на языке CEL, с помощью встроенного инструмента для обработки выражений CEL, а также применяет к правилам дополнительные ограничения. Выражения CEL обрабатываются следующим образом:
- При создании правила решение проводит базовую проверку синтаксиса CEL (англ. Parse) и базовую проверку типов, переменных и функций CEL (англ. Check).
- При запуске проверки пользовательских правил выполняются следующие действия:
- При проверке содержания файла хоста Kaspersky Container Security просматривает правила на наличие функций, которые могут создавать проблемы безопасности, и выполняет следующие действия:
- Решение блокирует правила, если в них есть функции
matches(),startsWith()иendsWith(). При этом для проверяемого узла указывается, что проверка завершилась с ошибкой (англ. Failed). - Для функции
contains()решение к имеющемуся значению добавляет символ конца строки (англ. EOL) для поиска по суффиксу строки.
- Решение блокирует правила, если в них есть функции
- CEL осуществляет проверку с переданными в правиле переменными.
- При проверке содержания файла хоста Kaspersky Container Security просматривает правила на наличие функций, которые могут создавать проблемы безопасности, и выполняет следующие действия:
Рекомендации по созданию пользовательских правил на языке CEL
При создании пользовательских правил на языке CEL нужно придерживаться следующих рекомендаций:
- Используйте простые конструкции, поскольку язык CEL оптимально подходит для коротких логических выражений.
- Формулируйте правило так, чтобы при его проверке можно было получить значение
trueилиfalse. - Используйте функции приведения (например,
int(event.attributes.ip)иtimestamp(event.attributes.time)). Если этого не сделать, тип выводится автоматически. - Старайтесь не использовать функции, которые могут увеличить время обработки правила. Например, функции
size()иcontains(), а также регулярные выражения работают быстро, но их частое применение к большим массивам требует большего времени для обработки. - Перед обращением к вложенным полям массива используйте оператор
has()(например,has(event.principal.role) && event.principal.role == "admin"). - Не полагайтесь на порядок вычисления, поскольку порядок вычисления подвыражений в CEL не определен. Также не используйте побочные эффекты, так как в CEL они отсутствуют.
- При необходимости используйте точечную нотацию при обращении к полям (например,
event.principal.role == "admin" && event.resource.type == "file"). - Проверяйте создаваемые правила в изолированной среде (например, с помощью
cel-go), чтобы убедиться, что правило правильно обрабатывает входные данные. - Указывайте цель проверки с помощью комментария рядом с выражением (например,
// Allow admin read access to files). - При необходимости проверку времени проводите с помощью параметра с текущим значением времени
now(формат временной метки, например2023-01-01T00:00:00Z).