Skip to content
bitzorcas
中EN

Reference

生产安全检查与交付证据

用启动门禁、负向契约、攻击面验证和恢复演练完成生产安全验收,而不是口头勾选清单。

Last updated

这份清单是生产评审入口。每个勾选项都应链接到配置快照、测试报告、仪表板、审计查询或演练记录。没有证据的“已确认”不能作为商业 GA 结论。

先运行 Host 启动门禁

API 的 RuntimeConfigurationGuard 在 Production 与 Staging 检查关键依赖,发现 Shell/default infrastructure 时拒绝启动。当前门禁覆盖数据库、RabbitMQ、Redis、可信代理、OTLP、对象存储、Webhook delivery 与 Runtime License。

Terminal window
# 以类生产环境执行启动烟测,期望配置缺失时非零退出。
ASPNETCORE_ENVIRONMENT=Staging \
dotnet run --project src/Hosts/BitzOrcas.Api/BitzOrcas.Api.csproj
# 使用部署系统注入完整配置后再次执行,保留启动日志为证据。
ASPNETCORE_ENVIRONMENT=Production \
dotnet run --no-build --project src/Hosts/BitzOrcas.Api/BitzOrcas.Api.csproj

门禁通过只表示必要配置键和部分显式条件成立,不会主动验证所有远端权限、证书链、密钥可轮换或备份可恢复。

身份与认证

  • JWT issuer、audience 与签名密钥来自受控来源,未知 kid、过期 token 和错误 audience 被拒绝;
  • 新旧 signing key 的重叠、切换和撤销完成演练;
  • HMAC timestamp/nonce/body、API Key hash、SCIM 独立 scheme 均有负向测试;
  • Development fixtures 在 Production/Staging 不存在;
  • 管理员和高风险操作启用 MFA/step-up;
  • 密码找回、MFA 恢复和会话撤销不会产生认证绕过;
  • 认证失败响应不泄露账号、租户或凭据状态。
证据:认证契约报告 + key rotation 演练 + fixture 全局扫描
负责人:Identity owner + Platform Security
阻断项:弱默认密钥、未知 kid 可通过、生产测试凭据

授权与数据范围

  • 所有公开 Command/Query 的 resource/action 经过清单审查;
  • Deny 优先、全 Neutral 默认拒绝、依赖故障拒绝均有测试;
  • Application scope 不会冒充 User RBAC;
  • DataScope 已编译为列表查询谓词,而非只存在于决策对象;
  • 权限、关系与 Feature 变更会失效缓存;
  • Delegated caller 不复用普通授权缓存;
  • 批量、导出、搜索与复杂 join 具有越权测试。

不要只验证一个管理员 happy path。至少使用同租户无权限用户、其他租户用户、应用调用者和 delegated caller 运行相同用例。

多租户隔离

  • tenant id 只来自可信 Claim、应用凭据、Host 映射或作业作用域;
  • Header/Path tenant 与可信身份不一致时拒绝;
  • ORM 查询、按主键读取、更新、删除和唯一约束覆盖 tenant;
  • 缓存、幂等、限流、消息与对象存储 key 包含 tenant 维度;
  • 后台任务显式恢复 tenant/caller context;
  • Consumer Contract Tests 覆盖全部商业 persistence profile;
  • Host 与客户租户的特权边界有独立测试。

跨租户负向测试必须证明“另一租户数据不存在或被拒绝”,不能只检查响应状态是 2xx。

网络、代理与浏览器

  • 公网流量强制 TLS,内部 mTLS 或网络 ACL 符合拓扑;
  • KnownProxies/KnownNetworks 或 DirectExposure 通过启动门禁;
  • 伪造 X-Forwarded-For 不会影响 IP 限流与审计;
  • Host / X-Forwarded-Host 保留公开端口,伪造 X-Forwarded-Port 不会改写受信 Host;
  • CORS 只列生产 Origin,非法 Origin 无授权响应头;
  • HSTS、CSP、frame、MIME、referrer、permissions 策略从公网入口验证;
  • Gateway 与 API 不产生冲突或弱化的重复头;
  • OpenAPI/Scalar 在生产关闭;若业务例外要求开启,产品 Host 已设置 RequireAuthentication=true,并由 HTTPS、VPN、IP 白名单或网关 SSO 纵深保护;
  • 文档访问登录与登出路径可达,正式产品登出会同步清除 bitzorcas.docs 会话;
  • 共享文档环境关闭 Scalar 鉴权持久化,配置和文档中没有账号、Token、API Key 或 HMAC Secret;
  • 健康端点不泄露连接串、版本细节或内部拓扑。

