什么是 SPIFFE 和 SPIRE?
SPIFFE 和 SPIRE 是一对开源项目,用于在动态且多样化的计算环境中进行身份管理。
SPIFFE(发音为“spiffy”)是 Secure Production Identity Framework for Everyone(面向所有人的安全生产身份框架)的英文缩写。它为身份建立了一个统一的框架,并提供了一种可通过加密方式验证 ID、确认其可信度的机制。
SPIRE 是 SPIFFE Runtime Environment(SPIFFE 运行时环境)的英文缩写,也是 SPIFFE 的参考实现。
SPIFFE 与 SPIRE 共同定义了在复杂的混合云环境中实施零信任架构的方法。SPIFFE/SPIRE 框架可解决诸多安全问题,包括:
- 增强 Kubernetes 环境中云原生应用的安全性。
- 提升边缘计算环境中的身份验证能力。
- 为 AI 代理及其他非人类工作负载提供身份管理。
SPIFFE 和 SPIRE 都是云原生计算基金会(CNCF)的成熟项目。红帽提供了一个企业就绪型 SPIFFE/SPIRE 实施方案,即红帽® 零信任工作负载身份管理器,现作为红帽 OpenShift® Operator 的技术预览版发布。
它们与乌龟有什么关系?
SPIFFE 的支持者有时称其为“底层乌龟问题”的解决方案。SPIFFE 项目的发起者甚至以乌龟这一比喻作为该技术相关书籍的书名。
那么,什么是底层乌龟问题呢?
在一个古老的故事中,有人坚称世界建在一只巨龟背上。当被问到“那这只乌龟又立在何处?”,这人回答说,“在另一个更大的龟背上。”那这只更大的乌龟又在什么上呢?“下面全都是乌龟,一层叠一层!”
计算机安全防护领域也存在着类似的底层乌龟问题:密码和应用编程接口(API)密钥等秘密凭机密是不同平台与服务间建立信任的基石。而要保护这些机密,又需要叠加额外的安全防护层,例如私有加密密钥以及用于存储密钥的机密存储库。那么如何保护机密存储库呢?只能依赖更多机密。这样很快就会陷入“机密层层嵌套,无穷无尽”的困局。
SPIFFE 标准和 SPIRE 实施旨在确立“底层乌龟”,为系统中的所有交互建立基础信任层级。
SPIFFE 和 SPIRE 能解决什么问题?
SPIFFE 和 SPIRE 是提升 IT 安全性的一种方式。它们共同构成了一个框架,确保仅向具有经过验证的身份的交互授予访问权限。类比来看,您可以将 SPIFFE 和 SPIRE 视为针对工作负载的多重身份验证(MFA)。
SPIFFE:框架
SPIFFE 制定了一套规范,用于在不同环境中为服务签发和管理加密身份。该标准的核心是 SPIFFE 可验证身份文档(SVID),这是一种短期有效的凭证,用于标识工作负载的身份。
在零信任架构中,系统中的任何组件都不会被默认信任,而 SPIFFE 可在不依赖机密的情况下完成工作负载身份验证。当工作负载需要与其他服务交互时,可出示其 SVID,该凭证通常采用 X.509 证书或 JSON Web 令牌(JWT)形式。
然后,其他工作负载可以在本地验证 SVID,从而实现可信的点对点身份验证,而无需在每次交互时都联系中央机构。这一精简流程通过可验证的标准化身份来维持信任,从而简化并保护服务通信。
SPIRE:运行时环境
SPIRE 描述了一种实施 SPIFFE 标准的方法。它定义了一个设置 API 的流程,从而在工作负载(发出请求的应用或代理)和节点(服务器或计算机)之间建立信任。
SPIRE 会同时考虑工作负载和节点的认证情况。这意味着,在签发签名证书之前,它会确认应用和资源是否与它们声称的身份一致。
SPIRE 服务器充当其 SPIFFE 域内身份的签名授权机构,同时还会在一个注册表中记录工作负载身份信息。
除 SPIRE 服务器外,每个运行工作负载的节点上还需部署 SPIRE 代理。这些代理会缓存 SVID,并证明工作负载的身份。SVID 验证可通过内核级自检在本地完成。换言之,工作负载无需调用外部服务即可判断某个操作是否被授权。
SPIRE 支持联合认证机制,通过这一机制,不同系统可以交换包含公钥及验证所需证书的信任包。
SPIFFE 和 SPIRE 用例
SPIFFE 和 SPIRE 有助于在分布式多云环境中进行身份验证。一些常见用例包括:
混合云环境中的身份验证
在混合云和多云环境中,应用可能跨越多个云提供商和管理边界。这使得在这些域之间实现可信通信的复杂度显著提升。
借助 SPIFFE 联合机制,在不同位置运行的 SPIRE 服务器可以通过信任包交换公钥和证书;信任包是特定 SPIFFE 签发机构所使用的公钥集合的格式。这有助于应用建立信任,即便跨越不同的云提供商或管理边界,也无需依赖私钥或复杂的网络配置。
Kubernetes 和 KubeVirt 中的身份管理
Kubernetes 环境通常包含众多在隔离容器中运行的小型工作负载,而且它们必须相互协作。SPIFFE 和 SPIRE 可以为容器化应用提供身份验证(无论它们在网络中的哪个位置运行),从而增强 Kubernetes 环境的安全性。这种增强的安全防护也适用于在基于 KubeVirt 的解决方案(如红帽 OpenShift 虚拟化)上运行的虚拟机。这有助于实现精细化访问控制,而这也是零信任架构的核心原则之一。
AI 代理的工作流
AI 代理的应用正日益普及,它们能够接受指令,然后与其他系统交互以实现目标。但在涉及敏感信息的场景中,部署 AI 代理并非易事。向 AI 代理授予访问权限时,需要为机器工作负载提供可靠且可验证的身份,而在混合云平台环境下,这一问题会变得更加复杂。SPIFFE 和 SPIRE 可通过提供可验证的短期凭据,让 AI 服务以可控方式访问敏感数据,从而为解决该问题提供关键支持。
服务网格信任
服务网格是处理服务间通信的一层架构,尤其适用于容器化应用。通过实施 SPIFFE 和 SPIRE,可以向服务网格添加集成式安全管理,使服务网格能够依赖于可加密验证的身份。这种级别的信任可简化系统之间的互操作性,同时还有助于在服务网格内部和外部实施策略。
边缘计算安全防护
由于 SPIFFE 和 SPIRE 可将身份控制平面扩展到本地环境,二者非常适合边缘计算场景。可加密验证的 SVID 意味着,可以在网络上的任何位置实施强身份验证,即使对于分布广泛的边缘服务也同样适用。
如何在 Kubernetes 中使用 SPIFFE 和 SPIRE
在云端运行现代应用需要一定程度的自动化。为此,Kubernetes 成为了广受欢迎的选择,它是一个用于在容器中部署、管理和扩展应用的开源平台。Kubernetes 是红帽 OpenShift 的基础。
以 SPIFFE 和 SPIRE 作为身份控制平面(即我们之前提到的“底层乌龟”),您就可以在 Kubernetes 中使用可验证身份。关于在 Kubernetes 中使用 SPIFFE 和 SPIRE,有三点关键事项需要了解:
- SPIRE 是用于实施 SPIFFE 的框架。您需要在 Kubernetes 集群内部署 SPIRE 组件,其中包括 SPIRE 服务器和 SPIRE 代理,SPIRE 服务器负责管理身份和签名,而每个 Kubernetes 节点都需要运行一个 SPIRE 代理。这些组件可以创建基础身份基础架构,并让您的集群做好以加密方式验证身份的准备。在红帽 OpenShift 环境中,红帽零信任工作负载身份管理器可为此提供支持。
- SPIRE 代理同时执行节点和工作负载认证。代理可以检查应用的特征(如 Kubernetes 命名空间、服务帐户或容器镜像),以验证应用的合法性。
- 获得认证后,应用可访问 SPIRE 代理公开的本地 SPIFFE 工作负载 API,以获取其唯一的短期 SVID。这些 SVID 有助于建立双向传输层安全性(mTLS)连接,确保服务之间的可信通信。
为什么选用红帽技术来实现零信任安全防护?
红帽解决方案在打造过程中就充分考虑了全面的安全防护。它们可以帮助您构建零信任基础,以确保数据主权,同时支持云原生和 AI 驱动型工作负载的部署与管理。红帽专家可以协助您开始在多云环境中采用零信任架构。
红帽的零信任工作负载身份管理器是一个红帽 OpenShift Operator,可简化 SPIFFE 和 SPIRE 的安装与生命周期管理。您可以将它安装到现有集群上,而且它经过验证可在红帽 OpenShift 上运行,同时还配有全面的文档来提供安装与故障排除方面的支持。