Приложение 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 обрабатываются следующим образом:

  1. При создании правила решение проводит базовую проверку синтаксиса CEL (англ. Parse) и базовую проверку типов, переменных и функций CEL (англ. Check).
  2. При запуске проверки пользовательских правил выполняются следующие действия:
    • При проверке содержания файла хоста Kaspersky Container Security просматривает правила на наличие функций, которые могут создавать проблемы безопасности, и выполняет следующие действия:
      • Решение блокирует правила, если в них есть функции matches(), startsWith() и endsWith(). При этом для проверяемого узла указывается, что проверка завершилась с ошибкой (англ. Failed).
      • Для функции contains() решение к имеющемуся значению добавляет символ конца строки (англ. EOL) для поиска по суффиксу строки.
    • CEL осуществляет проверку с переданными в правиле переменными.

Рекомендации по созданию пользовательских правил на языке 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).

Вам помогла эта статья?
Что нам нужно улучшить?
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!
Спасибо за ваш отзыв, вы помогаете нам становиться лучше!