- Дата публикации
Microsoft AGT: как построить «shift‑left»‑губернанс для AI‑агентов до продакшена
Что нового
Microsoft развивает Agent Governance Toolkit (AGT) из набора рантайм‑ограничений в полный «shift‑left»‑контур для AI‑агентов. Теперь контроль не ограничивается моментом вызова инструмента или общения агентов между собой. AGT закрывает почти весь жизненный цикл разработки:
-
Коммит‑тайм — локальные pre‑commit‑хуки на машине разработчика:
- валидация YAML/JSON‑политик по схеме;
- проверка манифестов плагинов;
- оценка плагинов на соответствие корпоративной политике;
- поиск заглушек (TODO/FIXME/NotImplementedError);
- блокировка несанкционированной криптографии;
- поиск секретов через detect‑secrets.
-
PR‑тайм (GitHub Pull Request):
- Governance Attestation — чек‑лист по безопасности, приватности, Responsible AI, доступности и запуску;
- dependency‑review с порогом fail-on-severity: moderate и белым списком лицензий;
- секрет‑сканирование (Gitleaks + поиск высокоэнтропийных строк);
- supply‑chain‑гейты: строгий пин версий и обязательные lock‑файлы;
- качественные гейты: запрет заглушек, сырой криптографии и изменений в security‑коде без аудита.
-
CI/Build‑тайм:
- composite‑action Governance Verify (четыре режима:
governance-verify,marketplace-verify,policy-evaluate,all); - отдельный security‑scan action с порогом по severity и файлом исключений;
- отдельный пайплайн валидации политик;
- CodeQL для Python и TypeScript;
- сканер dependency confusion;
- аудит GitHub Actions workflow на expression injection, права и пин версий action‑ов;
- BinSkim для .NET‑сборок;
- шаблон
ci-completeкак единый required check.
- composite‑action Governance Verify (четыре режима:
-
Release‑тайм:
- генерация SBOM (Syft/Anchore) в форматах SPDX и CycloneDX;
- подписание Python‑артефактов через Sigstore;
- Authenticode и NuGet‑подпись .NET‑пакетов;
- SLSA‑attestation билда (
actions/attest-build-provenance); - attestation SBOM к конкретному артефакту.
Плюс Microsoft встроила правила на уровне языков:
- .NET (Microsoft.AgentGovernance) —
Nullableвключён,TreatWarningsAsErrors=true, strong‑name‑подпись, детерминированные сборки, SourceLink, символы. - TypeScript (@microsoft/agentmesh-sdk) —
strict: true,forceConsistentCasingInFileNames, генерация деклараций и declarationMap, ESLint. - Python —
py.typed, mypy и ruff в CI.
Это превращает AGT в сквозной каркас для governance AI‑агентов от первого коммита до релиза.
Как это работает
Почему одного рантайма мало
AI‑агент — это не просто REST‑сервис. Он:
- сам выбирает инструменты и API;
- читает базы данных;
- поднимает подпроцессы и циклы без человека в петле.
OWASP Agentic AI Top 10 (декабрь 2025) описывает риски: избыточная автономность, небезопасная работа с инструментами, эскалация привилегий, supply chain‑компрометация. Эти угрозы появляются не только в рантайме, но и:
- при коммите;
- при ревью PR;
- на сборке;
- при выпуске релиза.
AGT разносит проверки по этим четырём точкам.
1. Коммит‑тайм: pre‑commit‑хуки
AGT использует стандартную экосистему pre-commit. В репозитории лежит .pre-commit-hooks.yaml с тремя базовыми хуками:
- validate-policy — валидирует YAML/JSON‑политики по схеме AGT, проверяет обязательные поля, операторы и структуру.
- validate-plugin-manifest — проверяет манифесты плагинов (plugin.json / plugin.yaml / plugin.yml) на заполненность и соответствие схеме.
- evaluate-plugin-policy — прогоняет манифест плагина через governance‑политику организации и решает, можно ли его использовать.
Подключение:
# .pre-commit-config.yaml
repos:
- repo: https://github.com/microsoft/agent-governance-toolkit
rev: main # pin to a release tag in production
hooks:
- id: validate-policy
- id: validate-plugin-manifest
- id: evaluate-plugin-policy
args: ['--policy', 'policies/marketplace-policy.yaml']
Установка и запуск:
pip install pre-commit
pre-commit install
pre-commit run --all-files
Расширенные quality‑gates в шаблоне rollout‑конфига добавляют:
agt-validate— строгий прогон CLI‑политик, ловит не только ошибки схемы, но и конфликтующие правила.agt-doctor(pre-push) — health‑check конфигурации governance перед тем, как код уйдёт с машины.agency-json-required— проверяет, что у каждого плагина естьagency.jsonс метаданными.no-stubs— блокирует TODO, FIXME, HACK,raise NotImplementedErrorв продакшн‑коде (тесты исключены).no-custom-crypto— запрещает прямой импортhashlib,hmac,crypto.subtle,System.Security.Cryptography,ring,ed25519-dalekвне специально помеченных security‑модулей. Вся криптография должна идти через проверенные библиотеки AGT.detect-secrets— интеграция с Yelp detect‑secrets.
Роллаут по неделям построен так, чтобы не ломать процесс:
- 1 неделя — хуки в предупреждающем режиме, ничего не блокируют.
- 2 неделя — блокирующий режим только для валидации политик.
- 3 неделя — все хуки становятся блокирующими для коммита.
- 4 неделя — полное включение, без «мягкого» пути.
2. PR‑тайм: GitHub Actions как второй рубеж
Pre‑commit легко обойти: force‑push, коммит из веб‑интерфейса, отсутствие хуков у контрибьютора. Поэтому AGT добавляет слой GitHub Actions.
Governance Attestation
Action microsoft/agent-governance-toolkit/action/governance-attestation@main проверяет, что автор PR заполнил структурированный чек‑лист. По умолчанию есть семь секций:
- Security review
- Privacy review
- Legal review
- Responsible AI review
- Accessibility review
- Release Readiness / Safe Deployment
- Org-specific Launch Gates
Организация может менять список секций, требуемую длину описания и формат. Action отдаёт статус, список ошибок и JSON‑карту «секция → количество чекбоксов».
Пример workflow:
# .github/workflows/pr-governance.yml
name: PR Governance
on:
pull_request:
types: [opened, edited, synchronize]
jobs:
attestation:
runs-on: ubuntu-latest
steps:
- uses: microsoft/agent-governance-toolkit/action/governance-attestation@main
with:
required-sections: |
1) Security review
2) Privacy review
3) Responsible AI review
Dependency review и лицензии
AGT опирается на actions/dependency-review-action@v4:
- uses: actions/dependency-review-action@v4
with:
fail-on-severity: moderate
comment-summary-in-pr: always
allow-licenses: >
MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC,
PSF-2.0, Python-2.0, 0BSD, Unlicense, CC0-1.0,
CC-BY-4.0, Zlib, BSL-1.0, MPL-2.0
Action срабатывает на PR, которые меняют package.json, Cargo.toml, pyproject.toml, requirements.txt. Он:
- помечает зависимости с CVE уровня moderate и выше;
- блокирует зависимости с лицензиями вне списка.
Секрет‑сканирование и supply chain
Секреты ищутся двумя методами:
- Gitleaks — регулярки по всей истории git.
- поиск высокоэнтропийных строк: шаблоны
ghp_,gho_,AKIA,xox, base64 с высокой энтропией.
Отдельный workflow для supply chain проверяет:
- отсутствие
^и~в версиях вpackage.json; - наличие lock‑файлов (
package-lock.json,pnpm-lock.yaml,yarn.lock) в директориях с зависимостями.
PR‑quality‑гейты
На уровне PR дублируются ограничения из pre‑commit, плюс добавляются новые:
- No Stubs/TODOs — блокирует TODO/FIXME/HACK в продакшн‑коде.
- No Unauthorized Crypto — блокирует прямую криптографию вне доверенных модулей.
- Security Audit Required — изменения в чувствительных к безопасности путях требуют сопроводительной документации аудита.
- Dependency Audit Trail — для «вендоренных» патчей нужен audit‑лог с объяснением происхождения и сути патча.
3. CI/Build‑тайм: тяжёлые проверки
Governance Verify Action
Composite‑action microsoft/agent-governance-toolkit/action@main разворачивает AGT и запускает CLI‑проверки. Поддерживаются режимы:
governance-verify— полный комплаенс‑чек по контролям;marketplace-verify— проверка манифеста плагина на требования маркетплейса (обязательные поля, подпись, метаданные);policy-evaluate— оценка конкретного файла политики на JSON‑контексте с возвратом allow/deny и совпавшего правила;all— сначалаgovernance-verify, потом marketplace/policy‑evaluate, если указаны пути.
Пример:
# .github/workflows/governance-ci.yml
name: Governance CI
on: [push, pull_request]
jobs:
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: microsoft/agent-governance-toolkit/action@main
with:
command: all
policy-path: policies/
manifest-path: plugin.json
output-format: json
fail-on-warning: 'true'
Action выдаёт JSON с controls-passed, controls-total, количеством нарушений и полным логом. Это удобно для дашбордов и автоматических решений (например, автозакрытие PR или оповещения в Slack).
Security Scan Action
Отдельный action для анализа содержимого репозитория:
- uses: microsoft/agent-governance-toolkit/action/security-scan@main
with:
paths: 'plugins/ scripts/'
min-severity: high
exemptions-file: .security-exemptions.json
Он ищет:
- секреты;
- CVE в зависимостях;
- опасные шаблоны кода.
Порог по severity настраивается (critical/high/medium/low). Файл исключений хранит уже принятые риски. Выход — структурированный JSON с findings-count, blocking-count и списком находок.
Валидация политик и статический анализ
Отдельный workflow запускается при изменении YAML‑политик или исходников policy‑движка. Он:
- Находит все файлы с шаблоном
*policy*. - Валидирует каждый через CLI AGT.
- Запускает unit‑тесты policy‑движка.
Параллельно работают:
- CodeQL для Python и TypeScript, результаты загружаются как SARIF в Security‑вкладку GitHub.
- dependency confusion scanner — проверяет, что внутренние имена пакетов не пересекаются с PyPI/npm, и что
pip installв ноутбуках указывают только ожидаемые пакеты. - workflow security audit — анализирует
.github/workflows:- ищет expression injection (
${{ github.event.pull_request.title }}вrun:); - проверяет, не запрошены ли избыточные permissions;
- ищет action‑ы, подключённые по ветке, а не по SHA.
- ищет expression injection (
- BinSkim для .NET‑сборок Microsoft.AgentGovernance — проверка настроек DEP, ASLR, защиты стека и других флагов компиляции. Отчёты тоже уходят в Security‑раздел.
Паттерн ci-complete
Чтобы branch protection работал с условными job‑ами, AGT использует общий gate:
- job
ci-completeпомечен как единственный required check; - он всегда запускается (
if: always()); - зависит от всех остальных CI‑job‑ов;
- проверяет, что ни один не упал (skipped допускается).
Это решает типичную ситуацию, когда пропущенный job ломает защиту ветки.
Языковые ограничения на этапе сборки
.NET (Microsoft.AgentGovernance):
<Nullable>enable</Nullable>— компилятор предупреждает о возможныхnull‑разыменованиях.<TreatWarningsAsErrors>true</TreatWarningsAsErrors>— любые предупреждения превращаются в ошибки для packable‑проектов.<SignAssembly>true</SignAssembly>и ключAgentGovernance.snk— strong‑name‑подпись.<ContinuousIntegrationBuild>true</ContinuousIntegrationBuild>— детерминированные сборки, один и тот же код даёт бит‑в‑бит одинаковый бинарь.- SourceLink через
Microsoft.SourceLink.GitHub— разработчики могут шагать по исходникам AGT при отладке. - Публикация
.snupkgс символами.
TypeScript (@microsoft/agentmesh-sdk):
"strict": trueвtsconfig.json— включеныnoImplicitAny,strictNullChecks,strictFunctionTypes,strictBindCallApplyи др.forceConsistentCasingInFileNames— защита от багов из‑за разного регистра на Windows/macOS и Linux.declaration: trueиdeclarationMap: true— генерация.d.tsи карт для downstream‑типизации.- ESLint с
@typescript-eslint— дополнительный статический анализ поверх TS‑компилятора.
Python:
py.typedв каждом пакете — сигнал mypy/pyright/Pylance, что библиотека типизирована.- mypy как dev‑зависимость с настройками в
pyproject.toml. - ruff как быстрый линтер, также конфигурируется в
pyproject.tomlи запускается в CI.
4. Release‑тайм: финальный контроль
На этапе релиза AGT добавляет аттестацию артефактов:
- SBOM — Syft/Anchore формируют SPDX и CycloneDX с полным списком компонентов и лицензий.
- Подпись Python‑пакетов — Sigstore с использованием OIDC‑идентичности, без ручного развёртывания ключей.
- .NET‑подпись — Authenticode и NuGet‑подпись через release‑пайплайн.
- Build provenance —
actions/attest-build-provenanceсоздаёт SLSA‑совместимую аттестацию, связывая бинарь с коммитом и окружением. - SBOM attestation —
actions/attest-sbomжёстко привязывает SBOM к конкретному артефакту.
Что это значит для вас
Для кого полезен AGT
-
Команды, которые строят AI‑агентов с доступом к продакшн‑данным.
- Нужны строгие ограничения на то, какие инструменты агент может вызвать.
- Важна трассировка: кто что изменил в политике, какие плагины разрешены.
-
Организации с требованиями compliance и аудита.
- Нужны SBOM, подписи артефактов, SLSA‑provenance.
- Требуется формализованный чек‑лист по безопасности, приватности, Responsible AI и запуску.
-
Команды с распределённой разработкой и внешними контрибьюторами.
- Pre‑commit легко проигнорировать, поэтому второй слой в виде GitHub Actions важен.
- Жёсткие гейты на PR и CI снижают риск того, что в код попадёт небезопасный плагин или сырой криптокод.
-
Разработчики SDK и платформ для агентов.
- Языковые настройки .NET/TS/Python в AGT можно взять как шаблон для своих библиотек.
Какие задачи это решает
-
Раннее обнаружение ошибок в политиках.
- Опечатка в YAML больше не отключит все deny‑правила незаметно — хуки поймают это до пуша.
-
Управление зависимостями и лицензиями.
- PR с CVE ≥ moderate или запрещённой лицензией просто не сольётся.
-
Защита секретов.
- Секреты ловятся и в момент коммита, и при анализе всей истории.
-
Защита цепочки поставок.
- Обязательные lock‑файлы, запрет плавающих версий, проверка на dependency confusion, pinned actions в CI.
-
Кодовая дисциплина.
- Никаких TODO/FIXME в проде, никакой самодельной криптографии в обход проверенных библиотек.
-
Прозрачность релизов.
- На каждый артефакт есть SBOM, подпись и provenance, что облегчает реакцию на новые уязвимости вроде log4j.
Где AGT не спасёт
- От плохой архитектуры агента. Если дизайн агента даёт ему слишком много прав, AGT не превратит его в безопасный продукт сам по себе.
- От отсутствия процессов. Чек‑листы и гейты помогут только если команда реально их использует и не отключает ради скорости.
- От неизвестных 0‑day. Инструменты анализа кода и бинарей не гарантируют, что в зависимостях нет ещё не раскрытых уязвимостей.
Доступность и инфраструктура
AGT завязан на:
- GitHub Actions;
- экосистему Python (
pip, pre-commit, detect‑secrets, mypy, ruff); - инструменты Microsoft (.NET, BinSkim).
Если вы работаете в инфраструктуре без доступа к GitHub или с ограниченным доступом к облачным сервисам, придётся адаптировать пайплайны под свой CI (GitLab CI, Jenkins и т.п.). В материале Microsoft не указаны региональные ограничения, но GitHub Actions и связанные сервисы могут работать нестабильно или быть ограничены в некоторых юрисдикциях. Для российских команд это может означать необходимость локального зеркалирования зависимостей и развёртывания аналогичных пайплайнов у себя.
Место на рынке
AGT конкурирует не с конкретной LLM, а с классом инструментов для DevSecOps и governance AI‑систем.
Если сравнивать по функциональности:
-
В отличие от обычных SAST/DAST‑решений (CodeQL, SonarQube, классические сканеры уязвимостей), AGT добавляет доменные проверки именно для AI‑агентов:
- валидация политик агентов;
- оценка манифестов плагинов;
- маппинг на OWASP Agentic AI Top 10.
-
По сравнению с голым GitHub Actions:
- AGT даёт готовые composite‑actions и хуки, а не набор разрозненных шагов;
- есть единый
governance-verifyиsecurity-scanс унифицированным JSON‑выходом.
-
По отношению к классическим supply chain‑инструментам (Syft, Sigstore, OpenSSF Scorecard):
- AGT не заменяет их, а собирает в один каркас и дополняет специфическими для агентов проверками.
Прямых цифр по скорости, стоимости или сравнению с другими AI‑governance‑платформами Microsoft не приводит. Но по набору фич видно, что AGT рассчитан на команды, которые уже используют GitHub и экосистему Microsoft, и хотят получить готовый шаблон «как сделать governance для агентов правильно».
Установка / Как запустить
1. Подключить pre‑commit‑хуки AGT
- Добавьте в репозиторий файл
.pre-commit-config.yaml:
repos:
- repo: https://github.com/microsoft/agent-governance-toolkit
rev: main # pin to a release tag in production
hooks:
- id: validate-policy
- id: validate-plugin-manifest
- id: evaluate-plugin-policy
args: ['--policy', 'policies/marketplace-policy.yaml']
- Установите и активируйте pre‑commit:
pip install pre-commit
pre-commit install
pre-commit run --all-files
2. Добавить PR‑гейты
Пример минимального workflow для governance‑аттестации:
# .github/workflows/pr-governance.yml
name: PR Governance
on:
pull_request:
types: [opened, edited, synchronize]
jobs:
attestation:
runs-on: ubuntu-latest
steps:
- uses: microsoft/agent-governance-toolkit/action/governance-attestation@main
with:
required-sections: |
1) Security review
2) Privacy review
3) Responsible AI review
Дополнительно добавьте dependency‑review:
- uses: actions/dependency-review-action@v4
with:
fail-on-severity: moderate
comment-summary-in-pr: always
allow-licenses: >
MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC,
PSF-2.0, Python-2.0, 0BSD, Unlicense, CC0-1.0,
CC-BY-4.0, Zlib, BSL-1.0, MPL-2.0
3. Настроить CI‑проверки AGT
Добавьте workflow governance-ci.yml:
# .github/workflows/governance-ci.yml
name: Governance CI
on: [push, pull_request]
jobs:
verify:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: microsoft/agent-governance-toolkit/action@main
with:
command: all
policy-path: policies/
manifest-path: plugin.json
output-format: json
fail-on-warning: 'true'
И добавьте security‑скан:
jobs:
security-scan:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: microsoft/agent-governance-toolkit/action/security-scan@main
with:
paths: 'plugins/ scripts/'
min-severity: high
exemptions-file: .security-exemptions.json
4. Включить release‑гейты
В release‑пайплайне:
- вызовите Syft/Anchore для генерации SBOM в SPDX и CycloneDX;
- подпишите Python‑пакеты через Sigstore;
- подключите Authenticode/NuGet‑подпись для .NET;
- добавьте
actions/attest-build-provenanceиactions/attest-sbomдля аттестации билда и SBOM.
Эти шаги можно встроить в существующий GitHub Release workflow или в корпоративный релизный конвейер.
AGT в текущем виде — это про дисциплину и предсказуемость в эпоху AI‑агентов. Если вы уже пишете агентов, которые ходят в продакшн‑сервисы и базы, и хотите спать спокойнее, имеет смысл посмотреть на этот набор гейтов как на базовый каркас и адаптировать его под свои процессы.