ServiceAccount Token 安全:缩短寿命并限制使用边界

使用投射令牌、最小 RBAC 与 audience 校验,降低 Kubernetes 工作负载凭证泄露后的影响。

文章目录 · 3 节

ServiceAccount Token 是工作负载访问 Kubernetes API 或外部身份系统的凭证。默认挂载、长期 Secret token 和过宽 RBAC 会放大容器被入侵后的权限。

不需要就不要挂载

apiVersion: v1
kind: ServiceAccount
metadata:
  name: worker
automountServiceAccountToken: false

对无需访问 API 的 Pod 关闭自动挂载。需要身份时使用 TokenRequest 或 projected volume 获取短期令牌,并设置准确 audience。

volumes:
  - name: identity
    projected:
      sources:
        - serviceAccountToken:
            path: token
            audience: internal-api
            expirationSeconds: 3600

接收方必须校验签名、issuer、audience 和过期时间,不能把任意集群令牌当作通用 bearer token。

限制爆炸半径

  • 每个工作负载使用独立 ServiceAccount
  • Role 仅授权必要命名空间与资源动作
  • 限制 Pod exec、Secret 读取和 token 创建权限
  • 审计异常 userAgent、来源 IP 和跨命名空间访问

收尾清单

扫描旧式 kubernetes.io/service-account-token Secret 和默认账户权限。轮换签名密钥时规划验证窗口,并确认短期 token 能自动刷新。