Кратко

  • GitHub описывает bypass_actors как субъектов, которые могут обходить ruleset репозитория; это поле конфигурации, а не журнал события.
  • Rule suite — иная поверхность доказательств: в примерах GitHub оценка связана с субъектом, ref, SHA до и после, результатом и отдельными оценками правил.
  • Надёжная запись об исключении хранит отдельно версию политики, возможность, оценённый переход, самостоятельное согласование и последующее наблюдение за поставкой.

Фраза «этот субъект может обойти правило» легко начинает звучать как описание совершившегося действия. На деле она сообщает только о возможности. GitHub позволяет ruleset перечислять субъектов с правом обхода. Такой путь может быть разумным для непрерывности работы, экстренной поддержки или ясного распределения ответственности. Но присутствие пользователя, команды, приложения, роли или ключа в bypass_actors не доказывает ни push, ни pull request, ни конкретную ref, ни проведённую оценку, ни фактический обход, ни согласование.

У конфигурации есть собственная ценность, но и собственный предел. Запись ruleset может показать источник, цель, условия, режим применения, правила и субъектов с правом обхода; GitHub также предоставляет историю версий. По этим данным можно установить, какая политика была записана и кто её изменил в определённый момент. Они не отвечают, что произошло при конкретном переходе. Версия политики не является квитанцией об исполнении.

Граница особенно заметна в документированных режимах. GitHub различает always, pull_request и exempt. При exempt правила не запускаются и запись аудита обхода не создаётся. Это не делает освобождение подозрительным. Но нельзя превращать нынешний список разрешений в список всех прошлых обходов или считать отсутствие записи безусловным доказательством отсутствия значимого действия.

Для перехода конкретной ref нужна rule suite — другой, ограниченный документ. GitHub называет её набором оценок правил и допускает фильтрацию по ref, периоду, субъекту, результату и статусу оценки. Примеры содержат субъект, репозиторий, ref, SHA до и после, время, результат, результат оценки и оценки отдельных правил. Suite с result: bypass может подтвердить в узком смысле, как платформа обработала именно этот переход. Она не подтверждает сама по себе, что получено требуемое человеческое согласование, что основание исключения принято, что изменение слито или что оно достигло production.

Необходимо учитывать и наложение защит. GitHub указывает, что rulesets и правила защиты веток могут работать одновременно и что применяются все подходящие правила. Поэтому один ruleset может не описывать всей политики для данной ref. В свою очередь suite может показывать результаты из нескольких источников правил, не становясь полным досье ревью или управления. Следует отдельно спросить: какая версия политики относилась к этой ref и этому переходу SHA, что оценила платформа и какой другой документ подтверждает заявленное согласование или операционный эффект?

Daniel Kade предлагает ограниченную квитанцию исключения: идентификатор репозитория, точная ref, SHA до и после, время наблюдения, источник и версия ruleset либо безопасно сохранённый снимок политики, субъект и режим обхода, результат suite, результат оценки и отдельные правила, нужные для объяснения. Если нужно согласование, его идентификатор, уполномоченный решающий, объём и время остаются в самостоятельной записи. Последующий merge, tag, релиз или deployment — тоже отдельное наблюдение. Чувствительные детали можно защищать, не смешивая возможность, действие, разрешение и последствие.

Такой подход честно описывает и обычные случаи. Субъект может иметь разрешение и ни разу им не воспользоваться. Обход может быть корректно согласован в отдельном деле. Политика может измениться без движения защищённой ref. Ref может измениться и не попасть в релиз. Ни одно из этих состояний не равно инциденту. Ошибка возникает, когда от одной записи требуют доказать то, чего она никогда не фиксировала.

Источники

  1. GitHub Docs — О rulesets
  2. GitHub Docs — REST API правил
  3. GitHub Docs — REST API rule suites