SPIRE 云上落地与对接
SPIRE 的一切可替换能力都是插件。"对接某朵云"本质上就是为四类挂载点选择对应的云插件:节点认证(NodeAttestor)、密钥管理(KeyManager)、上游 CA(UpstreamAuthority)、以及可选的 数据存储 / Bundle 发布 / SVID 存储。本页给出主流平台的对接矩阵与落地要点。
想先理解这些插件在架构里的位置,请看 SPIRE 整体架构 · 插件化 catalog。
一张对接矩阵
| 能力 \ 平台 | AWS | GCP | Azure | Kubernetes | HashiCorp Vault |
|---|---|---|---|---|---|
| 节点认证 NodeAttestor | aws_iid(实例身份文档) | gcp_iit(实例身份令牌) | azure_msi / azure_imds | k8s_psat(投影服务账号令牌) | — |
| 密钥管理 KeyManager | aws_kms | gcp_kms | azure_key_vault | (用云 KMS 或 disk+PV) | hashicorp_vault |
| 上游 CA UpstreamAuthority | aws_pca / awssecret | gcp_cas | (经 Vault/cert-manager) | cert_manager | vault |
| 数据存储 DataStore | RDS/Aurora(aws_postgres/aws_mysql) | Cloud SQL | Azure DB for PostgreSQL/MySQL | (连托管 DB) | — |
| Bundle 发布 BundlePublisher | aws_s3 / aws_rolesanywhere | gcp_cloudstorage | — | k8s_configmap | — |
| SVID 存储 SVIDStore | aws_secretsmanager | gcp_secretmanager | — | — | — |
落地要点(按平台)
AWS
- 节点认证
aws_iid:Agent 提交 EC2 实例身份文档(Instance Identity Document),Server 端插件向 AWS 校验签名并核对实例元数据,派生形如spiffe://<td>/spire/agent/aws_iid/<account>/<region>/<instance-id>的 SPIFFE ID,可用 IAM 角色、标签、安全组等作为节点选择器。 - 密钥管理
aws_kms:CA 私钥托管在 KMS,永不离开 KMS;每台 Server 各自管理一组 KMS 密钥(用标签spire-server-id区分),弹性伸缩/重调度不丢 CA 身份 —— 这是 EKS 上做多活的关键(见 高可用 · KeyManager 选型)。 - 上游 CA
aws_pca:把 SPIRE 的 CA 挂到 AWS ACM Private CA 之下,签发可上溯企业 root 的证书。 - 数据库:RDS Multi-AZ / Aurora 提供数据库层的 HA 与只读副本;SPIRE 用
aws_postgres/aws_mysql以 IAM 令牌连库。 - OIDC 联邦到 AWS:工作负载用 JWT-SVID 免密钥访问 S3、RDS、CodePipeline 等 —— 通过 SPIRE OIDC Discovery Provider 暴露 JWKS,把 IAM 角色映射到 SPIFFE ID。
GCP
- 节点认证
gcp_iit:基于 GCE 实例身份令牌(Instance Identity Token)校验,可用项目、区域、标签、服务账号作选择器。 - 密钥管理
gcp_kms:CA 私钥托管在 Cloud KMS。 - 上游 CA
gcp_cas:挂到 GCP Certificate Authority Service。 - Bundle 发布
gcp_cloudstorage:把 trust bundle 发布到 GCS,供联邦方或外部系统拉取。 - OIDC 联邦:JWT-SVID 对接 Workload Identity Federation,免密访问 GCP 资源。
Azure
- 节点认证
azure_msi/azure_imds:基于托管身份(Managed Identity)/ 实例元数据服务校验。 - 密钥管理
azure_key_vault:CA 私钥托管在 Key Vault(可用 HSM 支持的密钥)。
Kubernetes
- 节点认证
k8s_psat:Agent 用**投影服务账号令牌(Projected Service Account Token)**向 Server 证明身份,Server 校验令牌并可用命名空间、服务账号、Pod 作选择器。这是 K8s 上最常用的节点认证方式。 - 工作负载认证
k8s:Agent 端的 WorkloadAttestor 通过 kubelet 把调用 Pod 的命名空间、服务账号、标签等映射为选择器(如k8s:ns:prod、k8s:sa:web)。 - 部署形态:Server 以 StatefulSet + 共享数据库运行,Agent 以 DaemonSet 每节点一个;工作负载通过挂载的 Unix 套接字(或 CSI Driver)访问工作负载 API。
- Bundle 发布
k8s_configmap:把 trust bundle 写入 ConfigMap,便于集群内其他组件(如 Istio、cert-manager)消费。 - 上游 CA
cert_manager:通过 cert-manager 的CertificateRequest从集群 PKI 领取中间 CA。
HashiCorp Vault
- 上游 CA
vault:用 Vault PKI 引擎的SignIntermediate为 SPIRE 签发中间 CA。 - 密钥管理
hashicorp_vault:CA 私钥托管在 Vault Transit 引擎。 - ⚠️ 注意:Vault 上游不支持发布 JWT 授权公钥(仅
spire上游插件支持)。若在 Nested 拓扑里使用 JWT-SVID,不宜用 Vault 作上游。
OIDC 联邦:让工作负载免密访问云服务
SPIRE 的一大杀手级用法:工作负载凭 JWT-SVID 直接认证到公有云/密钥库等 OIDC 兼容的系统,自身不持有任何云下发的凭据。
Workload ──(JWT-SVID)──► 云服务(S3/RDS/GCS/…)
│ 取 JWKS 验签
SPIRE OIDC Discovery Provider ──► 暴露 JWKS + OIDC discovery 文档云端 IAM 把角色映射到 SPIFFE ID;工作负载发 JWT-SVID,云端从预置 URI 拉 JWKS 验签,SPIFFE ID 被授权即放行。参考 support/oidc-discovery-provider。