安全与合规

安全模型要说清楚,包括它不保证什么

一个安全产品如果不说明自己的前提和边界,它的承诺就没有意义。这一页讲 ztg 的失败语义、加密机制、隔离方式,以及明确不属于平台职责的部分。

01 / 失败语义

默认拒绝,没有例外

安全产品在正常工作时看起来都一样,区别在故障时刻。ztg 的每一条失败分支都落到拒绝,不存在为了保住可用性而降级放行的代码路径。

  • 15 ms 授权决策热路径 实测,目标 p99 < 50 ms
  • 5.2 µs 控制面请求处理 不含策略评估
  • 0 次 已建立连接 不重复鉴权,直接转发
  • 0 条 降级放行路径 任一环节不可用一律拒绝

故障时的行为

默认拒绝不是一句口号,它是每一条失败分支的落点。下表是各类故障下的实际行为。

故障 行为
授权评估服务不可用 新连接拒绝;已建立连接继续转发
会话缺失、过期或已撤销 拒绝
资源未登记或不存在 拒绝
租户上下文不一致 拒绝
设备已撤销 拒绝
策略版本不匹配 拒绝评估
策略推送通道中断 已授权连接不受影响;缓存内决策继续生效,撤销改为等待缓存过期
02 / 身份与加密

身份分两层,密钥不落明文

「谁」和「从哪台设备」是两个独立的问题,各自有独立的凭据和吊销手段。

对象 机制 说明
用户身份 统一身份认证(OIDC) 身份由既有身份源提供,平台不另建一套账号体系。
设备身份 X.509 证书 + 双向 TLS 设备证书由平台签发,可单独吊销;接入时双向验证。
会话令牌 短时效令牌 令牌绑定用户与设备,过期即失效,泄露窗口有限。
通道加密 AEAD(ChaCha20-Poly1305) 每帧独立认证标签,密文被篡改即校验失败。
密钥派生 HKDF-SHA256 会话密钥由共享秘密派生,双向派生同一密钥,不直接传输。
密钥存储 系统原生安全存储 私钥与凭据交由各平台的安全存储管理,不以明文落盘。
03 / 多租户隔离

隔离要做实,而不是声明

多租户隔离最常见的失效方式不是没做,而是做了但被高权限连接绕过。这三条必须同时成立才有意义。

  • 租户上下文强制存在

    所有数据访问都必须携带租户上下文。缺失即拒绝,不存在「默认租户」这种会把数据串到一起的兜底。

  • 行级隔离对表属主同样生效

    隔离策略不仅启用,而且强制——表属主也受约束,避免「用高权限连接绕过隔离」这条最常见的捷径。

  • 应用使用非超级用户角色

    应用连接使用普通角色,不享有绕过隔离策略的特权。这条如果没有做,前面两条都形同虚设。

04 / 审计

每次决策都答得出「为什么」

只记录「谁登录了」的日志,回答不了「这次访问为什么被放行」。ztg 的审计记录跟着决策走。

  • 决策结果 五个取值之一,不做模糊表达
  • 策略标识与版本 能定位到是哪个版本、哪条规则给出的结论
  • 判定理由 人能读懂的说明,用于复盘与争议处理
  • 主体与客体 用户、设备、会话、资源、动作
  • 时间与结果 决策发生的时间点与后续执行情况

这套记录同时服务于三件事:故障复盘、合规取证、以及策略调整时的依据——你能看到一条规则实际拦住了谁、放过了谁,再决定要不要改它。

05 / 信任前提

平台不保证什么

把边界写清楚,比把承诺写大更有用。

  • 端点完整性由终端负责

    平台能保证「访问决策被正确执行」,但不能保证终端本身未被入侵。端点侧的数据限制依赖终端系统完整性——这是所有端点方案共同的前提,我们把它说明白而不是含糊过去。

  • 数据分类需要人来定义

    策略要生效,前提是有人回答了「哪些数据算敏感、哪些动作算高风险」。平台提供表达和执行的能力,不替你决定业务上的敏感边界。

  • 推送通道中断时的权衡

    撤销走推送通道即时生效。通道中断时,已授权的连接不受影响,缓存内的决策继续生效,撤销改为等待缓存过期。我们选择保住可用性并把这个窗口写清楚,而不是假装它不存在。

  • 高敏感环境可收紧

    如果这个窗口不可接受,可以对高敏感资源配置更短的缓存时间,或在撤销时直接断开在途连接。

需要一份更细的安全说明?

如果你们有具体的合规框架或安全评审清单,我们可以对着条目逐项讨论。