工作负载安全标识项目之spiffe

工作负载安全标识项目之spiffe

什么是spiffe

https://spiffe.io/
https://github.com/spiffe/spiffe
https://twitter.com/SPIFFEio

SPIFFE(Secure Production Identity Framework For Everyone)以特制的X.509证书形式为现代生产环境中的每个工作负载提供安全标识。SPIFFE消除了对应用程序级身份验证和复杂网络级ACL配置的需求。SPIFFE标准是许多CNCF参与者和其他相关方,聚集在一起提出的共同方法,使便服务彼此呈现和授权他们的身份。

The Secure Production Identity Framework For Everyone (SPIFFE) Project defines a framework and set of standards for identifying and securing communications between application services.

spiffe是一套开源标准,用于在动态和异构环境中安全地识别软件系统。采用 SPIFFE 的系统可以轻松可靠地在任何地方进行相互身份验证。

  • 定义服务如何彼此识别的标准。这些称为Spiffe ID,并实现为统一的资源标识符(URI)。

官方概述

https://spiffe.io/docs/latest/spiffe-about/overview/

SPIFFE 是一个面向所有人的安全产品标识框架,它是一套开源标准,用于在动态和异构环境中安全地识别软件系统。采用 SPIFFE 的系统可以轻松可靠地在任何地方进行相互身份验证。

分布式设计模式和实践(如微服务、容器协调器和云计算)已经导致生产环境越来越动态化和异构化。传统的安全实践(例如只允许特定 IP 地址之间通信的网络策略)在这种复杂性下难以伸缩。 组织中的工作负载需要一个优秀的标识框架。

此外,现代开发人员需要了解并在生产环境中如何部署和管理应用程序。运营团队需要更深入地了解他们所管理的应用程序。随着我们更进一步了解的安全场景,我们必须为两个团队提供更好的工具,这样他们才能在构建安全的分布式应用程序
中发挥积极作用。

SPIFFE 是一组开放源码规范,用于一个框架,该框架能够对跨异构环境和组织边界的服务进行引导和发布标识。这些规范的核心是通过一个简单的 API 定义短寿命的加密身份文档——称为 SVIDs 。然后,工作负载可以在对其他工作负载进行身份验证时使用这些身份文档,例如通过建立 TLS 连接或通过签名和验证 JWT 令牌。

您可以在概念指南中了解更多关于 SPIFFE APIs 的定义和使用方法。
https://spiffe.io/docs/latest/spiffe-about/spiffe-concepts/

哪些工具实现了 SPIFFE?

下面的工具实现了部分或全部 SPIFFE 规范,并发布了 SPIFFE id:
在这里插入图片描述

SPIFFE 原理

本节将介绍 SPIFFE 中的一些基本概念,我们在整个概述中经常提到这些概念。

Workload 工作负载

工作负载是一个单独的软件,为了一个目的使用特定的配置; 它可以包含多个运行的软件实例,所有这些实例执行相同的任务。”Workload ”一词可包括软件系统的一系列不同定义,包括:

  • 运行 Python web 应用程序的 web 服务器,运行在一个虚拟机集群上,前面有一个负载均衡器
  • 一个MySQL 数据库的实例
  • A worker program processing items on a queue. 工作者程序处理队列中的项
  • A collection of independently deployed systems that work together, such as a web application that uses a database service. The web application and database could also individually be considered workloads. 协同工作的独立部署的系统的集合,例如使用数据库服务的 web 应用程序。Web 应用程序和数据库也可以单独考虑工作负载

出于 SPIFFE 的目的,工作负载通常比物理节点或虚拟节点更细粒度,通常与节点上的单个进程一样细粒度。这对于承载在容器协调器中的工作负载至关重要,在这个容器协调器中,单个节点上的多个工作负载可能共存(但彼此隔离)。

出于 SPIFFE 的目的,一个工作负载也可能跨越多个节点——例如,一个弹性扩展的 web 服务器可能同时在多台机器上运行。

虽然被认为是工作负载的粒度会根据上下文的不同而有所不同,但是对于 SPIFFE 的目的来说,它假设工作负载与其他工作负载有足够好的隔离,这样一个恶意工作负载就不会窃取另一个工作负载的凭证。 这种隔离和实现隔离的机制的健壮性超出了 SPIFFE 的范围。

SPIFFE ID

SPIFFE ID 是唯一且专门标识工作负载的字符串。SPIFFE id 也可以分配给工作负载运行的中间系统(例如一组虚拟机)。例如,spiffe://acme.com/billing/payments 是一个有效的 SPIFFE ID。

工作负载标识符唯一地标识信任域中的特定工作负载。

