这个 KMS 用来保存 token、密码、SSH key、2FA/TOTP 等敏感信息。敏感字段会在服务端用 AES-GCM 加密后写入 D1,查询时按权限解密返回。
| 字段 | 说明 | 例子 |
|---|---|---|
primary | 唯一服务名 / 主搜索名。接口通常用它定位一条密钥。 | github、cloudflare-pages |
category | 分类,用来筛选和模板化字段。 | github、cloudflare、ssh |
aliases | 别名,支持模糊搜索。 | git、主账号 |
tags | 标签,便于组织。 | prod、deploy |
description | 非敏感说明,明文保存。 | Cloudflare Pages 部署 token |
key_data | 真正的敏感内容,整块加密保存。 | {"token":"...","2fa":"..."} |
key_data 里填写敏感字段,例如 token、password、private_key、2fa。查询接口支持两种鉴权方式:
Authorization: Bearer <KMS_API_KEY>X-Admin-Password: <ADMIN_PASSWORD>curl "https://kms-admin-4lo.pages.dev/api/query?primary=github" \
-H "Authorization: Bearer $KMS_API_KEY"
curl "https://kms-admin-4lo.pages.dev/api/query?search=git" \
-H "Authorization: Bearer $KMS_API_KEY"
curl "https://kms-admin-4lo.pages.dev/api/query?search=git&expand=true" \
-H "Authorization: Bearer $KMS_API_KEY"
curl "https://kms-admin-4lo.pages.dev/api/query?category=cloudflare" \
-H "Authorization: Bearer $KMS_API_KEY"
新接口更适合脚本和自动化。支持 API Key 读写,不必登录后台。
Authorization: Bearer $KMS_API_KEY
# 或
X-API-Key: $KMS_API_KEY
curl -X POST "https://kms-admin-4lo.pages.dev/api/v1/secrets" \
-H "Authorization: Bearer $KMS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"primary": "github",
"category": "github",
"aliases": ["git"],
"tags": ["prod"],
"description": "GitHub 主账号",
"key_data": {
"user": "ziren28",
"token": "github_pat_xxx",
"2fa": "JBSWY3DPEHPK3PXP"
}
}'
curl -X PUT "https://kms-admin-4lo.pages.dev/api/v1/secrets" \
-H "Authorization: Bearer $KMS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"primary":"docker","category":"docker","data":{"user":"me","pat":"xxx"}}'
curl -X PUT "https://kms-admin-4lo.pages.dev/api/v1/secrets" \
-H "Authorization: Bearer $KMS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"primary":"my-token","category":"api","value":"secret-value"}'
curl "https://kms-admin-4lo.pages.dev/api/v1/secrets/github" \
-H "Authorization: Bearer $KMS_API_KEY"
curl "https://kms-admin-4lo.pages.dev/api/v1/secrets/github?fields=key_data.token" \
-H "Authorization: Bearer $KMS_API_KEY"
# 返回:{"value":"github_pat_xxx"}
curl "https://kms-admin-4lo.pages.dev/api/v1/secrets/github?fields=primary,category,key_data.user" \
-H "Authorization: Bearer $KMS_API_KEY"
用于先看 KMS 里到底有哪些 primary,快速检索,不解密、不返回 key_data,更安全也更快。
curl "https://kms-admin-4lo.pages.dev/api/v1/secrets/names" \
-H "Authorization: Bearer $KMS_API_KEY"
# 搜索 / 按分类过滤
curl "https://kms-admin-4lo.pages.dev/api/v1/secrets/names?search=cloudflare&category=cloudflare&limit=50" \
-H "Authorization: Bearer $KMS_API_KEY"
# 返回:
# {
# "names": ["cloudflare-pages", "cloudflare-api"],
# "items": [{"primary":"cloudflare-pages","category":"cloudflare","aliases":[],"tags":["deploy"]}],
# "total": 2
# }
curl "https://kms-admin-4lo.pages.dev/api/v1/secrets/github?reveal=false" \
-H "Authorization: Bearer $KMS_API_KEY"
curl -X PATCH "https://kms-admin-4lo.pages.dev/api/v1/secrets/github" \
-H "Authorization: Bearer $KMS_API_KEY" \
-H "Content-Type: application/json" \
-d '{"data":{"2fa":"JBSWY3DPEHPK3PXP"}}'
curl -X DELETE "https://kms-admin-4lo.pages.dev/api/v1/secrets/github" \
-H "Authorization: Bearer $KMS_API_KEY"
接口地址:GET /api/totp。返回当前验证码和过期时间。
curl "https://kms-admin-4lo.pages.dev/api/totp?2fa=JBSWY3DPEHPK3PXP" \
-H "Authorization: Bearer $KMS_API_KEY"
例如 service=github,KMS 会查 primary=github 的记录,并从 key_data 里读取 2FA 字段。
curl "https://kms-admin-4lo.pages.dev/api/totp?service=github" \
-H "Authorization: Bearer $KMS_API_KEY"
2fa 2fa_secret totp otp otp_secret two_factor two_factor_secret
{
"service": "github",
"source": "kms",
"code": "123456",
"period": 30,
"expires_in": 18,
"expires_at": 1778484620,
"authorized_via": "api_key"
}
| 字段 | 说明 |
|---|---|
code | 当前 6 位验证码。 |
expires_at | 验证码过期的 Unix 秒时间戳。 |
expires_in | 距离过期还剩多少秒。 |
period | TOTP 周期,默认 30 秒。 |
source | direct 表示直接传 secret,kms 表示从 KMS 服务记录读取。 |
点击「下载 Enpass CSV」。导出文件包含明文密码和 TOTP,请妥善保存,用完删除。
API Key 用于自动化脚本访问查询接口,不建议把管理员密码写进脚本。现在支持 scope、资源限制、过期时间、禁用检测。
curl -X POST "https://kms-admin-4lo.pages.dev/api/apikeys" \
-H "Authorization: Bearer ADMIN_SESSION" \
-H "Content-Type: application/json" \
-d '{
"name": "ci-read-github",
"scopes": ["secret:read", "totp:read"],
"categories": ["github"],
"primaries": ["github-*"],
"expires_at": 1799999999
}'
secret:read secret:write secret:delete totp:read export:read admin:*
curl "https://kms-admin-4lo.pages.dev/api/apikeys/verify" \
-H "Authorization: Bearer $KMS_API_KEY"
# 返回 valid、api_key_id、scopes、resources;过期或禁用会返回 401
旧 API Key 没有 scope 字段时,按 admin:* 兼容处理。新建 Key 建议只给最小权限。
API v1 的读取、列表、写入、更新、删除都会写入 audit_logs。记录 actor、action、primary、IP、User-Agent、成功状态和脱敏 metadata。
audit_logs 字段:
id, actor_type, actor_id, action, primary_key, ip, user_agent, success, metadata, created_at
PUT 覆盖、PATCH 更新、DELETE 删除前,会把旧版本保存到 secret_versions,便于追溯和后续回滚。
curl "https://kms-admin-4lo.pages.dev/api/v1/secrets/github/versions" \
-H "Authorization: Bearer $KMS_API_KEY"
# 默认不返回明文 key_data;如确需查看历史明文:
curl "https://kms-admin-4lo.pages.dev/api/v1/secrets/github/versions?reveal=true" \
-H "Authorization: Bearer $KMS_API_KEY"
2fa 字段,方便自动化取验证码。