阅读需 8 分钟

AI 编程代理凭据清单模板

使用凭据清单模板记录 AI 代理的 API 和 SSH 访问、负责人、允许的操作、环境、撤销方式和轮换计划。

AI 编程代理凭据清单模板

AI 编程代理不应该拿到一堆继承来的凭据,再收到一句模糊的“小心使用”。在代理调用 API、部署服务或建立 SSH 连接之前,团队需要先记录清楚:凭据能访问什么,谁对此负责,以及团队如何关闭它。

凭据清单模板听起来像行政工作,直到代理在操作者离开键盘时连续发出二十次调用。那时,它可能决定你只需撤销一个已知能力,还是不得不禁用整个工程组织,因为没人说得清这个令牌是什么。我见过团队直到自动变更落到不该到达的地方,才发现他们的“staging”自动化竟然持有生产环境写入令牌。

清单记录的应该是权限,而不是秘密字符串

凭据清单记录的是权限。它不记录 API 令牌、SSH 私钥材料、密码、恢复代码,也不记录这些内容的加密导出。如果清单本身可以登录任何系统,它就变成了另一个访问控制更弱、受众更大的秘密存储处。

这个区别很重要,因为团队经常把标识符和凭据混为一谈。API 令牌的末四位可以帮助操作者在轮换时找到正确条目,却不能说明它是否可以删除项目。SSH 公钥指纹可以标识一个身份,却不能说明它登录的是哪个 Unix 账户,是否允许端口转发,或哪些主机信任它。

每一项可以独立撤销的权限都应单独占一行。同一个服务商账户可能需要多行:生产环境只读报表令牌、staging 部署令牌、代理不能使用的紧急管理员令牌,以及 webhook 签名密钥。把它们合并到一行,会掩盖不同的风险和轮换要求。

SSH 也遵循同样的规则。不要因为同一个私钥碰巧能访问 Git 和服务器,就在一个单元格里写“Git 和服务器”。源代码控制写入身份和主机登录身份的后果不同。即使它们由同一个人在同一个下午创建,也应该分别记录。

NIST SP 800-57 第 1 部分把加密密钥管理视为一个生命周期问题:生成、分发、存储、使用、替换和销毁都需要受到控制。该文件重点讨论加密密钥,但它的管理原则同样适用于这里。只记录“我们创建了一个令牌”的列表不算清单,只是一份记忆辅助,而恰恰在员工需要可靠记录时,它最容易失效。

为每份凭据指定一名明确负责人

每一行都需要一名明确的负责人,他能回答“这项权限是否还应该存在?”负责人不必运行秘密管理器,也不必编写代理集成,但必须足够了解相关系统,能够批准访问并承担运行后果。

不要使用“平台”“开发团队”“共享”或已离职员工姓名作为负责人。团队可以执行流程,但团队名称无法告诉事故响应人员凌晨两点该联系谁。记录一名主要负责人,必要时再记录一名有权撤销或替换凭据的备用负责人。

把团队经常混淆的四种角色分开记录:

  • 系统负责人决定访问是否仍然合适。
  • 凭据保管人可以创建、存储、撤销和轮换凭据。
  • 代理操作者启动或监督代理运行。
  • 事故联系人在前三类人员都无法联系时处理紧急故障。

小团队中,一个人可能承担多个角色,但清单仍应分别列出这些角色。令牌在发布期间失效时,保管人可以修复存储问题,而系统负责人决定临时替代凭据是否应拥有相同权限。

对于服务商 API,负责人通常应是负责支付或运营该账户的团队,而不是第一个把令牌粘贴进本地配置文件的开发者。对于 SSH 访问,负责人通常是主机或应用负责人,而不是生成密钥对的人。听起来很明显,但失去负责人的凭据通常都始于一个合理的捷径,后来那个人换了团队。

添加一个独立于秘密轮换日期的审核日期。令牌在技术上仍然有效,并不代表它的业务用途还存在。审核要回答的是访问是否还应该存在,轮换则是替换可能已经老化或泄露的材料。完成其中一件,并不等于完成另一件。

