团队

组织策略

策略如何编写、发布、签名,并由组织内的每个 zn-gate 应用。

查看 .md

组织策略是一组关于密钥的规则:密钥可以发送到哪里,以及如何注入。所有者和管理员在 策略 中编辑策略并发布新版本;组织内的每个 zn-gate 都会获取该策略。

规则

每条规则针对一个密钥(按名称指定,而非按值;允许使用 前缀* 和 *):

字段 含义
secret 密钥名称,例如 STRIPE_API_KEY
agents 可收到新主机提示的代理,例如 claude-code、codex。deny 会忽略此列表
mode 仅应用 proxy(最严格的方式);其他值会被忽略
allowHosts 允许接收该密钥的主机
allowCommands 允许接收该密钥的命令
injectAt 密钥的注入位置
deny 阻止机器上所有代理对该密钥的使用
warn 在规则的其他限制范围内允许使用,向开发者显示警告,并记录为已警告,对机器上的所有代理生效。warn 和 deny 只能二选一
reason 适用警告规则时显示给开发者;对于阻止规则,它是给管理员的备注

规则的组合方式:

  • 所有匹配的规则按从上到下的顺序生效;每条规则只能进一步限制。
  • deny 会阻止使用。warn 会允许使用,向开发者显示警告,并记录到审计日志中。 deny 同样适用于 secrets_render_file,因此策略阻止的密钥不能通过该工具写入文件。
  • 规则设置的字段只会收窄机器上的本地设置;规则未填写的字段保留本地值。新主机仅在策略有效期内提供(在严格模式的设备上,策略过期后不再提供),需要成员批准,带端口的主机永远不会提供;命令、模式和 injectAt 从不会被放宽。

整个组织只有一份策略,而不是每个代理一份。deny 或 warn 会对机器上的所有代理生效,与 agents 列表无关;该列表只决定哪些代理会收到新主机的提示。

三种状态

每条规则有三种状态之一,在规则编辑器中选择:

状态 在成员的机器上 在审计日志中
未阻止(默认) 允许使用,应用本地设置和规则中的限制。 已放行
警告 在规则的限制范围内允许使用。zn-gate 向开发者显示警告并记录。 已警告
阻止 停止使用。 已阻止

警告显示在开发者的机器上,不会停止使用。每次被警告或被阻止的使用都会显示在团队 → 审计日志中,仅包含元数据(不含值)。

警告规则适用于所有会被阻止的地方:zn run、secrets_http_request、secrets_render_file,以及代理钩子中对标记和令牌的还原。警告的使用被放行时,开发者和代理会看到这条提示(保留英文原文):zn: your team policy would block STRIPE_API_KEY here (policy note: "..."). It was allowed and recorded for your organization. 同时会向组织上传一条决策为 warn 的审计记录。钩子还原的标记遵循同样的规则:策略阻止的密钥仍保留为标记,钩子会说明原因;处于警告规则下的密钥会被还原并记录。

警告规则需要 zn-gate 1.8.0 或更高版本。在 zn-gate 版本较旧的机器上,警告规则的作用与未阻止相同:使用会在规则的其他限制范围内通过,但不显示警告,也不会记录为已警告。请让成员更新 zn-gate。

在有警告规则的组织中,不要回退到 zn-gate 1.7.1。该版本会拒绝包含警告规则的策略,在下一次策略同步下载到它能读取的副本之前,只应用本地设置。请保持使用 1.8.0 或更高版本。

发布

发布会创建新版本。仪表板会先进行验证。被阻止的使用会以 reason: policy:org_deny 报告;被警告的使用会以 reason: policy:warn 报告,并记录在审计日志中,显示为已警告。仪表板也会拒绝同时设置 warn 和 deny 的规则。

发布时要求所有者和管理员启用双因素认证。通过持有组织管理员令牌的编码代理提出的变更,始终需要有人工批准;参见通过代理管理团队。

签名与版本

  • zn 提供的每份策略都使用你组织的 Ed25519 密钥签名。每台机器都会使用其加入组织时固定的公钥进行验证。
  • 已提供的策略有效期为 7 天。机器会定期检查新版本,并在你运行 zn team sync 时检查。
  • 机器永远不会接受低于其上次接受版本的策略,也不会接受使用未知密钥签名或签名无法验证的策略。它会保留上一个有效策略,并记录 policy:rejected。

断网或策略过期时的处理方式,参见离线模式。

组织无法做到的事

zn-gate 是本地防护机制,而不是 MDM。组织策略在 zn-gate 内置保护的基础上生效,且无法将其关闭:无论策略如何规定,凭证文件、~/.zn 以及代理自身的配置始终受到保护。