AI代理密钥管理服务

Keiko是一款为AI代理设计的密钥安全管理服务,通过代理模式确保AI工具(如Claude Code)在使用API令牌、密码和凭证时无需接触实际敏感值,同时提供输出净化、会话管理和审计追踪等安全功能。

  • by goldtopcollective
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 goldtopcollective/keiko

使用说明

惠子

AI代理的安全秘密管理器。Keiko让Claude Code等人工智能工具使用API令牌、密码和凭据 从未见过实际值.

问题

人工智能代理需要API令牌来完成有用的工作——调用API、部署代码、管理基础设施。但是,通过AI的上下文窗口传递秘密值是一种安全风险:它们出现在对话日志、工具响应中,并可能出现在训练数据中。

惠子是如何解决的

惠子使用 代理模式人工智能特工告诉Keiko 运行什么命令 和 它需要什么秘密,但从未见过秘密值本身:

AI Agent ──► Keiko MCP Server ──► Keiko Backend
                   │                      │
              resolves secrets ◄── HTTPS ──┘
                   │
              spawns: bash -c "your command"
              with secrets as env vars
                   │
              captures output
              sanitizes (redacts leaked values)
                   │
AI Agent ◄── clean output only

AI表示 “使用我的API令牌运行此curl命令” --Keiko将令牌作为环境变量注入,运行命令,扫描输出中的任何泄漏值,对其进行编辑,并返回干净的输出。

快速开始

1.部署后端

后端存储加密的机密(AES-256-GCM),并通过HTTPS提供服务。使用Docker部署到任何具有持久存储的平台:

# Generate an encryption key
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

# Deploy (Railway, Render, Fly, Docker Compose, etc.)
# See docs/setup-guide.md for full instructions

2.设置MCP服务器

MCP服务器在每台需要访问机密的机器上运行。它是一个只有2个依赖项的独立包,不需要本机编译。

cd packages/mcp
npm install
npm run build
node dist/index.js --store-token YOUR_TOKEN

3.连接到克劳德代码

添加 ~/.mcp.json:

{
  "mcpServers": {
    "keiko": {
      "command": "node",
      "args": ["/absolute/path/to/keiko/packages/mcp/dist/index.js"],
      "env": {
        "KEIKO_URL": "https://your-keiko-backend.example.com"
      }
    }
  }
}

重新启动克劳德代码。问 “检查Keiko会话状态” 以验证。

AI如何使用它

一旦连接,人工智能就会发现可用的秘密,并在命令中使用它们——而永远看不到这些值:

AI: list_secrets
→ my_api_token [Bearer token in Authorization header]

AI: run_with_secrets
   command: curl -s -H "Authorization: Bearer $API_TOKEN" https://api.example.com/data
   secrets: [{env: "API_TOKEN", name: "my_api_token"}]
→ {"data": [...]}  (secret values redacted from output)

每个秘密包括 auth_pattern 和 auth_instructions 元数据,因此AI知道如何在没有外部文档的情况下使用它。

MCP工具

工具 目的
run_with_secrets 运行一个命令,将secrets作为env变量注入
list_secrets 发现可用的秘密(仅限名称和身份验证模式)
session_status 检查身份验证状态
lock 终止开关--撤销所有活动会话
set_ttl 配置会话到期时间(0.5-24小时)
add_secret 创建新秘密
update_secret 替换现有密钥的值
get_guide 获取使用指南

安全

  • 静态加密 --AES-256-GCM,每个秘密随机IV,加上版本密钥(ENCRYPTION_KEY, ENCRYPTION_KEY_V2,…)和就地旋转端点,因此钥匙可以在不停机的情况下旋转
  • 哈希认证令牌 --64个字符的十六进制令牌,在数据库中哈希SHA-256,明文显示一次
  • 令牌范围 --每个令牌仅限于一组秘密名称glob模式(例如。 railway_*),因此泄露的令牌只会暴露它实际需要的保险库部分
  • 输出净化 --扫描原始、base64、base64url、URL编码、十六进制、JSON字符串转义和HTML实体转义形式的命令输出以查找秘密值
  • 每个令牌的速率限制 --独立于每个IP,限制通过多个IP路由的单个令牌的滥用
  • CSRF保护 — X-CSRF-Token 每个正在发生变化的管理UI端点都需要标头
  • 会话管理 --可配置TTL、自动刷新、全局终止开关
  • 审计跟踪 --使用令牌ID、会话ID、IP和时间戳记录的每个操作

秘密值 从不 出现在AI工具响应、对话日志或客户端计算机上的磁盘上。看 GET /api/guide 对于完整的威胁模型,代理模式可以防止什么,不能防止什么。

建筑

keiko/
├── packages/mcp/          # MCP server (runs on your machine)
│   ├── src/
│   │   ├── server.ts       #   7 tool registrations
│   │   ├── client.ts       #   HTTPS client to backend
│   │   ├── executor.ts     #   Shell spawner + env var injection
│   │   ├── sanitizer.ts    #   Output redaction
│   │   └── keychain.ts     #   OS keychain (Win/Mac/Linux)
│   └── package.json        #   2 deps: @modelcontextprotocol/sdk + zod
│
├── src/                    # Backend API (runs on your server)
│   ├── api/                #   Express routes, auth, crypto
│   └── ui/                 #   EJS admin templates
│
└── Dockerfile              # Multi-stage production build

MCP服务器和后端是完全独立的软件包。MCP服务器具有 零本地依赖关系 — npm install 无需编译器或 --ignore-scripts.

平台支持

环境 令牌存储 注释
Windows Windows凭据管理器 通过Git Bash(而非WSL)运行的命令
macOS macOS钥匙扣 系统bash
Linux libsecret 需要 secret-tool
Docker/CI KEIKO_TOKEN env var 不需要密钥链

文档

  • 安装指南 -所有环境、后端部署、故障排除、API参考和配置选项的完整设置说明

技术栈

后端: Node.js 20、TypeScript、Express、SQLite(better squelite3)、EJS、谷歌OAuth

MCP服务器: Node.js 20、TypeScript、MCP SDK v1.x、Zod

部署: Docker(多阶段构建),任何具有持久卷的平台。经过测试 铁路.