Fail-closed(失败即拒绝)
当授权、校验或应答处于不确定状态时,默认拒绝而非放行。
生产方式:人写签发:晓黎学习复核:2026年9月21日被 0 个词条引用
一句话定义
Fail-closed = 当系统无法确定某个操作是否被允许时,选择拒绝而不是放行。
对应的反义模式是 fail-open(失败即放行):不确定时默认允许。
为什么重要
安全系统里最常见的事故来源不是「规则写错了」,而是「规则没能生效时系统仍然继续执行」。
| 场景 | Fail-open 的后果 | Fail-closed 的行为 |
|---|---|---|
| 审批服务不可用 | 危险操作直接执行 | 拒绝,返回「无法确认」 |
| 权限服务超时 | 按最宽松处理 | 拒绝 |
| 配置缺失 | 用默认值放行 | 拒绝,要求显式配置 |
| 策略校验异常 | 跳过校验 | 拒绝并告警 |
在 Agent Harness 中的体现
DeepSeek Harness 的审批结果集是一个标准范例:
type ApprovalOutcome = 'allowed-once' | 'rejected' | 'cancelled' | 'unavailable'
调用方对四种结果的处理:
| 结果 | 处理 |
|---|---|
allowed-once | 继续执行(仅本次) |
rejected | 拒绝 |
cancelled | 拒绝 |
unavailable | 拒绝 |
关键在于 unavailable 的语义:没有应答者、应答者不负责该请求、应答者抛异常、返回不合规的值,全部产生 unavailable,而不是放行。
实现要点
- 结果集必须闭合:用枚举而非布尔值,避免「非 true 即 false」的灰区。
- 异常必须收敛:任何异常都应映射为拒绝,而不是向上抛出后被当作「未阻止」。
- 超时即拒绝:等待授权超时应视为拒绝,而非继续。
- 记录拒绝原因:拒绝要有可审计的原因,否则无法区分「策略如此」与「系统故障」。
代价
Fail-closed 会降低可用性。审批服务挂掉时,原本能自动通过的操作也会被拒绝。
缓解方式:
- 对低风险操作使用宽松策略,只对高风险操作 fail-closed
- 提供明确的降级路径(如人工审批通道)
- 用告警暴露「因 fail-closed 被拒」的异常增长
相关
- 第 14 讲 权限与审批
- 第 15 讲 沙箱与安全边界
- Harness Engineering(代理治理工程) — Harness 的核心安全原则之一
- 幂等性(Idempotency) — 与重试安全配合使用
互链
链接来自概念卡正文里的双链,编译时能解到本期词条集的才成为站内链接。
反链(0)
还没有其它词条引用这一页。
出处
路径是本地知识库(Obsidian 库)里的位置,正文与概念卡逐字对应。
- 概念卡原文Fail-closed(失败即拒绝)
03_RESOURCES/概念/fail-closed.md - 所属知识地图栏目概念页索引 · Agent 架构与 Harness 治理
03_RESOURCES/概念/Index.md - 正文引用的知识库笔记第 14 讲 权限与审批
02_AREAS/AI开发/Harness Engineering/Agent Harness 课程/14-权限与审批:能力不等于授权.md - 正文引用的知识库笔记第 15 讲 沙箱与安全边界
02_AREAS/AI开发/Harness Engineering/Agent Harness 课程/15-沙箱与安全边界:Agent能碰到什么.md
编译入库:2026年10月6日。词条由知识库编译而来, 修正要回到概念卡改,再重新编译。