审计与安全配置
本章讲配置变更的审计记录,以及控制台的安全设置。其中几项没有可视化界面,是设计取舍,本章如实说明。
审计日志
审计日志记录控制台里的配置变更操作(增/删/改),与请求日志(日志与日志体存储,记录每次 API 调用)互补。
重要:审计日志没有控制台界面。它只在后端写入 audit_log 表,控制台没有「审计」页,也没有列出审计的 API。如需查阅,直接查数据库的 audit_log 表。
每条审计记录的字段:
| 字段 | 说明 |
|---|---|
| actor | 操作者(控制台用户名,或 secret_key,或 api_key:<名>) |
| action | create / update / delete |
| entity_type | access_key / upstream / model / console_user / access_key_group / load_balancer |
| entity_id | 受影响实体标识 |
| diff | 变更差异(update 操作),超长截断 |
| ip_address | 操作者 IP |
| request_id | z-request-id 头(若有) |
| created_at |
写入是「即发即忘」:审计写入失败不影响主操作,仅告警。MCP 工具调用与 ACL 违规也记录到审计日志。
说明:审计日志定位为运维元数据,不等同完整审计系统。生产级合规审计如需更强保证,建议配合外部日志采集。
IP 封禁
控制台登录防爆破由 IP 封禁自动处理:
- 连续登录失败达
CONSOLE_MAX_FAILURES(默认 5)→ 自动临时封禁该 IPCONSOLE_BAN_DURATION(默认 300 秒)。 - 封禁存于内存(重启丢失)与 Redis(多实例持久)。
没有手动封禁/解封的入口。这是有意的:手动 IP 管理属于 WAF(Web 应用防火墙)的职责,网关不做。如需手动 IP 控制,在网关前部署 WAF 或反代。
限流
三层限流:
| 层级 | 配置 | 默认 |
|---|---|---|
| 每访问密钥 | RATE_LIMIT_RPM / RATE_LIMIT_WINDOW_SECS | 禁用;启用后 120 req/min |
| 每 IP | IP_RATE_LIMIT_RPM | 禁用 |
| 每上游/每模型 | rpm / max_concurrency / tpm / min_interval(控制台数据库侧) | 按需配 |
只读快照:GET /console/api/rate-limit-status 返回各层当前令牌/并发占用。每密钥限流经环境变量配置,每上游/每模型限流在控制台配置,无独立写 API。
调用方遇限流时会收到 HTTP 429 Too Many Requests,响应体携带 Retry-After(单位秒,表示距下次可用还需等待的时间)。完整错误码字典见 错误码。
访问密钥掩码
列表里密钥只显示前后 4 位(如 sk-a***xxxx)。完整值只在「复制」时按需取出(GET /access-keys/{name}/api-key),匿名密钥不支持取完整值。上游的 API key 在控制台永不暴露。
密码策略
- bcrypt 哈希存储。
- 新建/重置/改密均要求 ≥8 字符。
- 禁用控制台用户 → 该用户现有会话立即吊销。
安全响应头
控制台路由统一带:
| 头 | 值 |
|---|---|
X-Content-Type-Options | nosniff |
X-Frame-Options | DENY |
Referrer-Policy | (策略值) |
Content-Security-Policy | (策略值) |
常见问题
Q:在控制台找不到审计日志页? 没有这页,是设计。直接查 audit_log 表。
Q:怎么手动封禁某个恶意 IP? 做不到,网关不提供手动封禁。IP 封禁是自动的(失败次数触发)。手动 IP 控制用 WAF/反代。
Q:登录被自己锁了怎么办? 等封禁超时(默认 300 秒)自动解。或让管理员调整 CONSOLE_MAX_FAILURES/CONSOLE_BAN_DURATION(需重启容器)。
Q:访问密钥列表的掩码能关掉看完整值吗? 不能,掩码是强制的。要取完整值用该行的「复制」按钮(调接口取一次)。
下一步:配置 Header ACL 访问规则 看准入控制;日志与日志体存储 看请求日志;访问密钥与密钥组字段 看密钥管理;环境变量配置参考 看全部环境变量。