Secret、密钥与许可证

  • 仓库、Git 历史、CI 日志、镜像和 source map 通过 Secret 扫描;
  • 每个 Secret 有 owner、用途、读取主体、版本、轮换周期和撤销路径;
  • API Key/SCIM token 运行态只存 hash,明文只展示一次;
  • Webhook/Provider secret 静态加密,Data Protection purpose 独立;
  • Redis key ring 跨副本交叉解密并完成备份恢复;
  • Runtime License 私钥不随产品部署,trusted public key 防篡改;
  • 部署身份与许可证缓存位于稳定、受限存储;
  • 日志、审计和 ProblemDetails 不含凭证明文。

数据、文件与隐私

  • 数据库、对象存储、备份和导出启用静态加密;
  • 数据库账号按读写、迁移和运维职责拆分;
  • 上传大小、类型、对象 key 和访问授权有负向测试;
  • Files 当前实现边界被明确记录:未交付恶意内容扫描与会话过期校验时不得宣传已具备;
  • PII 分类、保留、删除与导出流程符合业务制度;
  • 数据恢复后再次验证租户隔离和密钥可用;
  • 生产数据不会复制到非生产环境,或已完成不可逆脱敏。

消息、任务与 Webhook

  • 消费者按至少一次投递设计,业务副作用以稳定幂等键保护;
  • 重试有上限、退避和死信处置负责人;
  • outbox/inbox、Broker 与数据库失败窗口有故障注入测试;
  • Webhook 签名覆盖 event id、timestamp 和 payload hash;
  • 接收方独立检查时间窗并原子去重 event id;
  • Webhook 新旧 secret 轮换与旧 key 撤销完成演练;
  • 后台任务失败可观测,不会静默丢失 tenant context。

限流、超时与滥用防护

  • 匿名、登录、验证码、上传、搜索、导出和 Webhook 使用合适策略;
  • 类生产环境使用共享 Redis 配额,而非实例内独立计数;
  • 分区 key 由可信 tenant/caller/IP 构成;
  • 请求大小、分页上限、查询复杂度和并发数有边界;
  • 超时传播到 Handler、数据库、HTTP 和消息调用;
  • 超时/取消不会留下半完成副作用;
  • 限流拒绝和高成本请求有指标与告警。

审计、日志与检测

  • 认证失败、授权拒绝、代理、权限变更、Secret 操作可查询;
  • actor 与 impersonator、tenant 与目标 tenant 同时保留;
  • CorrelationId 和 TraceId 可串联 API、消息与 Job;
  • 审计 store 不允许在类生产环境配置为 None;
  • 日志注入、敏感值和高基数字段已经审查;
  • 告警有阈值、owner、升级链与 runbook;
  • 安全事件时间线能从不可变证据重建。

供应链与制品

  • 锁定依赖并执行漏洞、许可证与恶意包扫描;
  • 生成 SBOM、provenance 与制品签名;
  • 镜像以非 root、只读文件系统和最小 capabilities 运行;
  • 基础镜像和 Runtime 版本有升级 SLA;
  • 部署制品可追溯到审查过的 commit 与 CI run;
  • 发布环境只接受受信签名制品;
  • 临时调试工具和诊断端口未进入生产镜像。

备份、恢复与应急

  • 数据库、对象、配置、Data Protection key ring 和许可证状态纳入恢复范围;
  • 恢复演练测得 RPO/RTO,而不是只确认“存在备份”;
  • 恢复后运行认证、租户、消息和文件完整性 smoke test;
  • 数据库回滚不依赖破坏性 down migration;
  • 不可逆迁移有前向修复方案;
  • Secret 泄露、账号接管、跨租户事件和 Broker 积压有 runbook;
  • break-glass 账号短期、强 MFA、强审计并定期验证。

发布证据包

# 安全评审记录只引用 Secret 的版本,不写明文。
# 每个链接必须绑定同一 commit、环境和配置版本。
release: 2026.07.0
commit: <git-sha>
evidence:
startup_guard: <ci-artifact-url>
tenant_negative_tests: <ci-artifact-url>
key_rotation_drill: <runbook-record>
restore_drill: <runbook-record>
accepted_risks: []
approvers: [platform-security, service-owner]

证据包应和制品不可变关联。检查报告日期、环境、commit 和配置版本必须一致,避免拿旧环境截图批准新制品。

发布结论规则

跨租户隔离失败、认证绕过、签名/Secret 泄露、生产测试凭据、审计丢失或无法恢复的关键数据属于阻断项。其他未完成项必须有 owner、截止时间、补偿控制和明确风险接受人。

发布评审的结论应是“哪项能力在何种部署拓扑下由哪些证据证明”,而不是笼统的“安全已完成”。

相关主题

100%

滚轮或按钮缩放 · 放大后拖动画面 · 双击切换 100% / 200%