Files
homelab-infra/platform/spire/README.md
T
panxiao81 22192a3c68
yaml / yaml (pull_request) Successful in 13s
部署 SPIRE workload identity 基础设施
2026-09-13 15:33:20 +00:00

81 lines
3.1 KiB
Markdown
Raw 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.
# SPIFFE/SPIRE workload identity
SPIRE 是 homelab 的机器与 workload identity 根。人类身份继续由 Samba AD 与
Authelia 提供;SPIRE 不替代人类 OIDC,也不承担目标服务的资源授权。
## 部署范围
Flux 安装 SPIFFE hardened charts:
- `spire-crds` `0.6.1`;
- `spire` `0.30.2`(SPIRE `1.15.3`);
- SPIRE Server、Agent、Controller Manager、SPIFFE CSI Driver;
- OIDC Discovery Provider。
未启用 Tornjak、SPIRE Identity Exchange、SPIKE、federation、Delegated Identity
API 或 Broker API。Trust domain 是 `ddupan.top`,Kubernetes cluster name 是
`homelab`。
## PostgreSQL bootstrap
SPIRE registration datastore 使用共享 CloudNativePG:
```text
host: shared-postgresql-rw.shared-db.svc.cluster.local:5432
database: spire
role: spire
```
数据库与 role 当前是手工创建的临时 bootstrap。密码只存在于
`spire-server/spire-postgresql` Secret 的 `password` key 中,不提交到 Git。
在 PostgreSQL tenant operator/DBaaS 接管前,不得删除该 Secret 或重置数据库
role 密码。
后续声明式管理必须保持这一 Secret 接口,或者在同一个变更中更新
`spire-server.dataStore.sql.externalSecret`,避免数据库凭据出现两个写入方。
PostgreSQL保存 registration state;SPIRE Server 的 disk KeyManager 仍使用一个
`1Gi`、`localpv-zfs-ceph` PVC 保存 trust-domain signing keys。数据库备份不能替代
该 PVC/密钥的备份。
## 身份签发策略
默认的全 Pod fallback `ClusterSPIFFEID` 已关闭。新增 workload 必须显式创建
`ClusterSPIFFEID`,并以 namespace、ServiceAccount、Pod label 等 selector 收窄。
不得仅因 Pod 能挂载 CSI socket 就给它签发身份。
稳定的 JWT issuer 预留为:
```text
https://spire-oidc.ad.ddupan.top
```
首次部署时 OIDC Discovery Provider 仅为 ClusterIP,内部为明文 HTTP;尚未创建
外部 DNS 或 Gateway route。接入 OpenBao 前,在现有 Envoy Gateway 上终止 TLS、
增加内网 DNS,并验证 discovery document 的 `issuer` 与上述 URL 完全一致。
## 首次部署与验证
合并后观察:
```bash
sudo k3s kubectl -n flux-system get kustomization spire
sudo k3s kubectl -n spire-mgmt get helmrelease
sudo k3s kubectl -n spire-server get pods,pvc
sudo k3s kubectl -n spire-system get daemonset,pods
```
必须先确认 `spire-crds` Ready,随后 `spire` Ready。SPIRE Server 应连接 PostgreSQL,
Agent 应通过 PSAT attestation 注册,CSI Driver 应在节点 Ready。
首个业务验收另行增加一个专用测试 Pod 与 `ClusterSPIFFEID`,验证取得
`aud=openbao` 的 JWT-SVID 后登录 OpenBao。PoC 完成前不修改生产认证方式。
## 恢复边界
- 恢复顺序:共享 PostgreSQL、SPIRE Server signing-key PVC、SPIRE Server、Agent;
- issuer URL 与 trust domain 初始化后不得随意修改;
- 丢失 signing keys 会使既有 SVID 和下游 JWKS 信任失效;
- PostgreSQL或 SPIRE 不可用时,不得用新的空数据库覆盖现有状态;
- 当前 Flux root 与本 Kustomization 均保持 `prune: false`,删除资源需单独审计。