用动词和目标写明允许的操作

“生产环境访问”不是权限描述,而是一个警示标签,对代理操作者没有实际帮助。清单需要包含动词、目标资源和审核者可以检查的边界。

可以按以下形式写权限:

动词 + 目标 + 边界 + 禁止的操作

例如:

  • 在 staging 中 GET /v1/projects/acme/builds,不允许请求生产租户
  • 为 catalog-api 服务 POST 部署版本,不允许回滚或删除
  • 以 deploy 身份 SSH 登录构建主机组,只能运行批准的发布命令,不允许交互式 shell
  • 在 alpha 仓库中创建问题评论,不允许合并、删除分支或修改设置

这比服务商笼统的“写入”标签有用得多。能够创建部署版本的代理和能够删除部署的代理都拥有写权限,但影响范围完全不同。

记录预期操作属于读取、创建、修改、删除、执行还是管理变更。“执行”需要特别谨慎。启动云任务、轮换服务凭据、触发支付操作或运行远程 shell 的 API 调用,在请求日志中可能看起来无害,却可能在下游造成昂贵或不可逆的结果。

不要把清单写成充满模糊措辞的法律文件。“仅在适当时使用”和“日常部署工作”都没有边界。人无法据此批准,工程师也无法据此构建控制措施。如果操作取决于上下文,就明确写出上下文:指定的环境、仓库、主机组、账户或变更类型。

常见的捷径是授予一个通用管理员令牌,再依靠代理提示词避免危险调用。它之所以流行,是因为几分钟就能让原型运行起来。但这是错误的,因为提示词不是访问控制,后续工具调用可能继承广泛权限,而写提示词的人甚至没有察觉。

环境需要分别记录,也需要分别评估后果

staging 凭据和生产凭据不应该仅仅因为调用同一个 API 就放在同一行。它们的负责人可能相同,但目标账户、数据暴露、审批要求和撤销紧迫性往往不同。

不要只把环境当作一个标签。记录服务商账户或租户、端点或主机组、数据分类,以及调用是否可以跨越环境边界。当组织拥有多个生产账户、区域或客户分区时,“Prod”过于模糊。

一个可用的环境字段可以这样写:

production / 租户 4821 / 客户账户数据 / 端点 api.example.internal

如果内部主机名本身敏感,不要把真实主机名放进所有人都能读取的清单。重点是让有权限的团队能够精确识别目标。清单的访问策略应与其中运行细节的敏感程度相匹配。

单独增加一个字段,记录代理可以在响应中接收的数据。调用端点的权限和查看响应内容的权限相关,但风险并不相同。一个读取请求可能返回源代码、客户联系方式、发票、访问元数据,或旧配置值中嵌入的秘密。

这能发现一种常见的失败模式。团队为 staging 创建了一个“只读诊断”代理凭据。后来事故处理中,工程师把诊断客户端指向生产环境,因为两边的命令语法完全相同。服务商使用账户级范围,所以凭据成功了,代理还把客户数据返回到了自己的记录中。如果原始清单记录了租户和响应数据,而不是简单写“诊断读取”,就会暴露这个缺失的边界。

如果服务商无法隔离环境,不要用自我安慰式的文档来弥补。标记凭据会跨环境使用,提高审批级别,并决定代理是否应该使用它。诚实的答案有时就是“不应该”。

SSH 访问需要比 API 访问记录更多细节

验证审计链
对密文离线运行 sp audit verify,无需访问保险库密钥。

SSH 凭据需要单独的字段,因为一次 SSH 连接可能同时携带多种权限。登录账户、允许的主机、命令限制、转发权限和代理转发设置,都会改变连接能做什么。

每一行 SSH 记录应包含公钥指纹、私钥材料位置、登录账户、主机或主机组,以及准确的预期命令。不要把私钥复制进清单。SHA256 指纹足以用于识别,操作者可以在本地生成它。

