注册身份
每个代理都是一条记录:稳定的 agent_id、角色、Ed25519 密钥绑定、创建日期。再也不会猜测哪个进程做了什么——注册表是关于谁存在的唯一真相来源。
到2027年,进程集群——以及一群匿名进程的集群——都是一个风险。LeanCTX 让每个代理成为一个 注册身份:唯一、由人类拥有、生命周期管理、可证明和可撤销,所有状态转换都记录在防篡改的审计跟踪中。
角色是可重用的权限配置文件。身份在其上附加了问责制:agent_id、所有者、状态、密钥绑定、证明和心跳。这四个属性使集群具备治理能力。
每个代理都是一条记录:稳定的 agent_id、角色、Ed25519 密钥绑定、创建日期。再也不会猜测哪个进程做了什么——注册表是关于谁存在的唯一真相来源。
没有人类所有者的注册会被拒绝。问责制是结构性的:每个审计条目、每个生命周期事件、每个证据包都追溯到为该代理负责的个人。
暂停一个代理,或批量吊销所有者并原子性地暂停其整个集群——每次挂起都会单独审计。退役是最终行为,会写入关闭审计的条目。
在注册和每次心跳时都进行二进制和角色配置哈希校验。漂移(exit code 3)会立即暴露——升级、配置编辑或篡改。我们记录了这不保护什么。
所有功能都以 CLI 为先,并且退出代码是诚实的,因此您的管道和监控系统可以据此采取行动。
$ lean-ctx agent register --id ci-reviewer-1 --role reviewer --owner alice@org registered: ci-reviewer-1 (role reviewer, owner alice@org) spiffe id: spiffe://org.example/agent/reviewer/ci-reviewer-1 $ lean-ctx agent heartbeat ci-reviewer-1 # liveness + drift; exit 3 on drift $ lean-ctx agent offboard-owner alice@org --reason "left company" suspended 2 agent(s): ci-coder-1, ci-reviewer-1 $ lean-ctx agent check ci-reviewer-1 # enforce-path decision point ci-reviewer-1: DENIED — suspended: left company # exit 1
每次转换都会写入防篡改的审计记录——注册、挂起、恢复、退役是标准化的事件类型(OCP Part 4),因此身份历史会自动进入您的 证据包。完整的模型和威胁模型:agent-identity 文档。
“有人离职了会发生什么?”
他们的代理就会停止运行。机械性地。所有者离职流程会在一个锁定事务中挂起该所有者所有的活动代理——可连接到您的 SCIM 停用流或从离职清单运行。孤立的代理是代理时代被遗忘的服务账户;LeanCTX 使其结构上不可能发生。
角色描述了一个流程可能做什么;而身份描述了谁对此负责。对于代理集群而言,重要的是操作层面的问题:谁拥有这个代理、它上次活跃是什么时候、是谁将其关闭的以及为什么,当所有者离职时它的权限会怎样?注册表机械地回答了这些问题——身份(who)与角色(what)分离,因此角色保持可重用的配置文件。
指其人类所有者已离开公司,但凭证仍持续运行的代理——这是代理时代被遗忘的服务账户版本,不同之处在于它会读取代码和执行命令。LeanCTX 从结构上解决了这个问题:注册时必须指定所有者,并且一个命令(或您的 SCIM 停用流)可以在单个锁定事务中挂起所有者整个活动的代理集群,每次挂起都会进行审计。
active → suspended ⇄ active → decommissioned。挂起会携带原因且可逆;退役是设计上的最终状态——记录永远不会被删除也永远不会被重新激活,因为身份是审计历史的一部分。每次转换都会使用标准化的事件类型(agent_registered, agent_suspended, agent_resumed, agent_decommissioned — OCP Part 4)写入防篡改的审计记录,因此身份变化会自动显示在证据包中。
注册和每次心跳都会对运行的二进制文件和活动的角色文件进行哈希计算。哈希值改变意味着有东西变了——升级、配置编辑或篡改——并以非零退出代码的形式显示为漂移,您的监控系统可以对此发出警报。这是一种漂移检测,而非远程证明:拥有完整主机控制权的攻击者可以伪造哈希,而我们的威胁模型明确指出了这一点。它补充了主机加固和代码签名,而非取代它们。
三个钩子。SPIFFE:每个记录都映射到 spiffe://<trust-domain>/agent/<role>/<agent_id>,因此 K8s 工作负载身份(SPIRE)和 LeanCTX 身份是相同的名称。SCIM:将您的停用流程连接到所有者离职调用。强制模式:检查 API 是一个单一的决策点——未注册或挂起的代理将被拒绝;首先在监控模式下启动,一旦集群注册完毕,切换到强制模式。