安全与审计的全局架构¶
30 秒版(开场)¶
架构师定义零信任与最小权限边界,并让审计日志 追加写、访问受控、可检测篡改且满足留存策略。mTLS 认证工作负载身份,但不自动授予业务权限;JWT、密钥、PII、供应链与恢复流程都要有独立控制。
3 分钟版(精讲深度)¶
- 是什么:安全架构 = 威胁建模 + 控制措施 + 可验证合规。
- 为什么:架构师对 数据泄露、越权、供应链 负最终设计责任;后端面 increasingly 问 security by design。
- 怎么做:STRIDE 威胁建模;分层防御(网关 WAF → 服务 RBAC → 数据加密);集中审计日志到不可变存储。
10 分钟版(原理 + 图示)¶
flowchart TB
User[用户] --> WAF[WAF / 网关]
WAF --> Auth[IdP / OAuth2]
Auth --> Svc[Go 微服务]
Svc --> Policy[OPA / RBAC]
Svc --> Vault[密钥管理]
Svc --> Audit[审计日志 → SIEM]
Svc --> DB[(加密 at rest)]
架构师必讲控制面
| 域 | 措施 |
|---|---|
| 身份 | SSO、MFA、服务账号 rotation |
| 授权 | RBAC/ABAC;S-NET-04 JWT 边界 |
| 数据 | 按兼容与合规策略设置 TLS 最低版本、敏感字段保护、脱敏日志 |
| 供应链 | 依赖扫描、最小 base 镜像、SBOM |
| 审计 | who/when/what/tenant;WORM 或 hash 链 |
Go 落地清单
crypto/tls设置组织批准的最低版本与 cipher policy- JWT:使用经批准的非对称算法(如 RSA/ECDSA/EdDSA)、短 access + refresh rotation
- SQL:参数化;ORM 仍防 raw 拼接
- 容器:非 root、read-only rootfs
威胁建模 STRIDE(简表)
| 威胁 | 示例 | 缓解 |
|---|---|---|
| Spoofing | 伪造 JWT | 验签 + mTLS |
| Tampering | 改订单金额 | 服务端计价 |
| Repudiation | 抵赖操作 | 审计日志 |
| Info Disclosure | 日志泄露 PII | 脱敏 |
| DoS | 接口刷爆 | 限流 S-ARCH-08 |
| Elevation | 越权 tenant | S-SOL-05 |
生产场景¶
- 等保 / SOC2:架构师输出控制矩阵映射到系统设计
- 密钥轮换:Vault 动态 DB 凭证,Go 服务热加载
- LLM 场景:prompt 不进日志;RAG 文档 ACL
排查与工具¶
- OWASP ASVS L2 自检
- 渗透测试、SAST/DAST CI
- 审计:独立权限域、append-only/WORM 或签名/hash 链、集中 SIEM 与定期完整性验证
架构取舍¶
| 内网互信 | 零信任 |
|---|---|
| 简单 | 每调用都验身份 |
合规行业:独立安全架构师评审;后端架构师配合落地。
深挖问答¶
- 服务间还要鉴权吗? → 要;mTLS/service identity 先认证调用方,再由服务或 policy engine 做 operation/resource authorization。
- 审计日志谁删? → 运维无删权限;break-glass 双审批。
- GDPR 删除权? → 按适用法规实现删除/匿名化工作流、索引与缓存清理、备份过期和法律留存例外;soft delete 本身不是物理擦除。
- Go supply chain? →
go.sum校验模块内容一致性但不代表依赖可信或无漏洞;结合govulncheck、依赖审查、构建 provenance/SBOM、签名与受控 proxy。
反模式与事故¶
.env进 Git → 密钥泄露- 内网 HTTP 明文 → 横向移动
- 审计只打 info 无结构化 → 无法取证
代码示例¶
// slog 脱敏
logger.Info("user login", "user_id", uid, "ip", ip) // 不打 phone/email