为什么 Istio 要使用 SPIRE 做身份认证?

34f10de2bcc6b108e826937187646e5a.png

b32bf2fe51c4e3283831382aba39bbc1.gif

今年 6 月初,Istio 1.14 发布 [1] ,该版本中最值得关注的特性是新增对 SPIRE 的支持。SPIFFE[2] 和 SPIRE 都是 CNCF 孵化项目,其中 SPIRE 是 SPIFFE 的实现之一。本文将带你了解 SPIRE 对于零信任架构的意义,以及 Istio 是为何使用 SPIRE 实现身份认证。

Kubernetes 中的身份认证

我们都知道 Istio 最初是基于 Kubernetes 建立起来的,在谈在 Istio 中使用 SPIRE 做身份认证之前,我们先来看下 Kubernetes 中如何做身份认证。

我们来看一个 pod 的 token 的例子,下面是 default 命名空间下 sleep pod 的 Service Account 的 token。

apiVersion: v1
data:ca.crt: {CA_CRT}namespace: ZGVmYXVsdA==token: {TOKEN_STRING}
kind: Secret
metadata:annotations:kubernetes.io/service-account.name: sleepkubernetes.io/service-account.uid: 2c0d00e8-13a2-48d0-9ff8-f987f3325ecfcreationTimestamp: "2022-06-14T03:01:35Z"name: sleep-token-gwhwdnamespace: defaultresourceVersion: "244535398"uid: b8822ceb-9553-4a17-96dc-d525bbaed0e0
type: kubernetes.io/service-account-token

我们看到其中有 ca.crt 和 token 字段,如果这个 token 被窃取,会有什么后果?Kubernetes 中使用 Service Account 来管理 Pod 的身份,然后利用 RBAC 指定具有某 Service Account 的 Pod 对 Kubernetes API 的权限。Service Account 的 token 存储在 Secret 中,token 中并不包含工作负载所运行的节点、pod 的声明,一旦 token 被窃取破坏者就获得了该账户的所有权限,伪装成该用户窃取信息或破坏。

一个 token 只能在一个集群中标记负载身份,Istio 同时支持 Kubernetes 环境和虚拟机,还有多集群多网格,如何统一这些异构环境中的工作负载身份?这时,一个统一的工作负载身份标准就呼之欲出了。

SPIFFE 与 SPIRE 简介

SPIFFE 的目的是基于零信任的理念,建立一个开放、统一的工作负载身份标准,这有助于建立一个零信任的全面身份化的数据中心网络。SPIFFE 的核心是通过简单 API 定义了一个短期的加密身份文件 SVID,用作工作负载认证时使用的身份文件,例如建立 TLS 连接或签署和验证 JWT 令牌等。SPIRE 可以根据管理员定义的策略自动轮换 X.509 SVID 证书和秘钥。Istio 可以通过 SPIRE 动态的消费工作负载标识,SPIRE 可以动态的提供工作负载标识。

下面我将为你简单介绍一下与 SPIFFE 相关的一些术语。

  • • SPIFFE(Secure Production Identity Framework For Everyone)是一套身份认证标准。

  • • SPIRE(SPIFFE Runtime Environment) 是 SPIFFE 标准的一套生产就绪实现。

  • • SVID(SPIFFE Verifiable Identity Document)是工作负载向资源或调用者证明其身份的文件。SVID 包含一个 SPIFFE ID,代表了服务的身份。它将 SPIFFE ID 编码在一个可加密验证的文件中,目前支持两种格式:X.509 证书或 JWT 令牌。

  • • SPIFFE ID 是一个统一资源标识符(URI),其格式如下:spiffe://trust_domain/workload_identifier

SPIRE 包含 Server 和 Agent 两个部分,它们的作用如下。

SPIRE Server

  • • 身份映射

  • • 节点认证

  • • SVID 颁发

SPIRE Agent

  • • 工作负载认证

  • • 提供工作负载 API

SPIFFE 与零信任安全

