fischer-agentkit/docs/deployment/secret-inventory.md

68 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Fischer AgentKit — 密钥清单Secret Inventory
本文档列出 Helm Chart 涉及的全部 11 个 secret slotKTD-4 / R2a
每个 slot 含:名称、用途、来源、轮换周期、归属角色、对应环境变量。
> 密钥后端二选一Sealed Secrets`secrets.backend: sealed-secrets`)或
> External Secrets Operator`secrets.backend: external-secrets`)。
> 禁止明文 Kubernetes Secret + Git 提交。
## 密钥清单总表
| # | Slot 名称 | Secret Key | 环境变量 | 用途 | 来源 | 轮换周期 | 归属 |
|---|-----------|-----------|----------|------|------|----------|------|
| 1 | JWT 签名密钥 | `jwt-signing-key` | `JWT_SIGNING_KEY` | JWT access(15m)/refresh(7d) token HS256 签名 | 运维生成32+ 字节随机串) | 90 天 | 安全团队 |
| 2 | API Key | `api-key` | `API_KEY` | 服务间调用 / SCIM bearer / `agentkit pair` 鉴权 | 运维生成 | 180 天 | 平台运维 |
| 3 | DB 凭据 | `database-url` | `DATABASE_URL` | 应用层 PG 连接 DSN含用户名+密码) | DBA 提供 | 90 天 | DBA |
| 4 | IDP 签名证书 | `idp-signing-certs` | `IDP_SIGNING_CERTS` | OIDC/SAML IdP 签名证书 PEMJSON map多 IDP 热轮换) | 各 IDP 管理员提供 | 365 天 | 身份团队 |
| 5 | 第三方 API Key | `third-party-api-keys` | `THIRD_PARTY_API_KEYS` | LLM provider API KeyJSON mapDashScope/DeepSeek/OpenAI/Anthropic | 各 provider 控制台 | 90 天 | LLM 运维 |
| 6 | TLS 服务器证书 | `tls-server-cert` | Ingress TLS Secret | Ingress TLS 终止证书 + 私钥 | 证书签发机构 / cert-manager | 365 天 | 平台运维 |
| 7 | mTLS 客户端证书 | `mtls-client-cert` | `MTLS_CLIENT_CERT` | 与下游服务KMS/HSM、内部 API双向 TLS 客户端证书 | 内部 PKI | 180 天 | 安全团队 |
| 8 | KMS/HSM PKCS#11 PIN | `kms-hsm-pin` | `KMS_HSM_PIN` | 硬件安全模块 PKCS#11 访问 PIN | HSM 管理员 | 365 天 | HSM 运维 |
| 9 | OTel exporter token | `otel-exporter-token` | `OTEL_EXPORTER_OTLP_HEADERS` | OTLP collector 鉴权 bearer token | 可观测性平台 | 90 天 | 可观测性团队 |
| 10 | Redis 密码 | `redis-password` | `REDIS_PASSWORD` | Redis requirepass基础设施层 | DBA / 缓存运维 | 90 天 | DBA |
| 11 | PostgreSQL 密码 | `postgres-password` | `POSTGRES_PASSWORD` | PostgreSQL POSTGRES_PASSWORD基础设施层 | DBA | 90 天 | DBA |
## 风险等级
| Slot | 泄露影响 | 风险等级 |
|------|----------|----------|
| 1 JWT 签名密钥 | 任意伪造身份 token | 高 |
| 2 API Key | 服务间冒充 / SCIM 越权 | 高 |
| 3 DB 凭据 | 数据库全量读写 | 严重 |
| 4 IDP 签名证书 | SSO 信任链断裂(不能直接伪造,需配合 IdP 私钥) | 中 |
| 5 第三方 API Key | LLM 账单盗刷 / 数据外泄 | 高 |
| 6 TLS 服务器证书 | TLS 中间人 / 域名冒充 | 高 |
| 7 mTLS 客户端证书 | 内部 API 越权访问 | 高 |
| 8 KMS/HSM PIN | 密钥托管被解锁 / 加解密被滥用 | 严重 |
| 9 OTel token | 遥测数据投毒 / 窃取 | 中 |
| 10 Redis-PG 密码 | 缓存/数据库越权 | 严重 |
## 存储位置
所有 secret slot 渲染到统一 Kubernetes Secret`<release>-secrets`
由 SealedSecret 或 ExternalSecret 控制器自动创建 / 同步:
```
<release>-secrets (Secret)
├── jwt-signing-key
├── api-key
├── database-url
├── idp-signing-certs
├── third-party-api-keys
├── tls-server-cert
├── mtls-client-cert
├── kms-hsm-pin
├── otel-exporter-token
├── redis-password
└── postgres-password
```
deployment.yaml 通过 `env.valueFrom.secretKeyRef` 引用上述全部 key。
TLS 服务器证书slot 6额外被 Ingress 的 `tls.secretName` 引用
(需由 cert-manager 或运维单独创建为 `kubernetes.io/tls` 类型 Secret
## 轮换流程
详见 `docs/deployment/key-rotation-runbook.md`