对公钥文件运行以下命令:

ssh-keygen -lf ~/.ssh/id_agent_deploy.pub

正常结果大致如下:

256 SHA256:AbCdEfGhIjKlMnOpQrStUvWxYz0123456789abcd agent-deploy (ED25519)

保存 SHA256: 值。只有在注释有助于人类识别角色时,才保存注释。注释不是安全控制措施,任何人在复制公钥时都可以修改它。

对于目标主机,应检查 authorized_keys 中的限制,不要因为大家认为部署账户受限,就假定它真的受限。OpenSSH 在 sshd 手册中记录了 command=no-port-forwardingno-agent-forwardingno-pty 等选项。这些限制可以把自动化身份变成只能运行受限命令的执行器,但它们无法修复一个以不受限管理员账户登录的凭据。

一条记录可以写成:“以 deploy 登录,目标为发布组 A 中的主机,强制命令为 /usr/local/bin/release-catalog,不允许端口转发、PTY 和代理转发。”如果紧急工作需要交互式 shell,就创建一个由人操作的独立身份。不要因为代理身份已经可用,就悄悄重复使用它。

主机验证也应记录在案。注明代理端集成如何检查主机身份、已知主机条目存放在哪里,以及合法更换主机后由谁更新这些条目。为了应对重建而关闭主机验证,会让有效凭据被发送到错误的机器。

好用的清单会迫使人回答关键问题

把下面的模板复制到受控文档、工单系统或清单数据库中。可以删除团队无法维护的列,但不要删除用于确定权限、范围和恢复方式的字段。

字段记录内容
凭据 ID稳定的内部 ID,以及非秘密的令牌后缀或 SSH 指纹
通道HTTP API 或 SSH
系统和用途服务商或主机服务,以及具体的代理任务
环境和目标账户、租户、主机组、仓库或端点边界
允许的操作动词、目标、限制和禁止的操作
响应数据代理可以接收或在输出中暴露的数据
负责人和备用负责人指定的系统负责人和获授权的备用负责人
保管人可以创建、撤销和轮换材料的个人或团队
存储位置保险库引用或受管理的位置,绝不放秘密值
代理路径指定的代理集成、工具调用或批准的执行路径
审批级别无需审批、每次会话或每次使用,并注明原因
轮换计划触发条件、计划日期或周期、负责人、替换测试
撤销方法准确的控制台角色、命令或运行手册引用
证据审计位置、上次审核日期和审核人

代理路径这一列会迫使团队回答一个有用的问题:代理如何获得这份凭据所提供的能力?“编程 shell 中的环境变量”是一种答案,但它应该让你感到不安,因为进程可能打印、传输或持久化这个值。“操作网关执行请求并返回响应”则是另一种设计,暴露路径更小。

撤销方法字段应该让其他人也能执行。“去找 Sam”不是方法。“在服务商项目设置中禁用令牌,然后撤销当前代理会话”才是方法。第一次添加记录时就测试这条指令,不要等事故发生后才发现每个控制台页面都变得陌生。

不要只用“活动”或“非活动”这样的状态字段。加入 last usedlast reviewedplanned retirement。未使用的凭据并不安全,项目结束后没人记得撤销的往往就是它。

轮换计划必须包含替换和验证

选择三项清晰的控制
使用 Sallyport 固定的保险库、会话和逐次调用控制,不必自行构建代理策略规则。

只有在旧凭据被禁用,并且替代凭据通过真实代理路径完成了预期操作后,轮换才算完成。创建新令牌、把它放进存储中,再承诺以后处理旧令牌,会让两个身份同时有效,事故发生时工作量也会翻倍。

轮换计划应写明五项运行事实:

  1. 触发轮换的事件,例如计划到期、员工离职、怀疑泄露或权限范围变化。
  2. 创建替代凭据的人,以及批准权限变化的人。
  3. 新材料的存储位置,且不会因此交给代理。
  4. 用于证明替代凭据有效的最小测试操作。
  5. 撤销旧材料并记录证据的准确时点。

