Skip to content

SPIRE 云上落地与对接

SPIRE 的一切可替换能力都是插件。"对接某朵云"本质上就是为四类挂载点选择对应的云插件:节点认证(NodeAttestor)密钥管理(KeyManager)上游 CA(UpstreamAuthority)、以及可选的 数据存储 / Bundle 发布 / SVID 存储。本页给出主流平台的对接矩阵与落地要点。

想先理解这些插件在架构里的位置,请看 SPIRE 整体架构 · 插件化 catalog

一张对接矩阵

能力 \ 平台AWSGCPAzureKubernetesHashiCorp Vault
节点认证 NodeAttestoraws_iid(实例身份文档)gcp_iit(实例身份令牌)azure_msi / azure_imdsk8s_psat(投影服务账号令牌)
密钥管理 KeyManageraws_kmsgcp_kmsazure_key_vault(用云 KMS 或 disk+PV)hashicorp_vault
上游 CA UpstreamAuthorityaws_pca / awssecretgcp_cas(经 Vault/cert-manager)cert_managervault
数据存储 DataStoreRDS/Aurora(aws_postgres/aws_mysql)Cloud SQLAzure DB for PostgreSQL/MySQL(连托管 DB)
Bundle 发布 BundlePublisheraws_s3 / aws_rolesanywheregcp_cloudstoragek8s_configmap
SVID 存储 SVIDStoreaws_secretsmanagergcp_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:prodk8s: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

相关链接

内容基于 SPIFFE/SPIRE 官方开源资料整理与翻译,仅供学习交流;商标与版权归各自所有者。SPIFFE 与 SPIRE 是 CNCF 项目。