1. Порядок: приоритет по возрастанию, побеждает первое совпадение
Внутри политики правила вычисляются в порядкеpriority ASC, id ASC:
- Меньший
priorityвыполняется первым. Правило сpriority: 0проверяется до правила сpriority: 10. Думайте об этом как о позиции в очереди, а не оценке силы — меньшее число получает слово первым. - Ничьи разрешаются по id правила. Два правила с одним
priorityвыполняются в порядке создания (возрастающий id правила), так что более старое правило побеждает в ничьей. Используйте разные приоритеты, когда порядок реально важен, а не полагайтесь на разрешение ничьи по id. - Побеждает первое совпадение. Движок останавливается на первом правиле, чьи условия все держатся, и применяет его вердикт. Правила дальше по списку никогда не консультируются для этого вызова.
- Нет совпадения → default-вердикт. Если ничего не совпало, применяется
default_verdictполитики —audit, если вы его не изменили.
Правило совпадает, только когда каждое объявленное условие держится сразу:
поверхность,
глоб имени инструмента, опциональный глоб
навыка, опциональные клаузы аргументов
и область egress (только egress-правила). Частичное совпадение — не совпадение,
и вычисление переходит к следующему правилу.
2. Один конкретный пример: конкретное перед широким
Каноническая задача упорядочивания — дать узкому allow пережить широкий deny. Поставьте конкретное правило на меньший приоритет, так чтобы оно достигалось первым:shell.echo попадает сначала на Rule A (priority 10), совпадает и
разрешается — движок никогда не достигает Rule B. Вызов shell.exec
проваливается через A (глоб не совпадает), попадает на Rule B и
отклоняется.
Переверните приоритеты, и широкий deny shell.* на priority 10 поймал бы
shell.echo первым, а ваш allow на priority 20 был бы мёртвым кодом. Правило
большого пальца: самое конкретное первым, самое широкое последним.
3. Проверьте порядок, прежде чем полагаться на него
Рассуждать о приоритете на бумаге чревато ошибками, как только в политике больше горстки правил. Песочница Test запускает реальный движок против образца вызова инструмента и говорит вам не только вердикт, но какое правило победило — так что вы можете подтвердить, что правило, которое вы ожидали, реально сработало:Отправьте образец вызова
Введите имя инструмента (и аргументы, если ваши правила их инспектируют) и
запустите. Ничего не диспетчеризуется и ничего не сохраняется — это прогон
вхолостую.
4. Применение навыка накладывается сверху
Приоритет правил решает вердикт побеждающего правила — но это не всегда финальный ответ. Если вызов инструмента принадлежит управляемому навыку, режим применения навыка накладывается поверх побеждающего вердикта, после разрешения first-match:| Режим навыка | Эффект на побеждающий вердикт |
|---|---|
allow | Без изменений — вердикт правила стоит. |
quarantine | Эскалирует всё, что меньше deny, до pending_approval; существующий deny оставляется как есть. |
block | Принудительно даёт deny независимо от вердикта правила. |
quarantine может превратить allow правила в удержанный вызов, а
навык block отклоняет вызов, даже когда ни одно правило не называет его
инструменты. Quarantine только эскалирует — он никогда не понижает deny до
чего-то более мягкого. Вот почему навык, авто-детектированный как рискованный,
остаётся в карантине, пока вы его не проверите, как бы разрешительны ни были
ваши правила.
5. Вещи, которые не идут по first-match
Несколько механизмов сидят вне per-rule прохода приоритета — знайте, где они приземляются, чтобы не пытаться их упорядочить:cap_cost — разрешается, не ранжируется
cap_cost — разрешается, не ранжируется
Правило
cap_cost под своим потолком
трактуется как несовпадающее, так что вычисление продолжается к
следующему правилу, а не позволяет ему победить first-match как разрешение.
Над потолком оно разрешается в deny. Оно никогда не замыкает накоротко
правило с меньшим приоритетом просто будучи достигнутым.Последовательности — реактивные, не inline
Последовательности — реактивные, не inline
Правило последовательности
совпадает с цепочкой вызовов в окне времени, так что оно применяется
реактивно асинхронным сопоставителем, а не на единственном вызове, который
завершает цепочку. Оно зажигает ленту событий, но не побеждает проход
first-match для отдельного вызова.
Shadow-режим — применяется после вердикта
Shadow-режим — применяется после вердикта
Shadow-режим не меняет, какое правило
побеждает — он понижает побеждающий применяющий вердикт до
audit
(причина с префиксом [shadow] would …) после разрешения first-match, так
что вы можете измерить влияние политики до того, как она изменит трафик.6. Собираем вместе
Для любого вызова инструмента полное разрешение такое:- Разрешить политику — привязанную к вызывающему ключу или default рабочего пространства. См. область.
- Пройти правила в
priority ASC, id ASC— побеждает первое совпадение; нет совпадения →default_verdict. - Применить применение навыка — режим управляемого навыка накладывается
поверх побеждающего вердикта (
blockпринудительно даёт deny,quarantineэскалирует). - Применить shadow-режим — если включён, понизить применяющие вердикты до
audit. - Записать событие — вердикт, поверхность, инструмент и совпавшее правило приземляются в ленте событий.
Редактирование приоритета правила вступает в силу на следующем вызове для
каждого ключа, привязанного к политике — без передеплоя, без изменений в коде
агента. Перезапустите песочницу Test после
переупорядочивания, чтобы подтвердить нового победителя, прежде чем живой
трафик от него зависит.
Куда двигаться дальше
Вердикты
Что каждый побеждающий вердикт реально делает.
Синтаксис глобов
Как сопоставление имени инструмента решает, является ли правило вообще кандидатом.
Тестирование правил
Прогоните политику вхолостую и увидьте, какое правило побеждает.
Allow-листинг инструментов
Паттерн default-deny, который опирается на упорядочивание сильнее всего.
