如何使用 SPIFFE/SPIRE 实现基于角色的身份验证?

How to implement role-based auth with SPIFFE/SPIRE?

我正在审查迁移到服务网格的过程。虽然 IstioConsul Connect 肯定仍然存在,但我倾向于从较低的水平开始构建 LinkerdSPIFFE/SPIRE

我想构建一个 'hello world' 网格来测试这个架构。在这个 hello world 网格中,我希望能够从 SPIFFE/SPIRE 颁发编码某种角色的证书。您可能会说,我是服务网格的新手。我将如何实施角色?是否有任何指南可以帮助我入门?

因此与 Linkerd 和 SPIFFE/SPIRE 没有任何类型的集成。目前还没有任何具体的集成计划,但您可以查看 existing issue 了解更多详细信息。 Linkerd 的下一个版本 2.11 将包括创建服务器端策略的功能,但当前版本不强制执行任何类型的策略设置。

如果您希望从头开始构建,您可能希望从 Envoy 而不是 LinkerD 开始。 Envoy and SPIRE 之间的集成要紧密得多,当然你必须带上自己的控制平面。

SPIFFE 对身份验证有自己的看法,但对授权没有看法。一旦您对发送工作负载的 ID 进行了身份验证,就取决于接收 SPIFFE 标识的连接或消息的工作负载是否应用授权逻辑。 ID 应表示工作负载的逻辑身份,而不是其角色或权利。

也就是说,对于如何构建 SPIFFE ID 并没有太多限制,而且 ID 的结构可以使后续授权更简单。例如,您的 SPIFFE ID 可能类似于:

spiffe://prod.acme.com/<group>/<application>/<service>

对于接收工作负载,可能会应用授权规则,即“允许来自支付组中任何服务的连接”,您只需允许任何匹配的连接:

spiffe://prod.acme.com/payments/.*