Files
orbit/docs/reports/phase-6-credentials.md

3.9 KiB
Raw Permalink Blame History

P6:凭据操作与安全轮换

日期:2026-09-19。本文只记录管理凭据操作的已实现边界,不把凭据功能等同于 P6 全部生产验收。

已实现行为

  • credential status 只返回名称、版本、到期/撤销时间和应用/命名空间启用状态,不返回秘密或 secret_digest。
  • credential rotate 先读取并核对 expected_revision,生成一次新令牌和固定绝对到期时间,写入新的 0600 私有操作文件,再应用事务。
  • credential apply --file 严格读取同一个私有操作文件。操作身份、请求摘要、凭据摘要更新、脱敏回执和管理审计在同一事务中提交;提交结果不明时重复应用同一文件只返回原回执,不重新生成秘密、不重置到期时间、不新增审计。
  • 操作文件被修改、替换为不同令牌或不同原因时返回 IDEMPOTENCY_CONFLICT;已有成功回执不受后续凭据轮换或撤销影响。
  • credential revoke 也使用固定操作文件,允许在应用或命名空间已停用时关闭凭据。撤销只改变凭据授权状态,不批量改写 Worker、订阅、任务、交付或历史会话记录;后续认证和控制操作会重新核对凭据状态。
  • 凭据轮换不会把旧 Worker 会话直接改成新凭据;旧令牌在每条控制命令上重新鉴权并立即失效,Worker 必须用新令牌重新 Connect。重新连接会建立新会话、递增会话代次,并将旧会话标记为排空且立即过期。
  • 审计主体来自提交事务所在 MySQL 连接的 CURRENT_USER(),不是凭据 ID 或请求自报字段。审计前后摘要不包含令牌或秘密摘要。
  • 没有公网管理路由,也没有新增运行时依赖;管理 CLI 使用现有 MySQL 连接和迁移账本。

真实验证

以下验证使用 Go 1.27.1、darwin/arm64、Docker MySQL 8.4.10 的一次性数据库:

GO="$(cat /tmp/orbit-toolchain-path)/go" DOCKER=/usr/local/bin/docker \
  sh /tmp/orbit-credential-test.sh

TestIntegrationCredentialOperations 退出 0,覆盖:初始状态、轮换后旧令牌拒绝/新令牌接受、固定操作重放、修改操作文件冲突、停用应用后撤销、重复撤销回执、审计主体和敏感字段不泄露。数据库回读确认轮换审计和撤销审计各一条,当前迁移保持零外键。

TestIntegrationCredentialCommitFaults 同样退出 0:使用测试专用 MySQL 包代理分别在 COMMIT 发出前断线和收到成功包后丢确认,独立连接回读版本,并用同一操作文件完成核对。BEFORE 情况回滚后重试首次提交,AFTER 情况直接返回原回执;两种情况都没有生成第二个令牌或第二条审计。该故障代理只存在于测试二进制,不进入生产进程。

补充定向真实 MySQL 验证使用 Docker MySQL 8.4 和 Docker Go 1.25 临时模块文件运行 TestIntegrationWorkerExecution/credential_rotation_requires_worker_session_rebind,退出 0(含 -race,耗时 1.091 秒)。该用例确认旧令牌的 Capacity 返回 UNAUTHENTICATED,新令牌重新连接后获得不同会话,旧会话 draining=TRUE 且已过期,新会话可以继续提交容量;同次 orbit-admin verify 输出 schema_version=28、migration_count=28、foreign_key_count=0、complete=true。

随后执行标准隔离回归 GO="$(cat /tmp/orbit-toolchain-path)/go" DOCKER=/usr/local/bin/docker sh scripts/test-mysql.sh,退出 0。该次 root MySQL 集成组耗时 264.138 秒,包含上述两个凭据场景;流程运行器、SDK、Worker/事件进程、业务 Inbox/Outbox 和 23 个 SDK 示例均通过。另一次 CLI 专项实际构建 orbit-admin,在一次性 MySQL 上跑通 status、rotate、apply 首次提交、apply 重放和 revoke,且新操作文件权限为 0600。

以上证据仍不替代密钥托管演练、多节点重连演练、保留/归档、备份恢复和容量验收。