密钥库是一个保险箱(Vault),集中管理外部服务的鉴权信息。保险箱内存放具体的密钥(API Key、Token 等),在创建会话时绑定,供 MCP 服务和技能在运行时引用。
结构
密钥库采用两级结构:
- 密钥库(Vault):保险箱容器,用于分组管理密钥。
- 密钥(Credential):保险箱内的具体密钥,每条密钥包含变量名和变量值。
创建密钥库
- 在密钥库页面点击创建密钥库。
- 填写密钥库名称,点击创建。
添加密钥
创建密钥库后,在密钥库详情页添加具体的密钥:
- 点击密钥库名称进入详情页。
- 在密钥列表区域点击新建密钥。
- 填写以下字段:
- 名称:密钥的显示名称。
- 类型:固定为环境变量。密钥以环境变量形式供智能体引用,请求出网时由网关替换为真实值。
- 变量名:供工具引用的键名,例如
MY_API_KEY。创建后不可修改。 - 变量值:实际的密钥内容。保存后控制台与接口仅回显末 4 位,明文不再回传,仅在工具调用时由后端解密注入。
- 替换位置:固定为 Authorization 请求头(Bearer)。真实密钥以
Bearer <密钥>形式写入请求的 Authorization 头,请求体与查询参数中的占位符不会被替换。 - 密钥替换生效域名:限制只有发往这些域名的请求才会被替换为真实密钥,其余域名只收到占位符。用逗号或换行分隔,支持
*.example.com通配子域,最多 10 个域名。填写*对全部域名生效,需知悉风险并勾选确认。
- 勾选共享凭据确认,点击创建完成。
密钥替换机制
密钥通过占位符 + 网关替换的方式注入,智能体本身不接触真实密钥:
- 占位符引用:智能体在工具或 MCP 代码中通过环境变量
${变量名}引用密钥。例如在 Authorization 头中写入Authorization: Bearer ${MY_API_KEY}。 - 网关替换:请求出网时,网关检查目标域名是否在密钥替换生效域名列表中。命中则将 Authorization 头中的占位符替换为真实密钥;未命中则保留占位符原文,目标域名只收到占位符。
- 作用范围:仅 Authorization 头中的占位符会被替换,请求体与查询参数中的占位符保持原样。
- 主机匹配规则:精确匹配与通配匹配;匹配忽略大小写,端口不参与匹配;
*.example.com匹配其子域,不含裸域example.com,裸域需单独列出。 - 重定向安全:请求经重定向(3xx)跨域到密钥替换生效域名之外的地址时,重定向后的请求不再替换。
直接从环境变量取值当密钥用即可,无需在代码里写死密钥。按 Bearer 格式放入 Authorization 头,请求出网时会自动替换为真实密钥。
选择生效域名
*(放开):发往全部域名的请求都会替换为真实密钥,适合不需要限制密钥发送范围的场景。需知悉风险并勾选确认。- 精确域名(限制):如
api.example.com、*.example.com,仅发往匹配域名的请求替换为真实密钥,其余请求只收到占位符;占位符不含真实密钥,泄露也不影响密钥安全。适合密钥只应发往自有服务的场景。
在代码中引用密钥
无需特殊 SDK:在工具或 MCP 代码中像普通环境变量一样读取,并按 Bearer 格式放入 Authorization 头。读到的是占位符,请求发往匹配域名时由网关自动替换为真实密钥:
与环境变量的区别
会话获取外部取值有两种方式:会话环境变量(environment_variables)与密钥库密钥。两者都在代码中以环境变量按名读取,但值形态与安全姿态不同:
| 维度 | 会话环境变量 | 密钥库密钥 |
|---|---|---|
| 容器内形态 | 真实值 | 占位符 |
| 真实值出现时机 | 容器内全程可读 | 仅出网网关命中生效域名的一瞬间 |
| 域名限制 | 无 | 仅发往生效域名的请求被替换为真实值 |
| 鉴权方式限制 | 无,值可在代码中自由使用 | 仅支持 Authorization 头替换,其它请求头或请求体鉴权不支持 |
| 复用与轮换 | 随会话配置,修改需更新会话 | 密钥库跨会话复用,集中更新与轮换 |
| 适用场景 | 非敏感配置,或底层鉴权方式未知的 SDK/技能 | 要求密钥不外泄的高敏感场景 |
- 使用第三方 SDK 或技能且无法确认其底层请求的鉴权方式时,网关无法保证在正确位置完成替换,请改用会话环境变量。
- 会话环境变量的真实值可被容器内代码读取或打印,可能进入日志与模型上下文,高敏感密钥请使用密钥库。