零信任的本质是以身份为中心的动态访问控制。动态证书轮换、动态证书下发、动态权限控制。SPIFFE 解决的是标识工作负载的问题。

在虚拟机时代我们可能根据一个 IP 地址和端口来标识一个工作负载,基于 IP 地址标识存在多个服务共享一个 IP 地址,IP 地址伪造和访问控制列表过大等问题。到了 Kubernetes 时代,容器的生命周期是短暂的,我们无法再用 IP 地址来标识负载,而是通过 pod 或 service 名称。但是,不同的云、软件平台对工作负载标识的方法不同,相互之间存在兼容性问题。尤其是在异构混合云的中,同时存在虚拟机和容器的工作负载。这时,建立一个细粒度、具有互操作性的标识系统,将具有重要意义。

在 Istio 中使用 SPIRE 做身份认证

Istio 会利用 SPIRE 为每个工作负载提供一个唯一标识,服务网格中的工作负载在进行对等身份认证、请求身份认证和授权策略都会使用到服务标识,用于验证访问是否被允许。SPIRE 原生支持 Envoy SDS API,SPIRE Agent 中的通过与工作负载中共享的 UNIX Domain Socket 通信,为工作负载颁发 SVID。请参考 Istio 文档 [3] 了解如何在 Istio 中使用 SPIRE 做身份认证。

SDS 最重要的好处就是简化了证书管理。如果没有这个特性,在 Kubernetes deployment 中,证书就必须以 secret 的方式被创建,然后挂载进代理容器。如果证书过期了,就需要更新 secret 且代理容器需要被重新部署。如果使用 SDS,Istio 可以使用 SDS 服务器会将证书推送给所有的 Envoy 实例。如果证书过期了,服务器仅需要将新证书推送至 Envoy 实例,Envoy 将会立即使用新证书且不需要重新部署代理容器。

下图展示了 Istio 中使用 SPIRE 进行身份认证的架构。

ef99a79b169803186e7ccbd041f8770e.png
Istio 中使用 SPIRE 进行身份认证的架构图

在 Kubernetes 集群中的 spire 命名空间中使用 StatefulSet 部署 SPIRE Server 和 Kubernetes Workload Registrar,使用 DaemonSet 资源为每个节点部署一个 SPIRE Agent。假设你在安装 Kubernetes 时使用的是默认的 DNS 名称 cluster.local,Kubernetes Workload Registar[4] 会为 Istio Mesh 中的工作负载创建如下格式的身份:

  • • SPRRE Server:spiffe://cluster.local/ns/spire/sa/server

  • • SPIRE Agent:spiffe://cluster.local/ns/spire/sa/spire-agent

  • • Kubernetes Node:spiffe://cluster.local/k8s-workload-registrar/demo-cluster/node/

  • • Kubernetes Worload Pod:spiffe://cluster.local/{namespace}/spire/sa/{service_acount}

这样不论是节点还是每个工作负载都有它们全局唯一的身份,而且还可以根据集群 (信任域)扩展。

Istio Mesh 中的工作负载身份验证过程如下图所示。

698ecf34e7e9104e19abb441ed1b8072.png
Istio 服务网格中的工作负载身份认证过程示意图

详细过程如下:

  1. 1. 工作负载的 sidecar 中的 pilot-agent 会通过共享的 UDS 调用 SPIRE Agent 来获取 SIVD

  2. 2. SPIRE Agent 询问 Kubernetes(准确的说是节点上的 kubelet)获取负载的信息

  3. 3. Kubelet 将从 API server 查询到的信息返回给工作负载验证器

  4. 4. 验证器将 kubelet 返回的结果与 sidecar 共享的身份信息比对,如果相同,则将正确的 SVID 缓存返回给工作负载

关于工作负载的注册和认证的详细过程请参考 SPIRE 文档 [5] 。

总结

身份是零信任网络的基础,SPIFFE 统一了异构环境下的身份标准。在 Istio 中不论我们是否使用 SPIRE,身份验证对于工作负载来说是不会有任何感知的。通过 SPIRE 来为工作负载提供身份验证,可以有效地管理工作负载的身份,为实现零信任网络打好基础。