使用范围狭窄的测试。对于 HTTP 凭据,调用一个需要预期权限且无害的端点,并确认状态和响应结构符合预期。对于 SSH,在批准的主机组上执行强制部署状态命令,而不是用通用 shell 登录测试。

测试记录可以简单写成:

Credential ID: api-catalog-deploy-prod-01
Replacement ID suffix: ...7KQ2
Test: POST /deployments/validate for catalog-api revision 8f3c
Expected: HTTP 200 with validation status accepted
Old credential revoked: provider audit event recorded
Reviewer: production service owner

不要制定团队无法遵守的轮换周期。反复例外会让人把清单当成虚构物。服务商支持时使用到期机制,建立事件驱动的触发条件,并让审核周期与风险相匹配。生产写入权限、对敏感数据的广泛读取权限,以及共享主机的 SSH 访问,都比没有敏感响应数据的一次性 staging 令牌更值得严格审查。

如果怀疑泄露,服务能够承受时应先撤销。团队经常浪费时间试图确认泄露的令牌是否来自终端缓冲区、CI 日志、提示词记录或本地历史。通常不需要在停止凭据前证明这一点。保留日志,替换凭据,然后调查泄露路径。

代理审批应跟随调用后果

让保险库锁定真正有效
保险库锁定后,所有操作都会被拒绝,直到通过 Mac 的硬件安全机制解锁。

代理运行有普通脚本通常没有的生命周期:有人启动它,离开一段时间,回来后才发现它已经发出了许多外部调用。因此,清单不仅应写明谁负责凭据,还应说明何时需要人工授权。

对于一个边界清晰、由可信且已识别的本地代理进程执行、后果低到中等的运行,可以采用每次会话审批。它确认该进程在存活期间可以使用列出的权限,但不意味着未来每一次调用都可以自动放行。

对于可能发布内容、部署服务、修改生产数据、访问高敏感度响应,或创建新的外部承诺的操作,应要求每次使用都审批。多点一下,比向客户或财务团队解释意外操作便宜得多。如果服务商支持,审批级别不同的操作应使用不同凭据。

审批不能替代权限范围。由于请求描述含糊、操作发生在事故期间,或代理快速连续发出了多个相似调用,人可能批准错误的事情。先把权限范围缩小,再用审批覆盖范围控制无法表达的剩余风险。

Sallyport 会把 API 和 SSH 凭据保存在 Mac 的加密保险库中,并可要求新代理进程启动时,或每次使用选定凭据时进行授权,同时代理收到的是结果而不是秘密。

好的清单会把每一项高后果记录映射到使用后预期产生的审计证据。记录会话标识符或运行日志位置、每次调用的活动记录、目标、时间戳、结果,以及适用时的批准人。如果证据无法说明哪份凭据产生了哪项结果,那么这套代理集成对于你授予的权限来说过于不透明。

审计记录能在糟糕的运行后解决争议

清单是预防性工作。代理行为异常后,审计记录回答的是另一个问题:它实际尝试了什么,哪些成功了,以及哪项权限让它成为可能。不要把这两项工作混在一起。维护良好的清单无法证明某次调用确实发生,日志也无法证明某项权限是合理的。

围绕一条清单记录进行事故演练。让操作者找到负责人,撤销凭据,停止当前代理访问,确定最后一次成功调用,并验证审计轨迹没有被改动。测量的是困惑程度,而不只是经过的时间。如果人们说不清目标账户,或分不清旧令牌和替代令牌,就修正清单字段。

当多人可以查看或导出日志时,篡改证据很重要。普通的只追加数据库可能被拥有足够权限的管理员修改,然后伪装成历史记录。哈希链式日志可以在用保存的序列验证链条时发现未经授权的修改。但它不能让原始请求变得明智,也不能阻止获授权的人做出错误调用。这是两类不同的控制措施。

