安全与合规
Cirrus CDN 在认证、数据存储、传输与运维流程上贯彻安全最佳实践。本章梳理已实现的控制措施,并指出面向合规场景的注意事项。
身份与访问管理
- 用户认证——密码使用 Argon2 哈希(
core/security.py)。会话通过 HTTP-only Cookie 实现,可配置域名、Secure 标志与 SameSite 属性。登录失败返回通用错误,避免用户枚举。 - 会话管理——会话存于内存(
SESSIONS字典)。每次请求刷新过期时间(SESSION_TTL_SECONDS,默认 7 天)。登出会显式清除 Cookie 并删除服务端记录。 - 服务令牌——令牌使用
secrets.token_urlsafe生成,采用 SHA-256 哈希存储,不保留明文。令牌后缀(最后两个字符)方便安全识别。删除令牌会同时移除哈希与 ID。 - Master 令牌——环境变量
MASTER_API_TOKEN具备特权(列出/创建/删除服务令牌)。端点会检查request.state.cirrus_auth_method == "master"才允许操作。 - 引导模式——当系统无用户或令牌时,
require_user允许匿名访问以完成初始配置;一旦创建账户,认证将成为必需。
数据保护
- Redis 存储——敏感值(密码哈希、令牌哈希、证书)存于 Redis。不会保存明文密码或令牌。证书(
cdn:cert:{domain})同时含完整链与私钥,需确保 Redis 基础设施安全(TLS、网络分段)。 - TLS 证书——OpenResty 在握手时直接从 Redis 加载证书到内存;签发后私钥不会写入磁盘。占位证书仅用于握手引导。
- ACME 凭据——acme-dns 的用户名/密码存于
cdn:acme:{domain}哈希;若受监管要求,可考虑加密或隔离 Redis。 - 日志——访问日志包含客户端 IP 与请求元数据,应按照隐私法规制定保留与脱敏策略。
传输安全
- 边缘 HTTPS——启用 TLSv1.2 与 TLSv1.3;
nginx.conf配置了会话缓存与 stapling,并支持 QUIC。 - 内部信任——Celery worker 通过
docker/entrypoint.sh从 Caddy 拷贝内部 CA 证书,使 HTTP 客户端信任 ACME 端点。 - Redis 连接——默认部署在本地网络使用明文 Redis;生产环境应启用 TLS 或限制访问范围。
- 指标端点——
/metrics监听 9145,默认仅对回环开放;可通过构建参数NGX_METRICS_ALLOW扩大允许列表。
清缓存与配置安全
- 清缓存请求需通过 API 鉴权;OpenResty 的
/cache/purge位置限制为127.0.0.1,防止未授权失效操作。 - 域名与节点负载验证器(
schemas.py)校验结构、IP 格式与状态字段,防止注入恶意配置。 - 启用
ENFORCE_ACME_CNAME_CHECK时,ACME 任务会在 DNS 未对齐的情况下拒绝签发。
秘密管理
.env文件(justfile中set dotenv-load)通常提供MASTER_API_TOKEN、ACME 端点、Redis 凭据等敏感信息。必须将.env排除在版本控制之外并安全存储。- 生产环境应使用 Docker Secrets 或编排平台的密钥管理(如 Kubernetes Secrets)替代纯环境变量。
合规考量
- 审计日志——应用日志记录关键事件(登录、证书签发)。若需更严格合规,可扩展至 CRUD 操作记录用户 ID,并输出结构化事件至 SIEM(参见第 11 章)。
- RBAC——现有实现仅区分认证用户与 master 令牌;企业场景可能需要细粒度角色(只读、运维、管理员),应将 RBAC 扩展纳入安全待办事项。
- 数据驻留——Redis 与日志卷需符合驻留要求;可采用托管服务或区域化部署。
- 证书处理——Redis 中的私钥可能需要加密或使用 HSM 支撑存储以满足监管。
- 漏洞管理——基础镜像(
ghcr.io/astral-sh/uv:python3.13-trixie-slim、openresty/openresty:jammy)需定期更新。建议集成 Dependabot/Snyk。
威胁模型摘要
| 威胁 | 缓解措施 |
|---|---|
| 凭据窃取 | Argon2 哈希、HTTP-only Cookie、修改密码时会话失效。 |
| 令牌泄露 | 令牌哈希静态存储、仅展示后缀、master 令牌限制、客户端不持久化。 |
| 缓存投毒 | 严格的源站选择、可选头部覆盖、Redis 驱动配置避免任意 Lua 注入。 |
| 未授权清缓存 | API 认证 + 本地限定清缓存端点。 |
| 证书滥用 | ACME 锁防并发签发,CNAME 校验确保域名对齐。 |
默认安全姿态稳健,同时保留向更严格合规扩展的路径。第 9 章将关注运维工具与可观测性,确保这些控制易于验证与执行。