#AI#大模型#DevOps

AI 运行时安全判定回执:把 Policy Decision 绑定到实际执行

策略引擎返回 allow 不代表下游按同一输入和义务执行。本文定义可验证判定回执、一次性接受点与执行确认,阻止陈旧策略、参数替换和 fail-open 绕过。

本文要点

  • 主题聚焦:AI、大模型、DevOps
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2026年6月12日·更新于 2026年7月20日

内容分类器说“低风险”、策略服务返回 allow=true,都不能证明系统最后按这项结论执行。下游可能换了 Prompt、忽略“不得调用外部工具”的义务,或在策略超时后沿用旧缓存。AI 内容审核系统说明如何产生风险信号,LLM 网关路由策略选择供应商和模型;本文只封闭两者之后的缺口:判定所依据的字节,必须与真正被接受的执行一致。

回执绑定事实,而不是复述日志

OPA 的 decision log 能携带 decision ID、bundle revision、输入与结果,但日志投递是观测链路,不是执行事务。平台应由可信判定器签发 ai.safetyDecisionReceipt.v1,至少包含 decisionId、租户与主体引用、规范化 action、目标资源摘要与版本、executor audience、executionPlanDigest、inputDigest、风险信号集合摘要、策略 bundle ID 与内容摘要、数据快照、结果、义务、授权纪元、有效期、一次性 enforcementNonce、签发者 key ID 和时间。原始 Prompt、用户身份与密钥不进入回执。

yaml
schema: ai.safetyDecisionReceipt.v1
decisionId: dec_01JZ8Y
action: model.generate.v3
executorAudience: inference-executor-prod
target: { digest: sha256:ef4..., version: "37" }
executionPlanDigest: sha256:902...
inputDigest: sha256:31c...
signalSetDigest: sha256:81a...
policyBundle: { id: safety-prod, digest: sha256:72e... }
dataSnapshot: sha256:6df...
authzEpoch: 1842
decision: ALLOW
obligations:
  - { id: tools.disable, parametersDigest: sha256:b12... }
validUntil: 2026-07-19T10:02:00Z
enforcementNonce: 9ec1...
issuerKid: safety-decision-2026-07

输入规范必须冻结字段类型、Unicode 与数字表达,不能让判定器和 executor 各自序列化。executionPlanDigest 覆盖模型路由、Prompt bundle、工具权限和副作用目标;目标版本或 audience 不符时不能换一个 executor 消费。bundle revision 只是标签,必须同时记录已验签的内容摘要;动态名单、租户分级和地区规则属于 dataSnapshot,否则同一 policy 仍可能重算出不同答案。安全回执也不能代替云控制面审计完整性:前者证明单次数据面接受,后者证明高价值配置变更没有丢失。

用一次性接受点连接执行

状态机固定为 RECEIVED -> EVALUATED -> ISSUED -> CLAIMED -> EXECUTING -> OUTPUT_QUARANTINED -> OBLIGATIONS_APPLIED -> RELEASED,另有 DENIED/DEFERRED/EXPIRED/REJECTED。ALLOW 只有在指定 audience 的 executor 原子比较 tenant、action、目标、执行计划、授权与 policy floor,并 CAS 消费 nonce 后才能 CLAIMED。同一事务创建 execution/outbox;重投只查询该 execution。

每项 obligation 声明 PRE_DISPATCH、POST_GENERATION_PRE_RELEASE 或 PERSISTENCE phase,未知版本即拒绝。工具禁用在调用前生效;模型输出和工具结果先进入隔离区,redaction 与 retention 义务完成前不得返回或持久化。executor 以绑定 execution、原始 output digest、义务摘要和当前代际的 CAS 进入 OBLIGATIONS_APPLIED,才可发布脱敏结果并写 enforcementConfirmation.v1。崩溃或确认丢失保持阻断/对账,不能旁路发送或重申请判定。

DENY 可直接成为终态;DEFERRED 表示证据不足,路由到产品定义的安全路径,不等于隐式允许。策略服务不可达、属性缺失、签名 key 未知、时间源失真或 bundle 低于 policy floor 时,高风险动作必须 DEFERRED/DENIED。低风险只可使用 manifest 明示且仍在期限内的 last-known-good bundle,禁止代码里散落“出错就放行”。Agent 审批防重放绑定用户批准的一次动作;这里即使没有人工审批,也绑定机器安全判定和执行,两种凭证不能互换。

验证绕过路径而非 happy path

故障矩阵替换 input digest、回退 bundle、伪造 decision ID、重复 nonce、提升授权纪元、注入未知 obligation,并模拟模型成功后 redactor 崩溃、旁路响应试图发送、确认丢失和实际模型错代。预期是拒绝、阻断释放或按原 execution 对账;日志晚到和 shadow ALLOW 都不能改变执行。MCP 审计日志设计可收集证据,测试仍须直接断言释放与副作用次数。

发布门可要求:高风险 execution 有效回执覆盖率 100%;input/model/obligation 不一致为 0;义务完成前原始结果释放或持久化为 0;每个 nonce 最多一个 execution;未知策略、属性或鉴权 fail-open 为 0;链路 p99 增量不超过 20 ms;两分钟未终态者低于 0.1% 且全进对账。阈值预先冻结。

发布先让新 bundle 对至少 5 万条脱敏代表请求只做 shadow 判定,按风险类目比较新旧结果、缺失属性和 obligation 支持率。随后按 1%、5%、25% 扩大真实接受,并保留旧判定器热备。异常时把 policy alias 指回上一份已签名 bundle;若回滚版本低于紧急 policy floor,则保持拒绝,不能为了可用性复活已撤销规则。所有旧回执与确认保持不可变,回滚的是后续签发路径,不是历史。AI 功能灰度与 Feature Flag负责流量切换,这里的 nonce、policy floor 和执行绑定仍必须独立成立。

Related

相关推荐