【Kubernetes】K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制
K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制
- 1.基于属性的访问控制(ABAC 鉴权)
- 2.基于节点的访问控制(node 鉴权)
- 2.1 读取操作
- 2.2 写入操作
- 3.基于 Webhook 的访问控制
- 3.1 基于 Webhook 的访问控制的架构
- 3.2 基于 Webhook 的访问控制的运行机制
1.基于属性的访问控制(ABAC 鉴权)
✨ 官方文档:https://kubernetes.io/docs/reference/access-authn-authz/abac/
❗ ABAC 鉴权功能从 Kubernetes
1.6版本被弃用。
基于属性的访问控制(Attribute-Based Access Control,ABAC)通过将属性组合在一起来定义用户可以访问的范围。其策略文件是一个具有多行 JSON 格式的文件,该文件中的每一行都是一个策略(即一个 JSON 对象)。
下表列举了该 JSON 对象应具备的属性。
| 属性 | |
|---|---|
| 版本控制 | 1️⃣ apiVersion:字符串类型。该字段表示匹配 Kubernetes API 的哪些版本。该字段允许的值为 abac.authorization.kubernetes.io/v1beta1。2️⃣ kind:字符串类型,有效值为 Policy。 |
spec | 1️⃣ user:字符串类型。该字段的值可以是验证通过的用户名,也可以是通过 --token-auth-file 指定的 Token 文件。2️⃣ group:字符串类型。如果指定了该字段,则它必须是经过身份验证的用户组。使用 system:authenticated 可以匹配所有经过身份验证的用户组;使用 system:unauthenticated 可以匹配所有没有经过身份验证的用户组。 |
| 资源匹配 | 1️⃣ apiGroup:字符串类型,表示匹配一个 Kubernetes API 资源组。使用 * 则匹配所有 API 资源组。也可以具体指定某一个资源组,例如 extensions。2️⃣ namespace:字符串类型,表示匹配某一个命名空间。使用 * 则匹配所命名空间。也可以具体指定某一个命名空间,例如 kube-system。3️⃣ resource:字符串类型,表示匹配的资源类型。使用 * 将匹配所资源。也可以具体指定某一个或者某几个资源,例如 pod、service。 |
| 非资源匹配 | nonResourcePath:字符串类型,表示请求的路径。例如:/version 或 /apis。该字段也可以使用通配符。例如,使用 * 则匹配所有非资源请求;使用 /dev/* 则匹配 /dev/ 的所有子路径。 |
readonly | 布尔类型。当该字段被设置为 true 时,资源匹配策略仅适用于 GET、LIST 和 WATCH 操作,而非资源匹配策略仅适用于 GET 操作。 |
下面是使用 ABAC 鉴权时的几个 JSON 策略。
alice用户可以对所有资源做任何事情。
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1", "kind": "Policy", "spec": { "user": "alice", "namespace": "*", "resource": "*", "apiGroup": "*" }
}
Kubelet用户可以访问任何 Pod 和服务。
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1","kind": "Policy","spec": {"user": "kubelet","namespace": "*","resource": "pods","readonly": true}
}
Bob用户可以在命名空间dev-demo中访问 Pod。
{"apiVersion": "abac.authorization.kubernetes.io/v1beta1","kind": "Policy","spec": {"user": "bob","namespace": "dev-demo","resource": "pods","readonly": true}
}
🚀 在实际情况中,通常会把一个 JSON 字符串放到一个 JSON 策略文件中,来作为访问控制的策略文件。在配置完 JSON 策略文件后,在重启 API Server 时需要指定该文件才能获取新的策略。
2.基于节点的访问控制(node 鉴权)
✨ 官方文档:https://kubernetes.io/docs/reference/access-authn-authz/node/
基于节点的访问控制(node 鉴权)是专门针对 kubectl 发出的 API 请求的一种鉴权。
🚀 要启用基于节点的访问控制,则需要在启动 API Server 时使用
--authorization-mode=Node参数。
对于 kubectl 执行的 API 请求,Node 鉴权过程主要包括 读取操作 和 写入操作。
2.1 读取操作
当 kubectl 使用基于节点的方式操作 API 资源时,允许对以下资源进行 读取操作:
- Pod、Service、Endpoint、Node
- Secret、ConfigMap、PVC
- 绑定到
kubelet节点的与 Pod 相关的持久卷
2.2 写入操作
当 kubectl 使用基于节点的方式操作 API 资源时,允许对以下的资源进行 写入操作:
- 节点和节点状态(启用 NodeRestriction 准入控制器,以限制
kubelet只能修改本节点的信息)。 - Pod 和 Pod 状态(启用 NodeRestriction 准入控制器,以限制
kubelet只能修改绑定到本节点的 Pod 信息)。 - Event(事件)。
🚀 由于写入操作需要启用 NodeRestriction(准入控制器),因此在启动 API Server 时,需要在
--enable-admission-plugins中加入NodeRestriction,例如:--enable-admission-plugins=...,NodeRestriction,...
3.基于 Webhook 的访问控制
✨ 官方文档:https://kubernetes.io/docs/reference/access-authn-authz/webhook/
基于 Webhook 的访问控制定义了 HTTP 的一个回调接口,从而实现在某些特定事件发生时,该接口的应用会向一个远端的授权服务器发送 HTTP POST 信息。因此,在启用基于 Webhook 的访问控制后,Kubernetes 会调用外部的服务来对用户访问的资源进行授权。
🚀 要启用基于 Webhook 的访问控制,则需要在启动 API Server 时使用
--authorization-mode=webhook参数。
3.1 基于 Webhook 的访问控制的架构
基于 Webhook 的访问控制的架构如下图所示。

从架构来看,基于 Webhook 的访问控制其实是一种基于 HTTP 协议的客户端与服务器(Client-Server)架构。由于 Kubernetes 的访问控制是围绕 API Server 进行的,因此,这里的 HTTP 客户端就是 API Server,而 HTTP 服务器端就是远端的授权服务器。在配置 HTTP 客户端 API Server 时,需要使用一个配置文件来指定远端的授权服务器的信息。
下面是 Kubernetes 官方提供的一个 HTTP 客户端配置示例。
# Kubernetes API version
apiVersion: v1
# kind of the API object
kind: Config
# clusters refers to the remote service.
clusters:- name: name-of-remote-authz-servicecluster:# CA for verifying the remote service.certificate-authority: /path/to/ca.pem# URL of remote service to query. Must use 'https'. May not include parameters.server: https://authz.example.com/authorize# users refers to the API Server's webhook configuration.
users:- name: name-of-api-serveruser:client-certificate: /path/to/cert.pem # cert for the webhook plugin to useclient-key: /path/to/key.pem # key matching the cert# kubeconfig files require a context. Provide one for the API Server.
current-context: webhook
contexts:
- context:cluster: name-of-remote-authz-serviceuser: name-of-api-servername: webhook
🚀 其中的
clusters字段代表的是远端的授权服务器。
有了客户端的配置文件后,在启动 API Server 时,除要指定使用 Webhook 的鉴权方式(即设置 --authorization-mode=webhook 参数)外,还需要用 --authorization-webhook-config-file 参数来指定 HTTP 客户端 API Server 的配置文件。
3.2 基于 Webhook 的访问控制的运行机制
在 Kubernetes 配置好基于 Webhook 的访问控制后,在进行鉴权时,API Server 会自动向远端的授权服务器发送一个 HTTP POST 的报文,在该请求中包含一个 JSON 格式的 SubjectAccessReview 对象用来描述当前执行的动作请求。
以下是对 Kubernetes 的资源对象请求进行鉴权的 HTTP POST 报文格式。该报文希望 jane 用户可以获取 Pod 的列表。
{"apiVersion": "authorization.k8s.io/v1beta1","kind": "SubjectAccessReview","spec": {"resourceAttributes": {"namespace": "kittensandponies","verb": "get","group": "unicorn.example.org","resource": "pods"},"user": "jane","group": ["group1","group2"]}
}
可以看出,SubjectAccessReview 对象中除包含被访问资源和请求的动作信息外,还包含用户的信息。
如果要对 Kubernetes 的非资源对象的请求进行鉴权,则报文格式如下:
{"apiVersion": "authorization.k8s.io/v1beta1","kind": "SubjectAccessReview","spec": {"nonResourceAttributes": {"path": "/debug","verb": "get"},"user": "jane","group": ["group1","group2"]}
}
远端的授权服务器在收到 HTTP POST 报文后,如果鉴权成功,则返回一个 SubjectAccessReview 对象,并在对象中填充 status 字段来允许访问。例如:
{"apiVersion": "authorization.k8s.io/v1beta1","kind": "SubjectAccessReview","status": {"allowed": true}
}
在远端的授权服务器拒绝请求的 HTTP POST 报文时,也是通过填充 status 字段来拒绝。例如:
{"apiVersion": "authorization.k8s.io/v1beta1","kind": "SubjectAccessReview","status": {"allowed": false,"reason": "user does not have read access to the namespace"}
}
如果远端的授权服务器拒绝了 API Server 的请求,同时也想拒绝其他授权者再次对该请求进鉴权,则可以在 status 字段中增加一个 denied 参数。例如:
{"apiVersion": "authorization.k8s.io/v1beta1","kind": "SubjectAccessReview","status": {"allowed": false,"denied": true,"reason": "user does not have read access to the namespace"}
}
相关文章:
【Kubernetes】K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制
K8s 的鉴权管理(二):基于属性 / 节点 / Webhook 的访问控制 1.基于属性的访问控制(ABAC 鉴权)2.基于节点的访问控制(node 鉴权)2.1 读取操作2.2 写入操作 3.基于 Webhook 的访问控制3.1 基于 We…...
Java面试、技巧、问题、回复,资源面面观
入门 先了解一下面试流程 复习 Java 基础知识: 温习 Java 编程的核心概念,包括数据类型、变量、循环、数组和面向对象的编程原则。数据结构和算法: 加强您对 Java 编程中使用的基本数据结构和算法的理解。练习编码: 在各种平台上解…...
深入理解Elasticsearch的`_source`字段与索引优化
在Elasticsearch (ES) 中,_source字段是一个关键组件,它不仅决定了数据的存储方式,还影响到查询时返回的内容。在某些场景下,我们可以通过配置_source来优化存储和性能,尤其是当我们希望减少存储空间或避免返回某些字段…...
Pikachu靶场
先来点鸡汤,少就是多,慢就是快。 环境搭建 攻击机kali 192.168.146.140 靶机win7 192.168.146.161 下载zip,pikachu - GitCode 把下载好的pikachu-master,拖进win7,用phpstudy打开网站根目录,.....再用…...
TS axios封装
方式一 service/request/request.ts import axios from axios import { ElLoading } from element-plus import type { AxiosRequestConfig, AxiosInstance, AxiosResponse } from axios import type { ILoadingInstance } from element-plus/lib/el-loading/src/loading.typ…...
学会使用西门子博途Startdrive中的测量功能
工程师在驱动调试过程中,往往需要对驱动系统的性能进行分析及优化,比如说借助于调试软件中的驱动器测量功能,可以得到驱动系统的阶跃响应、波特图等,以此为依据工程师可以调整速度控制器、电流控制器的相关参数,使驱动…...
Spring Security认证与授权
1 Spring Security介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是Spring生态系统中的一员,因此它伴随着整个Spring生态系统不断修正、升级,在spring boot项目中加入springsecurity更是…...
速通GPT:Improving Language Understanding by Generative Pre-Training全文解读
文章目录 速通GPT系列几个重要概念1、微调的具体做法2、任务感知输入变换3、判别式训练模型 Abstract概括分析和观点1. 自然语言理解中的数据问题2. 生成预训练和监督微调的结合3. 任务感知输入变换4. 模型的强大性能 Introduction概括分析和观点1. 自然语言理解的挑战在于对标…...
软件质量保证例题
答案:D 软件质量保证 功能性 适合性 准确性 互操作性 安全保密性 依从性 可靠性 成熟性 容错性 易恢复性 易用性 易理解性 易学性 易操作性 效率 时间特性 资源利用性 维护性 易分析性 易改变性 稳定性 易测试性 可移植性 适应性 易安装性 一致性 易替换…...
动态规划算法---04.斐波那契数列模型_解码方法_C++
题目链接:91. 解码方法 - 力扣(LeetCode)https://leetcode.cn/problems/decode-ways/description/ 一、题目解析 题目: 题目大意:从题目中我们可以知道,解码就是在字符串s中由‘1’到‘26’的字符可以转化…...
crm如何做私域运营?
流量获取的挑战日益增加,客户线索成本高、客户资源流失严重、转化率低,因此,私域流量管理已成为关键。 当前挑战 1、公域流量难以整合:外部流量分散,难以有效汇总和沉淀。 2、私域运营体系缺失:缺乏有效沟…...
基于QGIS 3.16.0 的OSM路网矢量范围裁剪实战-以湖南省为例
目录 前言 一、相关数据介绍 1、OMS路网数据 2、路网数据 3、路网图层属性 二、按省域范围进行路网裁剪 1、裁剪范围制定 2、空间裁剪 3、裁剪结果 三、总结 前言 改革开放特别是党的十八大以来,我国公路发展取得了举世瞩目的成就。国家高速公路网由“7 射…...
WPF 手撸插件 八 依赖注入
本文内容大量参考了:https://www.cnblogs.com/Chary/p/11351457.html 而且这篇文章总结的非常好。 1、注意想使用Autofac,Autofac是一个轻量级、高性能的依赖注入(DI)框架,主要用于.NET应用程序的组件解耦和…...
走进低代码报表开发(一):探秘报表数据源
在前文当中,我们对勤研低代码平台的流程设计功能进行了介绍。接下来,让我们一同深入了解在企业日常运营中另一个极为常见的报表功能。在当今数字化时代,高效的报表生成对于企业的决策至关重要。勤研低代码开发平台能够以卓越的性能和便捷的操…...
代理服务器及其原理
代理服务器的代理可以分为正向代理和反向代理,本篇将讲解这两种代理方式的原理,以及对应的功能特点和应用场景。最后还对比和 NAT 和代理服务器的区别。 目录 正向代理 工作原理 功能特点 应用场景 反向代理 基本原理 应用场景 NAT和代理服务器…...
计算机毕业设计选题推荐-养老院管理系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
免费SSL证书正在逐渐被淘汰,证书部署自动化的发展趋势即将到来!
目录 背景解决方案。1.使用自签证书(浏览器报警、免费)2.更换支持自签自续的CA机构(免费)3.付费选择CA机构 免费SSL证书正在逐渐被淘汰,证书部署自动化的发展趋势即将到来免费的SSL证书有以下弊端1.有效期短࿱…...
openVX加速-基本概念和简单代码实现
OpenVX 是一个用于计算机视觉和图像处理的跨平台加速标准库,旨在提高在异构平台(如 CPU、GPU、DSP 等)上的执行效率。OpenVX 提供了一组优化的、可移植的 API,用于加速常见的视觉算法,使开发者能够在不同硬件平台上实现…...
网工内推 | 网络工程师,Base上海,HCIP/HCIE认证优先
01 利宏科技 🔷招聘岗位:网络工程师 🔷任职要求 1、有HCIE、HCIP证书 2、做过IDC机房网络建设 3、本科毕业 4、熟悉基本linux命令 5、熟悉山石、华为等防火墙 6、熟悉IPS、WAF等安全设备 7、做过同城灾备机房建设优先 🔷薪…...
Windows10 如何配置python IDE
Windows10 如何配置python IDE 前言Python直接安装(快速上手)Step1.找到网址Step2.选择版本(非常重要)Step3. 安装过程Step4. python测试 Anaconda安装(推荐,集成了Spyder和Pycharm的安装)Step1…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