引用链接

[1] Istio 1.14 发布: https://istio.io/latest/news/releases/1.14.x/announcing-1.14/
[2] SPIFFE: https://spiffe.io/
[3] Istio 文档: https://istio.io/latest/docs/ops/integrations/spire
[4] Kubernetes Workload Registar: https://github.com/spiffe/spire/blob/main/support/k8s/k8s-workload-registrar/README.md
[5] SPIRE 文档: https://lib.jimmysong.io/kubernetes-handbook/concepts/spire/

更多云原生社区资讯,加入云原生社区讨论群,欢迎加入云原生社区,点击阅读原文了解更多。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/285544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言试题106之有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

1、题目 题目:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析:兔子的规律为数列 1,1,2,3,5,8,13,21… 2 、温馨提示 想获取更多C语言题目请猛搓这里==========》200个C语言…

【ArcGIS风暴】ArcGIS Editor for OSM中文教程(2):下载及加载OSM数据

本文讲解在ArcGIS中借助OpenStreetMap工具下载并加载OSM数据。 文章目录 1. 下载OSM数据2. 加载OSM数据1. 下载OSM数据 在工具箱中双击Download OSM Data(XAPI)工具。 Download URL:http://www.overpass-api.de/api/xapi_meta? Downlaod Extent:与图层lanzhou相同

Object.observe将不加入到ES7

