This repository has been archived on 2026-09-13. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
workload-sts/docs/superseded-by-spire.md

99 lines
3.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 由 SPIRE 替代 workload-sts
| 项目 | 内容 |
| --- | --- |
| 状态 | Accepted |
| 日期 | 2026-09-13 |
| 影响 | 停止 workload-sts 开发,不部署现有 PoC |
## 决策
停止实现和部署 workload-sts。workload identity 的签发、轮换、workload attestation 与
OIDC/JWKS federation 改由 SPIRE 提供;OpenBao 继续负责 secret、policy、动态凭据和
自身 token 生命周期。
仓库保留为设计和 PoC 历史,不删除代码,但不再接受功能开发。若未来出现 SPIRE 和目标
Resource Server 无法表达的、已经确认的 token transformation 或 credential
materialization 需求,应基于实际用例重新立项,而不是恢复本规格。
## 原因
workload-sts 原计划自行实现:
```text
验证 Kubernetes 或其他 workload credential
-> workload principal 映射
-> audience/scope 策略
-> 短期 JWT 签发
-> OIDC metadata/JWKS
```
SPIRE 已原生提供其中决定系统安全性的部分:
- SPIRE Agent 和 Server 执行 node attestation 与 workload attestation
- Kubernetes workload 可按 namespace、ServiceAccount 等 selector 注册 SPIFFE ID
- Linux、VM 和容器 workload 可使用 Unix、systemd、Docker 及相应 node attestor
- workload 通过 SPIFFE Workload API 获取自动轮换的 X.509-SVID 或指定 audience 的
JWT-SVID
- SPIRE OIDC Discovery Provider 发布 discovery document 和 JWKS,使支持 OIDC/JWT 的
Resource Server 可以直接信任 JWT-SVID
- SPIFFE federation 与 OIDC federation 覆盖后续跨环境信任。
继续开发 workload-sts 会重复实现 attestation 后的身份签发、密钥轮换和 federation
同时引入新的数据库、策略、签名服务和高价值网络端点,安全收益为负。
## 替代架构
面向 OpenBao 的基本流程为:
```text
workload
-> local SPIRE Agent Workload API
-> JWT-SVID (sub = SPIFFE ID, aud = OpenBao audience)
-> OpenBao JWT auth
-> OpenBao client token
```
OpenBao 直接按受信 issuer、`sub`、audience 和 bound claims 映射 role/policy。本系统不再
需要 OAuth Token Exchange、内部 principal UUID、Transit JWT signing key 或自己的
JWKS endpoint。
Kubernetes、长期 Linux 主机、PVE VM 和 microVM 的具体 node/workload attestation 由
新的 SPIRE 基础设施项目设计。PVE/microVM 生命周期和 vsock metadata 仍属于平台项目,
不进入身份控制面。
## 不再保留的需求
OAuth `scope` 和集中式 CEL 策略原本作为未来扩展点,但当前没有必须由中间 STS 统一
表达的实际授权需求。OpenBao policy、Kubernetes RBAC 和各 Resource Server 继续负责
最终授权。
如果以后出现下列具体需求,再单独评估小型 broker:
- Resource Server 无法直接验证 JWT-SVID
- 必须进行跨 trust domain 的 claim/token transformation
- 必须返回非 JWT 凭据,且 OpenBao 或目标平台不能原生签发;
- 已有明确消费者需要 OAuth RFC 8693,而不能直接使用 Workload API。
仅有“未来可能需要 scope”不足以恢复 workload-sts。
## 后续工作
新的 SPIRE 项目需要决定:
1. SPIFFE trust domain 与 SPIFFE ID 命名规范;
2. SPIRE Server/Agent 的部署和高可用边界;
3. Kubernetes、长期主机及 VM 的 node/workload attestor
4. registration entry 的声明式管理方式;
5. OIDC Discovery Provider 的稳定 HTTPS issuer
6. OpenBao JWT auth role、audience 和 SPIFFE ID 映射;
7. SVID TTL、key rotation、federation 与灾难恢复。
## 参考资料
- [SPIRE Use Cases](https://spiffe.io/docs/latest/spire-about/use-cases/)
- [SPIRE Concepts](https://spiffe.io/docs/latest/spire-about/spire-concepts/)
- [Configuring SPIRE](https://spiffe.io/docs/latest/deploying/configuring/)
- [SPIRE OIDC federation and scaling](https://spiffe.io/docs/latest/planning/scaling_spire/)
- [Using SPIRE JWT-SVIDs to authenticate to Vault](https://spiffe.io/docs/latest/keyless/vault/readme/)