SPIFFE规范详细描述了 SPIFFE id 的格式和使用。

Trust Domain 信任域

信任域对应于系统的信任根。信任域可以代表个人、组织、环境或部门,运行它们自己独立的 SPIFFE 基础结构。在同一个信任域中识别的所有工作负载都是可以根据信任域的根键进行验证的身份文档。

通常建议将位于不同物理位置(如不同的数据中心或云区域)或应用不同安全实践的环境(如阶段环境或实验室环境与生产环境)的工作负载保留在不同的信任域中。

SPIFFE Verifiable Identity Document (SVID) 可核实身份证明文件(SVID)

SVID 是工作负载向资源或调用方证明其标识的文档。 如果 SVID 由 SPIFFE ID’s 的信任域内的权威机构签署,则该 SVID 被视为有效。

一个 SVID 包含一个 SPIFFE ID,它表示提供它的服务的标识。它将 SPIFFE ID 编码为一个可加密验证的文档,采用两种当前支持的格式之一: x. 509证书或 JWT 令牌。

由于令牌容易受到重放攻击,在重放攻击中获得令牌的攻击者可以使用它来模拟工作负载,因此建议尽可能使用 x. 509-svid。但是,在某些情况下,唯一的选择是 JWT 令牌格式,例如,当您的体系结构在两个工作负载之间有一个 l7代理或负载均衡器时。

有关 SVID 的详细信息,请参阅 SVID 规范

SPIFFE Workload API 工作负载 API

工作负载 API 提供以下功能:

For identity documents in X.509 format (an X.509-SVID):
X. 509格式的身份证明文件(x. 509-svid) :

  • Its identity, described as a SPIFFE ID. 它的身份,被称为 SPIFFE ID
  • A private key tied to that ID that can be used to sign data on behalf of the workload. A corresponding short-lived X.509 certificate is also created, the X509-SVID. This can be used to establish TLS or otherwise authenticate to other workloads. 与该 ID 绑定的私钥,可用于代表工作负载对数据进行签名。还创建了相应的短寿命的 x. 509证书,即 X509-SVID。这可以用于建立 TLS 或以其他方式对其他工作负载进行身份验证
  • A set of certificates – known as a 一组证书,称为trust bundle 信托束 – that a workload can use to verify an X.509-SVID presented by another workload - 一个工作负载可以用来验证由另一个工作负载提供的 x. 509-svid

对于 JWT 格式的身份文件(JWT-svid) :

  • Its identity, described as a SPIFFE ID 它的身份,被称为 SPIFFE ID
  • The JWT token JWT 令牌
  • A set of certificates – known as a 一组证书,称为trust bundle 信托束 – that a workload can use to verify the identity of other workloads. - 工作负载可用于验证其他工作负载的身份

与 AWS ec2实例元数据 API 和 Google GCE 实例元数据 API 类似,Workload API 不要求调用工作负载知道自己的身份,或者在调用 API 时拥有任何身份验证标记。这意味着您的应用程序不需要将任何身份验证秘密与工作负载共同部署。

然而,与这些其他 API 不同的是,Workload API 是平台独立的,可以在进程级和内核级识别运行中的服务——这使得它适用于 Kubernetes 等容器调度器。

为了尽量减少密钥泄漏或泄露的风险,所有私钥(和相应的证书)都是短寿命的、频繁自动更新。工作负载可以在相应的密钥过期之前从 工作负载API 请求新的密钥和信任包。

Trust Bundle 信任包

当使用 x. 509-svid 时,目标工作负载使用信任包(a trust bundle)来验证源工作负载的标识。信任包( trust bundle)是一个或多个证书颁发机构(CA)根证书的集合,工作负载应该认为这些证书是可信任的。信任包包含 x. 509和 JWT svid 的公钥材料。

用于验证 x. 509 svid 的公钥材料是一组证书。验证 JWTs 的公钥材料是原始公钥。信任束内容经常轮换。工作负载在调用 Workload API时检索信任包。

进一步阅读

SPIFFE 是在以下文档中描述的规范(在 SPIFFE GitHub repo 中维护) :

https://spiffe.io/docs/latest/spiffe-about/spiffe-concepts/
Secure Production Identity Framework for Everyone (SPIFFE) 每个人的安全生产身份框架(SPIFFE)
The SPIFFE Identity and Verifiable Identity Document 身份与可验证身份文件
The SPIFFE Workload API 工作负载 API
The SPIFFE Workload Endpoint 工作负载端点
The X.509 SPIFFE Verifiable Identity Document 509 SPIFFE 可核实身份证明文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西京刀客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值