Дата публикации
ai_products

Microsoft AGT: как построить «shift‑left»‑губернанс для AI‑агентов до продакшена

Что нового

Microsoft развивает Agent Governance Toolkit (AGT) из набора рантайм‑ограничений в полный «shift‑left»‑контур для AI‑агентов. Теперь контроль не ограничивается моментом вызова инструмента или общения агентов между собой. AGT закрывает почти весь жизненный цикл разработки:

  1. Коммит‑тайм — локальные pre‑commit‑хуки на машине разработчика:

    • валидация YAML/JSON‑политик по схеме;
    • проверка манифестов плагинов;
    • оценка плагинов на соответствие корпоративной политике;
    • поиск заглушек (TODO/FIXME/NotImplementedError);
    • блокировка несанкционированной криптографии;
    • поиск секретов через detect‑secrets.
  2. PR‑тайм (GitHub Pull Request):

    • Governance Attestation — чек‑лист по безопасности, приватности, Responsible AI, доступности и запуску;
    • dependency‑review с порогом fail-on-severity: moderate и белым списком лицензий;
    • секрет‑сканирование (Gitleaks + поиск высокоэнтропийных строк);
    • supply‑chain‑гейты: строгий пин версий и обязательные lock‑файлы;
    • качественные гейты: запрет заглушек, сырой криптографии и изменений в security‑коде без аудита.
  3. 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.
  4. 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.
  • Pythonpy.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 заполнил структурированный чек‑лист. По умолчанию есть семь секций:

  1. Security review
  2. Privacy review
  3. Legal review
  4. Responsible AI review
  5. Accessibility review
  6. Release Readiness / Safe Deployment
  7. 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‑движка. Он:

  1. Находит все файлы с шаблоном *policy*.
  2. Валидирует каждый через CLI AGT.
  3. Запускает 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.
  • 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 provenanceactions/attest-build-provenance создаёт SLSA‑совместимую аттестацию, связывая бинарь с коммитом и окружением.
  • SBOM attestationactions/attest-sbom жёстко привязывает SBOM к конкретному артефакту.

Что это значит для вас

Для кого полезен AGT

  1. Команды, которые строят AI‑агентов с доступом к продакшн‑данным.

    • Нужны строгие ограничения на то, какие инструменты агент может вызвать.
    • Важна трассировка: кто что изменил в политике, какие плагины разрешены.
  2. Организации с требованиями compliance и аудита.

    • Нужны SBOM, подписи артефактов, SLSA‑provenance.
    • Требуется формализованный чек‑лист по безопасности, приватности, Responsible AI и запуску.
  3. Команды с распределённой разработкой и внешними контрибьюторами.

    • Pre‑commit легко проигнорировать, поэтому второй слой в виде GitHub Actions важен.
    • Жёсткие гейты на PR и CI снижают риск того, что в код попадёт небезопасный плагин или сырой криптокод.
  4. Разработчики 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

  1. Добавьте в репозиторий файл .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']
  1. Установите и активируйте 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‑агентов. Если вы уже пишете агентов, которые ходят в продакшн‑сервисы и базы, и хотите спать спокойнее, имеет смысл посмотреть на этот набор гейтов как на базовый каркас и адаптировать его под свои процессы.


Читайте также

Microsoft AGT: как построить «shift‑left»‑губернанс для AI‑агентов до продакшена — VogueTech | VogueTech