把审计保留期限的决定与清单记录放在一起,尤其是在响应可能包含敏感输出时。活动记录应保留足够的上下文供调查使用,同时不要永远随意保存完整的客户载荷。尽可能保存请求元数据和结果状态,只有在确实必要且获得允许时,才保留完整响应。

首先应完成的凭据记录,是代理今天就能用来修改生产环境的那一条。准确写明目标,让允许的动词具体明确,把撤销指令写到其他人也能照做,并测试替换路径。如果这一行还充满猜测,那么其余清单都只是装饰。

常见问题

AI 代理使用的个人 API 令牌也需要登记吗?

是的。只要代理可以使用个人令牌访问生产账户,它就已经成为生产凭据。将它加入清单,记录账户关系的负责人,限制权限范围,并在工作变得可重复后换成服务凭据。

应该如何记录编程代理使用的 SSH 凭据?

把每个 SSH 身份作为一行单独记录,即使多个公钥都能访问同一台主机。私钥材料、允许登录的账户、转发权限、源代码仓库和轮换日期都可能不同。名为“部署 SSH”的单行记录会隐藏事故处理时真正需要的信息。

自主代理使用的凭据应该由谁负责?

应用或系统负责人必须批准凭据可以执行的操作。平台或安全团队可以负责存储和轮换流程,但他们无法准确替别人批准数据库写入或生产部署。两者不同的时候,应分别记录这两个角色。

只读 API 凭据也需要同样登记吗?

不一定。只读权限仍可能暴露客户数据、源代码、部署配置或其他目标的列表。记录只读访问的数据分类和允许调用的端点,细致程度应与记录写权限相同。

哪些事件应该触发凭据轮换?

人员离职、密钥进入代码仓库或终端记录、代理进程接收到密钥、权限范围发生变化、服务商撤销凭据,或计划轮换日期到来时,都应轮换凭据。可疑的审计记录也会触发立即更换,而不是先争论它是否可能无害。

AI 编程代理可以使用生产凭据吗?

不要因为方便就给代理一个通用的生产管理员凭据。创建一个角色和目标范围都很窄的独立凭据,并记录紧急撤销方法。如果服务商无法表达这些限制,就在操作前加入人工审批,或让代理完全无法执行该操作。

为什么不应该直接把 API 密钥交给代理?

代理需要的是发起操作请求的能力,而不是授权请求的秘密字符串。如果代理能从文件、环境变量、提示词或命令输出中读取令牌,它就可能把令牌复制到日志、补丁、问题评论或其他工具调用中。让秘密保留在执行请求的组件内,只向代理返回结果。

团队通常在哪里找到被遗忘的代理凭据?

先检查云控制台、CI 变量、密码管理器、开发者 shell 配置文件、部署脚本、仓库历史、服务配置,以及目标主机上的 authorized_keys 文件。然后询问每个系统负责人,这些位置之外还存在哪些凭据。被遗漏的凭据通常是早已不用但仍然有效的旧凭据。

每次会话批准和每次调用批准有什么区别?

每次会话批准回答的是谁启动了这次代理进程。每次调用批准回答的是这份凭据是否可以用于这一个具体请求。对于后果严重的凭据,应使用后者,因为一次初始批准不应自动授权长时间运行中的一连串操作。

什么样的凭据清单真正有用?

一份有用的清单应让你快速回答五个问题:凭据可以访问什么,谁能批准它,代理可以做什么,如何立即停止它,以及如何替换它。只要包含这些字段、持续更新,并且不保存秘密本身,电子表格也可以使用。清单是运行记录,不是秘密保险库。

Sallyport

Sallyport 替你的 AI 智能体执行 API 调用和 SSH 命令。密钥留在你 Mac 上的本地密钥库里;每次运行由你批准,每个操作都落入一份密封的审计日志。

© 2026 Sallyport · 依据 Apache-2.0 开源 · Oleg Sotnikov