diff --git a/README.md b/README.md index 230f401..0205037 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ - [SPIFFE/SPIRE](services/spire.md):按 #34 整理的阶段状态、使用与 runbook 入口。 - [待核实与文档缺口](verification.md):互相矛盾的记录、缺少使用说明的服务、下一步核实方法。 - [架构约束](architecture/constraints.md):修改环境前必须遵守的设计及原始依据。 +- [workload-sts 设计历史](architecture/workload-sts-history.md):已归档的早期身份方案及 SPIRE 替代决策。 - [文档维护规则](CONTRIBUTING.md):人和 AI 如何共同维护知识。 - [服务文档模板](templates/service.md):新服务必须同时提供使用说明。 - [AI 工作入口](AGENTS.md):新上下文按任务查找资料。 diff --git a/architecture/workload-sts-history.md b/architecture/workload-sts-history.md new file mode 100644 index 0000000..7339407 --- /dev/null +++ b/architecture/workload-sts-history.md @@ -0,0 +1,51 @@ +# workload-sts:早期设计与 SPIRE 替代决策 + +**项目已归档、停止开发,不应部署或继续扩展现有 PoC。** 仓库保留早期设计和技术验证历史。 +维护者于 2026-09-16 确认归档;同日读取仓库元数据确认 `archived: true`, +并查阅首页与替代决策。没有查询运行环境。 + +当前方案见 [SPIFFE/SPIRE](../services/spire.md)。历史源码与设计保存在 +[workload-sts 仓库](https://git.ddupan.top/panxiao81/workload-sts)。 + +## 原方案做什么 + +workload-sts 是原统一机器身份方案中的 OAuth 2.0 Security Token Service: +验证 Kubernetes ServiceAccount JWT 等上游证明,映射稳定 workload principal, +根据 audience、scope 等签发规则生成短期 JWT assertion,由 OpenBao 等下游服务 +验证该 assertion,并自行映射权限、签发和管理服务自己的 token。 + +原方案也明确不提供人类用户目录,不管理下游资源权限和 VM/job 生命周期。 +因此,“被替代的统一 IAM 平台”指机器身份入口与签发层的自建方案, +不能理解为早期方案曾要求集中管理所有服务权限。 + +项目停在 PoC 阶段,首页明确未提供可运行服务或稳定 API。 +历史 issuer、协议字段和 API 规格不属于当前可用接口。 + +## 为什么改用 SPIRE + +[2026-09-13 接受的替代决策](https://git.ddupan.top/panxiao81/workload-sts/src/branch/main/docs/superseded-by-spire.md) +明确将 workload attestation、身份签发与轮换、OIDC/JWKS federation 交给 SPIRE, +避免继续维护重复的签名、策略和身份映射基础设施。 + +当前路径为 workload → SPIRE Workload API → JWT-SVID → 目标服务验证身份, +再由目标服务维护授权及自身 token 生命周期。跨基础设施的身份获取不再以 +Kubernetes ServiceAccount 为统一入口。 + +原计划中的 OAuth Token Exchange、内部 principal UUID、Transit JWT signing key、 +自建 JWKS endpoint 和集中式 CEL 策略不继续作为当前方案需求。 +未来若有目标服务不能原生处理的 token 转换或凭据签发需求,应按具体消费者重新评估 +小型 broker;不能仅因未来可能用到 scope 就恢复旧项目。 + +## 历史文档入口 + +| 文档 | 阅读目的 | +|---|---| +| [README](https://git.ddupan.top/panxiao81/workload-sts/src/branch/main/README.md) | 原项目目标、边界和停止开发说明 | +| [替代决策](https://git.ddupan.top/panxiao81/workload-sts/src/branch/main/docs/superseded-by-spire.md) | 为什么停止、自建能力如何由 SPIRE 替代 | +| [architecture](https://git.ddupan.top/panxiao81/workload-sts/src/branch/main/docs/architecture.md) | 早期系统边界与数据流 | +| [specification](https://git.ddupan.top/panxiao81/workload-sts/src/branch/main/docs/specification.md) | 早期规范行为与待决策项 | +| [security](https://git.ddupan.top/panxiao81/workload-sts/src/branch/main/docs/security.md) | 当时的威胁模型与安全要求 | +| [poc](https://git.ddupan.top/panxiao81/workload-sts/src/branch/main/docs/poc.md) | 首轮库与签名技术验证结论 | + +后四项按项目首页和目录收录为历史入口,本轮未逐篇复核。它们不代表当前实施计划; +判断当前设计先读替代决策和 SPIFFE 页面,动态进度再看 homelab-infra #34。 diff --git a/services/index.md b/services/index.md index 4882cc5..eac2886 100644 --- a/services/index.md +++ b/services/index.md @@ -67,6 +67,7 @@ SPIFFE/SPIRE 已按维护者授权补读 #34;其他条目仍为初轮工作区 ## 计划、归档与范围外 +- [workload-sts](../architecture/workload-sts-history.md):已归档的早期机器身份方案;停止开发、不部署 PoC,由 SPIFFE/SPIRE 替代。 - Backstage:规划中的服务目录与文档入口;本轮未发现独立部署目录。 - Keycloak、Casdoor:`archive/` 下有明确退役记录,替代入口为 Authelia。 - Traefik:归档目录保留历史 Gateway 示例,不作为当前接入流程。 diff --git a/services/spire.md b/services/spire.md index fc24a3d..5b8a204 100644 --- a/services/spire.md +++ b/services/spire.md @@ -41,8 +41,11 @@ SPIFFE/SPIRE 取代了原计划中由 **workload-sts 承担统一 IAM 平台** - **控制现有系统的改造量。** 优先利用目标服务已有的身份验证、token 交换和权限机制, 增加对 SPIFFE 的信任与身份映射,保留各服务已有的授权模型。 -设计定位由维护者于 2026-09-16 补充。这里记录的是方案替代关系,不代表 workload-sts -仓库已删除或所有相关组件已退役;非 Kubernetes 接入和各消费者的实施进度仍以 ticket 为准。 +设计定位由维护者于 2026-09-16 补充。workload-sts 项目已归档,停止开发且不部署现有 PoC, +仓库保留早期设计与验证历史。原方案也将最终资源权限留给下游服务; +此次替代主要将自建的机器身份入口与签发能力交给 SPIRE。 +详细脉络和历史文档入口见 [workload-sts 设计历史](../architecture/workload-sts-history.md)。 +非 Kubernetes 接入和各消费者的实施进度仍以 ticket 为准。 ## 当前做到哪里 diff --git a/verification.md b/verification.md index d232666..8845758 100644 --- a/verification.md +++ b/verification.md @@ -35,10 +35,10 @@ SPIFFE/SPIRE 按维护者指定,以 [#34](https://git.ddupan.top/panxiao81/hom - `docs/cicd.md` 提及 `e5renew`、`rustfs`,但无独立组件目录;需要确认现状与归属。 - `infrastructure/docker/README.md` 提及仓库外 `research-auto`,不能在本轮算作已盘点服务。 -- 本轮发现远端仓库 `gitea-microvm-runner`、`postgresql-tenant-operator`、`workload-sts`, +- 本轮发现远端仓库 `gitea-microvm-runner`、`postgresql-tenant-operator`, 尚未审阅内容或运行状态。后续将跨仓库服务纳入总览。 - 维护者已明确原计划由 workload-sts 承担的统一 IAM 平台方案被 SPIFFE/SPIRE 替代, - 见 [设计定位](services/spire.md#核心设计与取舍);仓库及组件的实际保留范围仍未查询。 +- workload-sts 已按维护者提供的信息查阅:仓库已归档,停止开发、不部署 PoC, + 作为[早期设计与替代决策的历史来源](architecture/workload-sts-history.md)保留,不列为待接入服务。 - 新增 NATS、zot、microVM 等来源含未提交文件;合并后补可访问的 commit/PR 链接。 - Backstage 仍作为计划入口记录;本轮没有证明已有部署。