本文为 SPIFFE 官方规范 Secure Production Identity Framework for Everyone (SPIFFE) 的中文译本,仅供学习参考;若与英文原文有出入,以英文版为准。
面向所有人的生产环境安全身份框架(Secure Production Identity Framework for Everyone,SPIFFE)
稳定性:稳定(Stable) - 参见 STABILITY.md。
本备忘录的状态
本文档为互联网社区规定了一项身份及身份签发标准,并征求各方的讨论与改进建议。本文档的分发不受限制。
摘要
微服务、容器编排器(container orchestrator)、云计算等分布式设计模式与实践,使得生产环境日益动态化、异构化。传统的安全实践(例如仅允许特定 IP 地址之间通信的网络策略)在这种复杂度下难以扩展。为组织内的工作负载(workload)建立一套一等公民(first-class)的身份框架便成为必需。
此外,现代开发者被要求理解并参与应用程序在生产环境中的部署与管理方式。运维团队则需要对其所管理的应用程序具备更深入的可见性。随着我们迈向更为演进的安全态势,我们必须为这两类团队提供更好的工具,使他们能够在构建安全的分布式应用中发挥积极作用。
SPIFFE 标准提供了一份规范,用于描述一种能够跨异构环境与组织边界为服务引导(bootstrap)并签发身份的框架。
1. 引言
SPIFFE 标准由三大组件构成:其一标准化了身份命名空间;其二规定了已签发身份的呈现与验证方式;其三定义了一套用于检索和/或签发身份的 API。这些组件分别称为 SPIFFE ID、SPIFFE 可验证身份文档(SPIFFE Verifiable Identity Document,SVID)以及 Workload API。
尽管上述每个组件都有各自专门的规范,本文档的余下部分将从宏观层面对它们进行介绍,并说明它们如何协同配合。
2. SPIFFE ID
SPIFFE ID 是一个结构化字符串(以 URI 形式表示),用作某个实体的“名称”。它虽然只是一个字符串,却是其他一切构建于其上的核心组件。它在 SPIFFE 身份与可验证身份文档 规范中定义。
3. SPIFFE 可验证身份文档
SPIFFE 可验证身份文档(SVID)是一种承载 SPIFFE ID 本身的文档。它在功能上等同于护照——一份被出示的、承载出示者身份的文档。当然,与护照类似,它必须能够抵御伪造,并且必须能明确表明该文档归属于出示者。为实现这一点,SVID 包含了一些密码学属性,使其能够:
- 被证明为真实可信
- 被证明归属于出示者
SVID 本身并不是一种文档类型。相反,我们定义了:
- SVID 所必须具备的属性
- 将 SVID 信息编码进各种现有文档类型并对其进行验证的方法
所支持的文档类型包括 X.509 证书、JWT 令牌(token)和 WIT 令牌。
SPIFFE SVID 在 SPIFFE 身份与可验证身份文档 规范中定义。X.509 SVID 规范在 X.509 SPIFFE 可验证身份文档 中定义。JWT 令牌 SVID 规范在 JWT SPIFFE 可验证身份文档 中定义。WIT 令牌 SVID 规范在 WIT SPIFFE 可验证身份文档 中定义。
4. Workload API
SPIFFE Workload API 是工作负载(即计算进程)获取其 SVID 的途径。它通常在本地暴露(例如通过 Unix 域套接字),并且明确不包含来自工作负载的认证握手或认证令牌。实现者可以通过带外(out-of-band)方式验证 Workload API 调用方的真实性,例如检查操作系统所提供的、调用该 Unix 域套接字的进程的属性。
除了向工作负载提供其所需的 SVID 之外,Workload API 还会下发该工作负载应对外信任的 CA 包(bundle)。这些包与已签发 SVID 之外的信任域(trust domain)相关联,用于联邦(federation)。
Workload API 在 SPIFFE Workload API 规范中定义,更多信息请参阅该文档。
5. 结论
本文档从宏观层面介绍了构成 SPIFFE 规范整体的各个组件。这些组件协同配合,解决了现代异构环境(尤其是那些高度动态的环境)中所面临的诸多认证与流量安全挑战。如需更详细的信息,请参阅与您关注的组件相关的规范。