Agent 策略分发与可验证信任根:AGT 策略包(Policy Bundle)与注册表体系深度解析

发布时间:2026/9/18 10:59:26
Agent 策略分发与可验证信任根:AGT 策略包(Policy Bundle)与注册表体系深度解析 Agent 策略分发与可验证信任根AGT 策略包Policy Bundle与注册表体系深度解析【免费下载链接】agent-governance-toolkitAI Agent Governance Toolkit — Policy enforcement, zero-trust identity, execution sandboxing, and reliability engineering for autonomous AI agents. Covers 10/10 OWASP Agentic Top 10.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-governance-toolkit导读本文将围绕 Agent Governance ToolkitAGT的 ADR 0029策略分发与注册表verifiable trust完整解析其提出的内容寻址签名策略包policy bundle、可插拔解析器resolver、部署本地信任根trust.yaml与强制锁文件agt-policies.lock四大构件说明它们如何把「磁盘上一个可解析的 YAML 文件」升级为「签名、可验证、可撤销、可回滚的企业级策略供应链」。读完本文你将掌握策略包的格式规范、17 步验证管线、信任根配置的每个字段含义、CLI 与 CI/CD 落地方式以及它与此前 ADREd25519 身份、did:web 联盟、fail-closed、deny 不可变合并、Merkle 审计链如何组合成一条无需引入新密码学原语的完整信任链。一、背景为什么路径加载的策略不再够用AGT 目前把一组固定的 YAML 策略模板内置在agent_os.templates.policies包中并通过基于路径的加载器load_policy_yaml读取。除此之外的策略都以「包外」方式分发手工拷贝进.agents/目录、打进容器镜像、或每个部署各写一套。该 ADR 指出这种模式在三重压力下不再成立企业需要内部分发渠道。平台团队希望把「企业 HIPAA 成本上限基线」发布一次组织内所有 Agent 统一消费并支持版本化、灰度上线与回滚。策略作者社区正在形成。合规专家、研究者和框架集成方希望像 Python 生态发布包一样发布可复用策略FedRAMP、ISO 27001、框架专属护栏。旁路加载sideloading是信任漏洞。一个磁盘上能解析为合法 YAML 的文件就会被加载没有签名、没有发布者身份、没有内容哈希校验、没有透明度记录。任何能写入.agents/或代理 HTTPS 抓取的攻击者都能悄然改变整个部署中每个 Agent 的治理规则。已有的原语不需要发明新的密码学ADR 0029 明确声明它不引入新的密码学原语而是组合 AGT 已有的构件——Ed25519 签名ADR-0001did:web联盟ADR-0007JCS SHA-256 内容哈希与透明度日志拆分ADR-0008策略评估 fail-closedADR-0013合并时父 deny 规则不可变ADR-0014可插拔后端 Protocol 模式ADR-0015Merkle 审计链ADR-0017这些 ADR 文档均位于 docs/adr/ 目录索引见 docs/adr/index.md。与 ADR-0008 的边界分发 ≠ 运行时联盟一个常见混淆点是本 ADR 与 ADR-0008 的关系。ADR-0008 治理的是运行时跨组织策略交集活着的 agent-to-tool 调用过程中本 ADR 治理的是运行时之前的策略制品供应链分发。两者相互独立从 Org Y 的注册表导入一个 bundle不建立与 Org Y 的运行时联盟与 Org Y 建立运行时联盟也不意味着 Y 的策略注册表被信任为分发源。操作员分别配置二者加载器分别强制它们。二、设计约束六条不可妥协的底线Fail closed解析、抓取、签名验证、归档检查、信任根查找中任何一步失败都必须拒绝加载绝不应用「部分策略」延续 ADR-0013。确定性保留同一个policy://URI 锁文件条目必须在不同主机、不同时间解析出相同字节延续 ADR-0004。单一加密故事bundle 的权威永远是「对 JCS 规范化 manifest 的 Ed25519 签名」发布者身份通过did:web或固定的did:key发现Sigstore/Rekor 与 SLSA in-toto 证明仅允许作为出处证据绝不允许作为决定 bundle 是否可信的权威。主权信任根每个部署自行决定信任哪些发布者不存在全局「AGT 官方认证」注册表默认信任集为空。支持隔离环境air-gap无法访问公共透明度日志的企业必须能通过「固定的签名检查点pinned signed-checkpoint」流程离线运作。组合安全性在分发后仍然成立合并或导入的 bundle 不得削弱、遮蔽或降低有效策略集中任何已有 deny 规则的优先级ADR-0014 的广义化。三、决策总览四大构件本 ADR 的核心决策可概括为四句话引入**内容寻址、签名的策略包policy bundle**格式引入可插拔的解析器resolver层可从本地、HTTPS、OCI、Git 四种来源抓取 bundle引入部署本地的信任根trust root把关部署接受哪些发布者引入强制的agt-policies.lock锁文件钉死解析结果的内容哈希保证可复现加载。四、策略包Bundle格式一个策略包是包含以下内容的 tar 归档manifest.json # JCS 规范化schema 见下 policies/*.yaml # 一个或多个策略文件 attestations/ # 可选in-toto / SLSA 出处、Rekor inclusion proof LICENSE # 必选 README.md # 可选但推荐manifest.json 结构class PolicyBundleManifest(BaseModel): schema_version: Literal[1] # 发布者身份 —— 复用 ADR-0007 的 did:web首选或 did:key publisher: str # 例如 did:web:policies.contoso.com name: str # 对 AGT 不透明身份是 (publisher, name) version: str # 严格 semver不允许范围 # SHA-256 针对 RAW FILE BYTES而非解析后的 YAML。路径键为 # 相对 bundle 根目录的规范化 POSIX 路径。 files: dict[str, str] # path - sha256 hex agt_min_version: str requires: list[BundleRef] [] # 仅供参考 —— 可执行的派生版本见 §5 派生能力 declares: BundleCapabilities created_at: str # RFC 3339 class BundleRef(BaseModel): publisher: str # 完整 DID绝不允许裸名字 name: str expected_hash: str # 必填 —— 精确 content_hash 钉扎 # 不允许版本范围。bundle 钉扎的是精确依赖内容哈希。 class BundleCapabilities(BaseModel): # 作者的声明 —— 供人工审查与工具 diff 使用。 # 加载器不信任它见 §5 派生能力。 touches_deny_rules: bool touches_allow_rules: bool touches_egress: bool touches_cost_controls: bool touches_content_filters: bool requires_human_approval: bool declared_compliance: list[str] []内容哈希与签名bundle 的内容哈希是SHA-256(JCS(manifest.json))。manifest 内部的文件哈希是每个归档条目原始字节的 SHA-256——YAML 解析只在验证之后发生。这规避了「两个 YAML 解析器算出不同哈希」这类混乱问题manifest.json用 JCS 规范化遵循 RFC 8785。分离签名manifest.json.sig用 Ed25519ADR-0001覆盖 JCS 规范化的 manifest。五、安全归档摄取解析发生在信任边界内归档处理处于信任边界内。加载器在任何文件系统写入之前必须流式读取 tar 条目并拒绝绝对路径、..组件、反斜杠、盘符drive letters、符号链接、硬链接、设备、FIFO、稀疏条目、重复路径条目、manifest.files 中未列出的路径拒绝总大小超过max_bundle_bytes默认 10 MiB、单条目超过max_file_bytes默认 2 MiB、条目数超过max_files默认 256的包在条目流过时从原始字节计算 SHA-256并把验证过的文件内容保存在内存 map中。实现应当完全避免文件系统解包若使用临时目录必须以受限权限创建且仅在所有哈希与 manifest.files 匹配后才填充若 manifest.files 中任何文件缺失或存在未列出的归档条目则拒绝整个包。六、派生能力Derived Capabilities真正的信任杠杆manifest 中声明的能力只是参考。加载器必须通过 AGT 的规范策略模型解析每个策略 YAML并检查触及了哪些面surface从而派生出有效能力有效能力触发条件touches_deny_rules任何deny:条目、任何标记为 deny 的外部后端touches_allow_rules任何allow:条目touches_egressegress 命名空间中的任何规则touches_cost_controls任何limits:或成本策略条目touches_content_filters任何内容安全模式requires_human_approval任何requires_approval: true强制环节用派生能力与trust.allow_capabilities比较。任何无法识别的策略段、自定义外部后端引用ADR-0015或未映射的面都必须视为unknown并使加载失败除非该发布者的信任条目显式开启allow_unknown_capabilities: true。默认是保守的社区发布者无法把 deny 改动藏进加载器无法分类的段落中蒙混过关。七、解析器协议Resolver Protocol解析层可插拔镜像 ADR-0015 的外部后端模式class PolicyBundleResolver(Protocol): property def scheme(self) - str: ... # file, https, oci, gh, git def resolve(self, uri: str) - ResolvedBundle: ... # 必须返回原始字节 实际抓取到的不可变坐标 # OCI digest、git commit SHA、资产 digest。绝不能验证签名。内置解析器SchemeURI 形式记录在锁文件中的不可变坐标file://file:///etc/agt/bundles/hipaa-1.2.0.tar字节的 sha256https://https://policies.contoso.com/hipaa/1.2.0.tar字节的 sha256oci://oci://registry.contoso.com/policies/hipaa:1.2.0OCI manifest digestgh://gh://contoso/policiesv1.2.0#hipaa.targit commit SHA 资产 SHA-256githttps://githttps://github.com/contoso/policiesv1.2.0git commit SHAADR 直接固化的解析器规则而非推迟实现可变引用OCI tag、git tag、GitHub release 名必须在安装时解析为不可变坐标并钉入锁文件运行时加载只消费不可变坐标。Git 解析器必须做单 commit 的浅克隆子模块默认拒绝Git LFS 默认不水合。git 仓库内的路径必须解析到单个 bundle 归档其内部 manifest 由标准管线验证。v1 不支持松散目录式 bundle。解析器不得执行任何形式的路径穿越归档本身才是被验证的对象。社区注册表就是一个众所周知的https://或oci://解析器 URL 加上did:web或did:key发布者身份。AGT 自己不运营注册表。八、信任根 trust.yaml默认空信任集每个部署携带一个启动时读取的trust.yaml。默认信任集为空没有条目任何 bundle 都不会加载。schema_version: 1 # require_transparency_log_entry 为 true 时必填。 transparency_log: url: https://rekor.sigstore.dev # 钉住日志的公钥。没有它日志只是远程预言机。 public_key_thumbprint: sha256:... # 全局控制默认值如所示 require_transparency_log_entry: true require_provenance_attestation: false # SLSA v1 in-toto max_bundle_age_days: 365 max_bundle_bytes: 10485760 # 10 MiB max_file_bytes: 2097152 # 2 MiB max_files: 256 max_dependency_depth: 4 allow_unknown_capabilities: false # 全局默认 # 操作员本地撤销 —— 与发布者撤销相互独立评估 revoked_content_hashes: [] revoked_key_thumbprints: [] publishers: - did: did:web:policies.contoso.com # 钉住 PUBLIC KEY MATERIAL而不是 kid 标签。kid 只是标识符。 pinned_jwk_thumbprints: - sha256:9f1a... # 当前 - sha256:c0de... # 上一个保留到 max_bundle_age_days 期满 # 可选密钥被攻破时用于撤销的显式恢复密钥。 recovery_key_thumbprints: - sha256:reco... min_version: 1.2.0 # 防回滚镜像 ADR-0008 §3 allow_capabilities: touches_deny_rules: true touches_allow_rules: true touches_egress: false # 该发布者不得编辑 egress touches_cost_controls: true touches_content_filters: true requires_human_approval: true - did: did:key:z6Mki... pinned_jwk_thumbprints: [sha256:z6m...] min_version: 0.4.0 allow_capabilities: touches_deny_rules: false # 社区 bundle 不能编辑 deny touches_allow_rules: true touches_egress: false touches_cost_controls: false touches_content_filters: true requires_human_approval: false命名与命名空间bundle 身份永远是(publisher_did, name)。解析器不得跨注册表解析非限定名称——这从解析器层化解依赖混淆 / 抢注typosquat攻击。AGT 作为潜在的发布者该设计允许 AGT 项目自身像任何其他发布者一样运营注册表——例如用项目持有的 Ed25519 密钥为agent_os/templates/policies/中的模板签名并通过 GitHub Releases 或 GHCR 分发。但「AGT 是否应该这么做、哪些策略进入 known-good 集」超出本 ADR 范围需与社区在后续决策中解决。本 ADR 只保证一旦这样的注册表建立它不需要任何特判——它是普通发布者没有自动信任、没有特殊解析器、没有 trust.yaml 中的隐式位置。操作员用agt policies trust add显式加入与第三方发布者完全一致。现有的load_policy(hipaa)路径保留为零信任入门便利需要签名、可验证、可撤销策略的部署走 bundle 信任根流程。引导Bootstraptrust.yaml是部署的信任根配置。AGT 假定该文件由平台配置通道保护OS 权限、镜像不可变性、GitOps、MDM、签名 K8s ConfigMap。加载器每次启动都必须审计记录信任根路径、其 SHA-256 与 mtime使篡改可观测。签名信任根列为后续工作。九、17 步验证管线任何一步失败即拒绝加载每次 bundle 加载都运行此管线。任何一步失败都是硬失败、拒绝加载ADR-0013不存在「警告后继续」。1. resolve(uri) - raw bytes immutable coord 2. safe archive scan (§5) - in-memory verified file map 3. recompute SHA-256(JCS(manifest)) - content_hash 4. lookup publisher in trust.yaml - trust entry or DENY 5. operator-local revocation check - content_hash, key_thumbprint 6. fetch publisher did:web doc - key setADR-0007 缓存规则 7. verify Ed25519 sig over manifest - 签名密钥 thumbprint 必须在 trust.pinned_jwk_thumbprints 中 8. verify each file SHA-256 matches manifest.files原始字节 9. derive effective capabilities (§6) - derived_caps 10. enforce trust entry: derived_caps ⊆ trust.allow_capabilities 无未知段除非 allow_unknown_capabilities semver(version) semver(min_version) created_at 在 max_bundle_age_days 内 11. if require_transparency_log_entry: 在钉住的日志中查找 content_hash 验证日志由 trust.transparency_log.public_key_thumbprint 签名 验证日志时间戳 bundle.created_at 验证不存在该 content_hash 的后续撤销条目 12. if require_provenance_attestation: 验证 SLSA v1 in-toto bundle 13. 锁文件可变解析器强制见 §10: content_hash 必须等于 lockfile[uri].content_hash immutable_coord 必须等于锁文件条目 14. 传递依赖用同一管线解析并验证完整 DAG 遵守 max_dependency_depth 并拒绝环 15. 以 deny-union 组合方式合并§12 16. 发出审计事件content_hash、immutable_coord、kid、key_thumbprint、 log_index、derived_caps链接进 ADR-0017 Merkle 审计 17. 返回解析后的策略给运行时注意第 4 步发布者未在 trust.yaml 中注册就直接 DENY——这是「旁路加载不再默认可信」的落地机制。十、锁文件 agt-policies.lock供应链的牙齿锁文件是设计中的供应链「牙齿」对任何非内容寻址引用的运行时加载都是强制的。安装可解析可变引用运行时只消费锁文件钉住的内容。schema_version: 1 generated_at: 2026-05-29T18:00:00Z bundles: - uri: oci://registry.contoso.com/policies/hipaa:1.2.0 immutable_coord: oci-digest:sha256:9b...e1 publisher: did:web:policies.contoso.com name: hipaa-baseline version: 1.2.0 content_hash: sha256:7e1a...c4 signing_key_thumbprint: sha256:9f1a... log: index: 18923441 # 离线检查点用于 air-gap 验证 signed_tree_head: sth:... inclusion_proof: iproof:... resolved_at: 2026-05-29T18:00:00Z # 传递闭包必须存在。 - uri: oci://registry.contoso.com/policies/cost-cap:0.4.1 parent_dependency_of: - sha256:7e1a...c4 immutable_coord: oci-digest:sha256:af...20 publisher: did:web:policies.contoso.com name: cost-cap version: 0.4.1 content_hash: sha256:b0b0...ff signing_key_thumbprint: sha256:9f1a... log: index: 18923442 signed_tree_head: sth:... inclusion_proof: iproof:... resolved_at: 2026-05-29T18:00:00Z配套约定agt policies install负责填充 / 更新锁文件agt policies verify与运行时加载器拒绝加载「重算 content_hash ≠ 锁文件值」或「解析出的 immutable_coord ≠ 钉住值」的 bundleCI 期望在agt policies install之后git diff agt-policies.lock为空非空即失败隔离环境air-gap下锁文件中的signed_tree_headinclusion_proof允许运行时用 trust.yaml 钉住的日志公钥离线验证透明度日志包含关系无需任何网络调用。十一、撤销Revocation两条独立路径发布者撤销正常路径发布者向透明度日志发布签名撤销条目class RevocationEntry(BaseModel): schema_version: Literal[1] revokes_content_hash: str reason: Literal[key_compromise, build_compromise, policy_error, deprecated] issued_at: str publisher: str # Ed25519 over JCS(self minus sig)由当前受信任、未被撤销的密钥 # 或配置的 recovery_key_thumbprint 签名。仅由已撤销密钥签名的 # 撤销条目被拒绝。 sig: str signing_key_thumbprint: str操作员本地撤销密钥被攻破 / 紧急情况操作员直接在trust.yaml中加content_hash或key_thumbprint条目。这些条目无论发布者是否配合都生效——「发布者的密钥泄露到了 Pastebin拒绝它签的一切」只需一行配置变更。撤销条目只追加、不可撤回。误撤销的纠正方式是发布一个新的、未被撤销的版本。十二、deny-union 组合语义跨 DAG 的 deny 并集ADR-0014 使单树合并中的父 deny 规则不可变。扩展到可能含许多兄弟 bundle 的分发模型对于分布式 bundledeny 规则在整个导入 DAG 上按并集组合。任何 bundle——导入的、兄弟的、传递依赖的——都不得移除、覆盖、遮蔽、降低优先级或收窄有效策略集中任何已有 deny 规则的 scope。Allows 仅在并集后的 deny 集之后评估。若两个 bundle 冲突deny 胜。加载器必须在允许任何 bundle 的任何 allow 之前先计算完整解析 DAG 上的 deny 并集若任何导入 bundle 试图撤回闭包中其他 bundle 存在的 deny则拒绝该策略集要求确定性导入顺序锁文件顺序并拒绝环。这化解了「兄弟 bundle B 悄悄引入一条 allow 打败 A 的 deny」这类攻击。十三、透明度日志不变量命名空间的去重预言机日志不仅是公证服务更是 bundle 命名空间的去重预言机日志或与之对话的安装器必须拒绝(publisher, name, version)到不同content_hash的第二个活跃映射。同版本不同内容重新发布是硬错误不是受支持的更新路径。新内容必须用新版本。与min_version防回滚和操作员本地撤销紧急停机组合这条不变量封死了「发布者密钥被盗 → 攻击者重新发布hipaa1.2.0」的路径。十四、bundle 验证限制DoS 防护即使 bundle 来自完全受信任的发布者并已签名也可能耗尽评估器。验证必须强制以下限制默认值可在 trust.yaml 中配置max_bundle_bytes默认 10 MiBmax_file_bytes默认 2 MiBmax_files默认 256max_rules_per_policy默认 1024max_regex_length默认 1024 字符max_dependency_depth默认 4正则编译使用安全引擎如 RE2 /regexcrateunicode 开启、backtracking 关闭并为每个正则的编译与匹配设置超时YAML 解析使用safe_load拒绝重复键并拒绝不安全标签。十五、加载器 API 面与 CLI保持向后兼容load_policy(hipaa)当前行为加载内置模板继续可用。新增入口load_bundle(uri: str, trust: TrustRoot, lock: LockFile) - PolicyBundle install_bundle(uri: str, trust: TrustRoot, lock: LockFile) - LockEntry verify_bundle(path: str, trust: TrustRoot) - VerificationResultCLIagt policies install oci://registry.contoso.com/policies/hipaa:1.2.0 agt policies verify .agents/hipaa-1.2.0.tar agt policies list agt policies trust add did:web:policies.contoso.com \ --pin-jwk-thumbprint sha256:9f1a... --min-version 1.2.0 agt policies trust list agt policies revoke sha256:7e1a...c4 # operator-local agt policies ci --trust-root trust.yaml --lockfile agt-policies.lock agt policies ci --sbom out.cdx.json与仓库现状的对应从当前仓库源码结构看本 ADR 的实现分面已有雏形AGT 的 Python 生态中已存在agent_os的trust_root.pyagent-governance-python/agent-os/src/agent_os/trust_root.py其中的TrustRoot类作为「最终的、非 Agent 的权威」执行确定性信任决策并以TrustDecision(allowed, reason, authority, deterministic)表达结果——与本 ADR 的「确定性优先、fail-closed」约束同源agent_os.policies模块目录agent-governance-python/agent-os/src/agent_os/policies/承载上下文累积、速率限制、义务、数据分级等策略实现是 bundle 内policies/*.yaml的运行时宿主面向策略的 CLI 包位于 agent-governance-python/agt-policies/其 src/agt/cli/ 下已包含 migrate、resolution、RE2 迁移等命令骨架是agt policies ...系列命令的落点跨语言的策略执行引擎见 policy-engine/内含 OPA/REGO 与 Cedar 两种策略语言实现本 ADR 的派生能力解析§6依赖这类规范策略模型。需要说明本 ADR 状态为proposed提案agent_os.policies.bundle / resolver / trust / lockfile与agent_compliance中的 CLI 属于 ADR 列出的后续实现工作文中命令与格式以 ADR 描述为准。十六、CI/CD 强制同一管线、更早的闸门第 9 节的验证管线是(bundle bytes, trust.yaml, lockfile)的纯函数不要求活跃的 Agent 运行时。这意味着CI 运行的是运行时将要运行的同一段代码用将随应用一起发布的同一信任根与锁文件把关。纵深防御零规则重复、零「构建时与运行时检查漂移」的机会。构建时闸门agt policies ci供 CI 使用# .github/workflows/agent-policies.yml示意 - name: Verify policy supply chain run: agt policies ci --trust-root trust.yaml --lockfile agt-policies.lockagt policies ci对锁文件引用的每个 bundle 运行第 9 节管线外加一组「过于严格、不适合运行时强制」的构建专用不变量运行时需保留操作员紧急行动的灵活性检查构建运行时签名、内容哈希、派生能力§9 步骤 1-10✅✅透明度日志包含、离线证明有效§9 步骤 11✅✅出处证明已验证如要求§9 步骤 12✅✅锁文件重算哈希匹配解析器输出§9 步骤 13✅✅传递 DAG 已验证、环被拒绝§9 步骤 14✅✅deny-union 组合在 DAG 上成立§12✅✅bundle 验证限制§14满足✅✅锁文件完整每个 URI 已解析、完整传递闭包✅❌无漂移agt policies install --check无改动✅❌没有 bundle仅未钉住每个uri都有immutable_coord✅❌无操作员本地撤销命中任何钉住的 bundle✅✅可选组织策略最小签名新鲜度、最小日志年龄✅❌构建专用检查针对的是「健康仓库中本不该发生、但部署前值得抓住」的情况开发者改了trust.yaml却没重跑agt policies install、manifest 加了依赖却没钉住、上次构建后某个曾受信任的 bundle 被撤销了。SBOM 产出agt policies ci --sbom out.json生成解析后的策略闭包的 CycloneDX 形 SBOM——每个 bundle 的(publisher, name, version, content_hash, immutable_coord, log_index)——适合钉到应用既有 SBOM 上接入组织供应链证明管线。应用构建证明CI 步骤的输出锁文件 content_hash SBOM 哈希 信任根哈希 退出码应当包装成由构建管线身份签名的 in-toto 证明Sigstore keyless GitHub OIDC、ADO Workload Identity 等。这是应用自身的出处与每个 bundle 的发布者签名分离证明「这次构建在这些策略、这个信任根下被观测过」。运行时可在启动时可选地复核该证明形成发布者 → bundle → 锁文件 → 应用构建 → 运行容器的全加密链。生产环境漂移检测除构建闸门外部署应当把agt policies verify --strict作为周期性健康检查运行cron / Kubernetes liveness sidecar / DaemonSet。它能抓住「有人在生产主机上热改了 YAML」的情况——验证结果与锁文件分叉部署即可告警或自我隔离。这是同一段验证代码从「仅加载时」变为「持续运行」。十七、Consequences收益、代价与后续工作收益磁盘上的旁路 bundle 不再默认可信。除非信任根显式接受发布者签名密钥 thumbprint 且 bundle 内容哈希匹配签名 manifest否则加载器 fail closed。能力白名单可强制执行因为它派生自解析后的策略 AST而非作者声明的元数据。企业每个策略得到一个已发布制品由min_version控制版本与回滚锁文件提供跨主机可复现加载与 air-gap 下可离线验证的透明度包含。社区发布成为可能而 AGT 无需运营注册表。部署可细粒度接受社区发布者即使两者同时加载deny-union 组合规则也阻止社区 bundle 削弱企业 deny 规则。可插拔 resolver Protocol 意味着新传输Artifactory、内部 git 镜像、内容寻址对象存储无需改动验证管线即可接入。所有信任决策可观测每次加载都发出含content_hash、不可变坐标、密钥 thumbprint、log index 与派生能力的审计事件链入既有 Merkle 审计ADR-0017。无新密码学原语Ed25519、JCS、SHA-256、did:web、Merkle、透明度日志拆分均已被 AGT 接受。Sigstore 与 SLSA 仅作为可选出处参与从不作为权威。CI 与运行时运行同一验证代码构建闸门与运行时加载器是同一个(bundle, trust, lock) → pass/fail函数构建时绿是对运行时绿的强保证运行时漂移有人热改主机上的 YAML也由同一代码按计划发现。代价与权衡操作员必须维护trust.yaml与agt-policies.lock这是真实的新运维面——但合理因为当前隐式信任模型对旁路加载毫无防御。信任根默认拒绝是新手第一次跑agt policies install时的可用性悬崖。缓解方式是清晰的错误信息加一行agt policies trust add而不是内置一份默认信任列表。验证管线在冷加载时多一次透明度日志查询。缓解方式是把签名树头与包含证明缓存在锁文件中稳态加载纯本地、air-gap 可用。撤销只追加且权威。「取消撤销」需要新版本这是有意为之但有时令人意外。能力派生要求加载器理解每个策略段。未知段 fail closed——行为正确但要求贡献者在新增策略面时同步更新能力映射。githttps://解析器默认失去 LFS / 子模块能力。这是有意的取舍那些面是常见攻击面值得在后续 ADR 中显式 opt-in。后续工作实现agent_os.policies.bundle、agent_os.policies.resolver、agent_os.policies.trust、agent_os.policies.lockfile以及agent_compliance中的 CLI。参考签名 Action用发布者 Ed25519 密钥HSM/KMS 托管构建、签名、上传到 GitHub Release 并投递到透明度日志的 GitHub Action。私有日志参考实现面向 air-gap 客户的 RFC-6962 兼容追加式日志容器镜像与 Helm chart产出签名树头。签名trust.yaml用部署引导密钥验证的分离签名把「攻击者编辑 trust.yaml」的漏洞在 AGT 层关闭而非依赖平台配置通道。bundle 内 SBOM显式 SBOM 字段与 SLSA v1 构建出处集成超出当前可选标志。git 高级功能 opt-in子模块策略、LFS 水合策略、松散目录 bundle——视需求在后续 ADR 中定。迁移指南现有.agents/*.yaml用户如何在不断跑部署的前提下迁移到trust.yaml 锁文件。许可证合规扫描建议性工具许可证解释不在加载器信任边界内。AGT Studio 集成上文 Studio 关系部分描述的信任根编辑器、bundle 检查器、发布者视图与解析器健康界面是本文档的 UI 对应物。AGT 发布的 known-good 策略集社区决策独立的社区提案决定 AGT 是否运营自己的发布者身份、哪些策略如现有 HIPAA / SOX / GDPR / PCI-DSS / 生产模板入选包括审查门槛、签名密钥托管HSM/KMS、发布节奏与撤销流程的治理。本 ADR 是纯使能者——它让这类注册表成为可能但不在加载器中烘焙任何 blessed-publisher 假设。十八、与 AGT Studio 的关系issue #2638AGT Studio 提案统一浏览、编写、测试、模拟、版本化与观测 AGT 策略的 UI是本文档每个原语的自然消费者Studio 能力本 ADR 提供浏览所有策略跨本地缓存 trust.yaml 中每个发布者 resolver 可抓取 bundle 的联合浏览编写策略作者面向 bundle 编写保存 → tar JCS manifest Ed25519 签名 → 可agt policies publish测试 / 回放 / what-if模拟器对锁文件中任何已解析 bundle 运行以content_hash标识回归视图diff 同一(publisher, name)的两个content_hash把派生能力漂移§6作为一等公民呈现引擎与策略共同版本化锁文件条目本身就是版本钉扎实时决策流决策审计事件携带所加载 bundle 的content_hashlog_index§9 步骤 16Studio 渲染出处带链完整性的审计日志查看器Studio 徽章额外显示 bundle 证明状态签名、日志包含、无撤销证据导出导出包含签名 manifest 日志包含证明 锁文件条目审计员离线复核Studio 新增界面#2638 尚未枚举信任根编辑器可视化trust.yaml发布者、钉住的 JWK thumbprint、按能力白名单、min_version、操作员本地撤销、bundle 检查器拖入.tar或粘贴policy://URI显示签名状态、声明 vs 派生能力、文件 diff、传递依赖 DAG、透明度日志证据、发布者视图每个 trust.yaml 条目的可用 bundle、已装版本、漂移、撤销状态、上次抓取时间戳、解析器健康已配置解析器、上次成功抓取、日志包含延迟。边界保留#2638 明确排除写路径的运行时控制。本 ADR 保持同一边界Studio 可以把trust.yaml与锁文件作为文件编辑或对它们开 PR但不得把信任根变更推入运行中的部署。晋升生产仍是配置管理 / GitOps 的职责。小结ADR 0029 为 AGT 补齐了策略供应链的最后一环从「能解析就信任」到「签名 内容寻址 显式信任根 锁文件钉扎 透明度日志包含 deny 并集组合」的完整可验证链路。它不发明新密码学而是把 AGT 既有的 Ed25519、did:web、JCS/SHA-256、fail-closed、deny 不可变与 Merkle 审计组合成分发场景下的严格管线同时保证 CI 与运行时执行同一段验证代码、默认空信任集、支持 air-gap 离线验证并让社区发布与企业内部注册表在完全相同的信任模型下共存。对于要落地企业级 Agent 治理的平台团队、要发布可复用合规策略的作者、以及要审计 Agent 策略供应链的安全工程师这套 bundle resolver trust root lockfile 的体系都值得作为首选参考实现。【免费下载链接】agent-governance-toolkitAI Agent Governance Toolkit — Policy enforcement, zero-trust identity, execution sandboxing, and reliability engineering for autonomous AI agents. Covers 10/10 OWASP Agentic Top 10.项目地址: https://gitcode.com/GitHub_Trending/ag/agent-governance-toolkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询