先请看 Object.observe 的 API Object.observe(obj, callback[, acceptList])它用来监听对象的变化,当给该对象添加属性,修改属性时都会被依次记录下来 看一个示例 var person {} Object.observe(person, function(arr) {var change arr[0]console.log…

Kafka学习征途:.NET Core操作Kafka

【Kafka】| 总结/Edison Zhou1可用的Kafka .NET客户端作为一个.NET Developer,自然想要在.NET项目中集成Kafka实现发布订阅功能。那么,目前可用的Kafka客户端有哪些呢?目前.NET圈子主流使用的是 Confluent.Kafkaconfluent-kafka-dotnet : htt…

C语言试题107之判断 101至200 之间有多少个素数,并输出所有素数。

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:判断 101至200 之间有多少个素数,并输出所有素数 分析:判断素数的方法:用一个数分…

C语言将十进制输出二进制、八进制、十六进制的方法总结

文章目录 方法一:直接输出方法二:itoa函数方法一:直接输出 C语言中,控制printf函数输出格式的是格式字符,printf没有直接打出2进制数的格式符,直接打出16进制的格式符是x格式符,即%x。 printf函数中输出的格式为printf("<格式化字符串>", <参量表&…

四叉树算法

2019独角兽企业重金招聘Python工程师标准>>> title: 四叉树算法 date: 2016-1-11 15:10 categories: IOS tags: 算法 小小程序猿我的博客&#xff1a;http://daycoding.com 转载&#xff1a;http://blog.csdn.net/zhanxinhang/article/details/6706217 高德iOS聚合…

2019年中国教育信息化行业研究报告

2019年中国教育信息化行业研究报告 教育行业丨研究报告 本文转自&#xff1a;艾瑞咨询 核心摘要&#xff1a; 教育信息化2.0时代&#xff0c;教育相关政府/学校以更开放的姿态对待社会各类业态的进入&#xff0c;共建共享优质教育资源&#xff0c;提升教育公平与教育质量。同…

C语言试题109之将一个正整数分解质因数。例如:输入 90,打印出 90=2乘3乘3乘5

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:将一个正整数分解质因数。例如:输入 90,打印出 90=233*5。 分析:对 n 进行分解质因…

dotnet 使用 Crossgen2 对 DLL 进行 ReadyToRun 提升启动性能

我对几个应用进行严格的启动性能评估&#xff0c;对比了在 .NET Framework 和 dotnet 6 下的应用启动性能&#xff0c;非常符合预期的可以看到&#xff0c;在用户的设备上&#xff0c;经过了 NGen 之后的 .NET Framework 可以提供非常优越的启动性能&#xff0c;再加上 .NET Fr…

使用myeclipse建立maven项目(重要)

maven是管理项目的&#xff0c;myeclipse是编写代码的。第一次写项目都要配置好多东西&#xff0c;很麻烦&#xff0c;now 来看看怎样新建一个maven项目。 工具/原料 myeclipsemaven方法/步骤 因为教程使用的maven是自己下载配置的&#xff0c;并没有使用myeclipse自带的&#…

LeetCode 每日一题 Day 22 || 枚举(数学方法)/二分

1954. 收集足够苹果的最小花园周长 给你一个用无限二维网格表示的花园&#xff0c;每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| |j| 个苹果。 你将会买下正中心坐标是 (0, 0) 的一块 正方形土地 &#xff0c;且每条边都与两条坐标轴之一平行。 给你…

不用@微信官网了,用python给自己的微信头像加个小国旗

国旗LOGO&#xff08;png透明格式&#xff09;&#xff1a; 微信头像 合成结果&#xff1a; import base64 import os import re from io import BytesIO from PIL import Image import tkinter as tk from tkinter import filedialog# 水印图片 可以自己指定 #markImageImage…

C语言试题106之有一对兔子问题

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月 后每个月又…

Blazor University (34)表单 —— 获得表单状态

原文链接&#xff1a;https://blazor-university.com/forms/accessing-form-state/获得表单状态源代码[1]有时&#xff0c;我们需要获得 <EditForm> 子内容中的表单状态。最常见的用途是当我们需要访问输入的 CSS 类时&#xff0c;指示输入是否被修改或有效/无效。例如&a…

[转]c# 中间件 的扩展模型(.net webapi/.net Core 的 MiddleWare 处理模型)

在学习 asp.net WebApi 或者asp.net Core 的时候&#xff0c;它们管道的处理模型跟 asp.net MVC/WebForm 的管道模型是不一样的。 asp.net WebApi 或者asp.net Core 他们使用了一种叫做“中间件”的处理模型&#xff0c;相对于传统管道模型&#xff0c;剔除了很多非必要的处理…

【ArcGIS Engine二次开发】入门基础(1):ArcGIS Engine简介及开发环境搭建

文章目录ArcGIS Engine概述ArcGIS Engine与ArcObjects的关系ArcGIS Engine下载及安装ArcGIS Engine概述 ArcGIS Engine简介 ArcGIS Engine是ESRI公司在2004年推出的用于开发C/S架构GIS应用软件的工具包&#xff0c;是将用于构建ArcGIS整套产品的组件库——ArcObjects的比分功…

微软Visual Studio 2019版本16.3 正式发布,支持 .NET Core 3.0

微软正式发布了Visual Studio 2019 16.3版本&#xff0c;主要更新内容如下&#xff1a; .NET Core 3.0 Visual Studio版本16.3包括对 .NET Core 3.0 的支持。 注意&#xff1a;如果使用的是.NET Core 3.0&#xff0c;则需要使用Visual Studio 16.3或更高版本。 .NET Core桌…

C语言试题120之输入两个正整数 m 和 n,求其最大公约数和最小公倍数

✅作者简介:大家好我是码莎拉蒂,CSDN博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款模拟面试、刷题神器👉 点击跳转进入网站 1、题目 题目:输入两个正整数 m 和 n,求其最大公约数和最小公倍数 分析:利用辗除法 2 、温馨提示…

OSChina 周一乱弹 ——致我们终将逝去的青春

2019独角兽企业重金招聘Python工程师标准>>> 我们的青春是这样的。 从幼儿园午睡开始&#xff0c; 做了一万遍的广播体操&#xff0c; 一条充满了“血”和“泪”的三八线 遍地开花的煎饼果子摊 五毛钱只能养活三天的小鸡 象征着财富和地位的弹珠 放学后 奔向世界 放…