跳转至

身份与安全边界

微服务安全要区分用户身份与服务身份。用户是谁、能做什么,和某个工作负载是否有权调用另一个服务,是两套相关但不同的授权问题。

请求身份链

用户 → Identity Provider 登录
  → Gateway 验证 Token
  → 服务验证签名、受众、有效期和权限
  → 服务到服务使用工作负载身份 / mTLS
  → 数据层使用每服务最小权限账号

Gateway 验证过身份不代表内部服务可以无条件信任所有请求。关键服务仍需执行资源级授权,防止内部绕过和横向移动。

Token 与服务身份

  • 短期 Token 优于长期固定密钥。
  • 验证签名、issuer、audience、expiry,禁止只做 Base64 解码。
  • 不在日志、URL、Trace attribute 中记录完整 Token。
  • 服务账号按工作负载分配,不让所有 Pod 共用高权限身份。
  • mTLS 同时提供加密和对端身份,但授权策略仍需单独定义。

Secret 生命周期

创建 → 受控分发 → 使用 → 轮换 → 吊销 → 审计

Secret 不进入镜像和明文 Git;由 Kubernetes Secret 配合静态加密、外部 Secret/KMS 等管理。轮换时考虑新旧凭据短期并存,避免一次更新导致所有实例失联。

网络与供应链

  • 使用 NetworkPolicy/防火墙限制不必要的东西向和出站访问。
  • 镜像固定版本或 digest,经过扫描、签名和来源校验。
  • CI、Registry、GitOps 和集群权限分离并保留审计。
  • 管理、调试、Actuator 和指标端点不直接暴露公网。
  • API 入口限制请求体、上传大小、速率和异常输入。

发生凭据泄露时,删除日志或 Git 文件不够;要立即吊销和轮换,查询使用记录,评估可访问范围并修复传播链路。