使用k8s RBAC和ValidatingAdmissionPolicy 配合来校验用户权限

我先讲一下业务场景:

  1. k8s集群内部有几个重要的命名空间(比如: kube-system, kube-public 等),这些命名空间除了管理员有权限,其他用户不可以操作(编辑,删除)这几个命名空间。
  2. 在k8s集群需要创建一个用户 saas-admin, 有以下权限:
    (1). namespace 的 create, update, delete, get, list, watch 权限。
    (2). rolebindings 的 create, update, delete, get, list 权限。
    (3). serviceaccounts 的 create, update, delete, get, list, watch 权限。
  3. saas-admin 用户可以在集群下创建用户 sass-user 和 用户独有的命名空间 users-ns, 并且把用户 saas-user 绑定到 ClusterRole。
  4. 用户 saas-user 具有命名空间 users-ns 下的所有权限(每个用户都有自己的命名空间)。
  5. 这里重复一下,用户 saas-admin 不可以查看 kube-system 和 kube-public 命名空间下的任务资源, 也不能操作(编辑,删除) kube-system 和 kube-public 命名空间。

这里先抛出一个问题:如果只用 RBAC 如何才能做到上面这种场景?


我想了很久, 发现只有RBAC根本做不到(也可能是我才书浅薄, 如果大家有想法,可以在评论区留言) , 我给出理由就是 saas-admin 有 namespace 操作权限,那么没有办法避免操作 kube-system 等重要命名空间。

那么如何让saas-admin 没有权限操作这些重要命名空间呢?这个时候就要配合 ValidatingAdmissionPolicy 来使用了,如果不熟悉 ValidatingAdmissionPolicy ,可以去官方文档了接一下,我说一下个人想法:

  1. 使用 ValidatingAdmissionPolicy 来判断用户是否saas-admin, 如果是则拒绝。
  2. 使用 ValidatingAdmissionPolicyBinding 来把验证准入策略绑定带有特定标签的命名空间。
  3. 使用RBAC来分配saas-admin的权限。

第1和第2步的目的是防止saas-admin 误操作 kube-system 等命名空间, 这样目的就达到。

下面展示一下配置,噢,对了,如果不知道k8s怎么开启ValidatingAdmissionPolicy,可以参考这篇文章:k8s 启用 ValidatingAdmissionPolicy 特性

配置 ValidatingAdmissionPolicy

apiVersion: admissionregistration.k8s.io/v1beta1
kind: ValidatingAdmissionPolicy
metadata:name: deny-inter
spec:matchConstraints:resourceRules:- apiGroups: ["*"]apiVersions: ["*"]operations: ["*"]resources: ["*"]validations:- expression: "request.userInfo.username != 'system:serviceaccount:saas:saas-admin'"  # 拒绝所有请求message: "ServiceAccount 'saas-admin' cannot operate in namespace"failurePolicy: Fail---
apiVersion: admissionregistration.k8s.io/v1beta1
kind: ValidatingAdmissionPolicyBinding
metadata:name: deny-inter-binding
spec:policyName: deny-inter  # 引用策略名称matchResources:namespaceSelector:matchLabels:test-label: inter  # 匹配命名空间的标签, 可以为kube-system和kube-public打上标签validationActions: ["Deny"]  # 添加验证动作

配置RBAC

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:# "namespace" 被忽略,因为 ClusterRoles 不受名字空间限制name: saas-admin-role
rules:- apiGroups: ["*"]resources: ["namespace"]verbs: ["create", "update", "delete", "get", "list", "watch"]- apiGroups: ["rbac.authorization.k8s.io"]resources: ["rolebindings"]verbs: ["create", "update", "delete", "get", "list"]- apiGroups: [""]resources: ["serviceaccounts"]verbs: ["create", "get", "list", "watch", "update", "delete"]
---
apiVersion: v1
kind: ServiceAccount
metadata:name: saas-admin  # 替换为实际用户名namespace: saas  # 替换为所需的命名空间
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:name: saas-admin-role-binding
subjects:- kind: ServiceAccountname: sass-adminnamespace: saas
roleRef:kind: ClusterRolename: saas-admin-role  # 替换为实际权限角色apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:name: saas-user-role
rules:- apiGroups: [""]resources: ["pods", "services", "configmaps", "secrets", "persistentvolumeclaims", "persistentvolumes"]verbs: ["get", "list", "create", "update", "delete", "watch"]- apiGroups: ["apps"]resources: ["deployments"]verbs: ["get", "list", "create", "update", "delete", "watch"]

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

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

相关文章

2. Sharding-JDBC广播表和绑定表操作

1. 广播表实战 ⼴播表概念 1. 指所有的分⽚数据源中都存在的表,表结构和表中的数据在每个数据库中均完全⼀致。 2. 适⽤于数据量不⼤且需要与海量数据的表进⾏关联查询的场景。 3. 例如:字典表、配置表。注意 1. 分库分表中间件,对应的数据…

【C++打怪之路Lv13】- “继承“篇

🌈 个人主页:白子寰 🔥 分类专栏:重生之我在学Linux,C打怪之路,python从入门到精通,数据结构,C语言,C语言题集👈 希望得到您的订阅和支持~ 💡 坚持…

【科研积累】大模型的认知笔记

1 认识大模型 大模型是人工智能发展的一个里程碑,人工智能包括机器学习,机器学习包括监督学习、无监督学习和强化学习,深度学习神经网络也是机器学习的一个分支,生成式人工智能是深度学习的一个子集,ChatGPT和Stable …

【面试分享】xshell连接Linux服务器22端口执行命令top期间的技术细节和底层逻辑

通过SSH客户端(如Xshell)连接到服务器的22端口并执行top命令,涉及多个技术细节和底层逻辑。以下是对这一过程的详细解释: 一、技术细节 SSH协议: SSH(Secure Shell)是一种网络协议,…

mac 中python 安装mysqlclient 出现 ld: library ‘ssl‘ not found错误

1. 出现报错 2. 获取openssl位置 brew info openssl 3. 配置环境变量(我的是在~/.bash.profile) export LDFLAGS"-L/opt/homebrew/Cellar/openssl3/3.4.0/lib" export CPPFLAGS"-I/opt/homebrew/Cellar/openssl3/…

自动驾驶系列—自动驾驶中的短距离感知:超声波雷达的核心技术与场景应用

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

体育活动赛事报名马拉松微信小程序开发

功能描述 体育活动赛事报名马拉松微信小程序,该项目是一个体育活动报名小程序,主要功能有活动报名、扫码签到、签到积分、排行奖励、积分兑换等功能。 用户端🔶登录:◻️1.微信授权登录 ◻️2.手机号码授权 🔶首页&am…

uniapp框架配置项pages.json

uniapp框架配置项pages.json pages.json 文件用来对 uni-app 进行全局配置,决定页面文件的路径、窗口样式、原生的导航栏、底部的原生tabbar 等。 globalStyle 全局配置 用于设置应用的状态栏、导航条、标题、窗口背景色等。下面配置项默认应用于每个页面。 注意…

linux中kubectl命令使用

一.命令介绍 kubectl 是 Kubernetes 集群管理的命令行工具,用于与 Kubernetes API 交互。你可以通过它来管理和操作 Kubernetes 集群中的资源,如 Pod、Deployment、Service 等。下面是如何在不同操作系统上下载和使用 kubectl 的方法。 二.下载 kubect…

Debezium系列之:发件箱事件路由器

Debezium系列之:发件箱事件路由器 发件箱消息示例基本发件箱表基本配置自定义配置有选择性地应用转换的选项负载序列化格式使用 Apache Avro 作为有效负载格式发送带有附加字段的消息配置选项请参阅使用发件箱模式实现可靠的微服务数据交换,了解发件箱模式为何有用以及其工作…

Android关机流程知多少?

在 Android 中,关机流程涉及系统各个组件的协同工作,确保设备在断电之前能够安全地关闭所有活动并保存数据。以下是 Android 系统中关机流程的详细介绍: 1. 用户触发关机请求 关机流程由用户的操作触发,通常有以下几种方式&#…

python manage.py命令集

python manage.py 是 Django 框架中用于管理 Django 项目的命令行工具。它提供了一系列命令,用于创建应用、运行服务器、创建数据库迁移、管理静态文件等。 startproject python manage.py startproject myproject 创建一个新的 Django 项目。myproject 是项目的…

Docker使用docker-compose一键部署nacos、Mysql、redis

下面是一个简单的例子,展示如何通过Docker Compose文件部署Nacos、MySQL和Redis。请确保您的机器上已经安装了Docker和Docker Compose。 1,准备好mysql、redis、nacos镜像 sudo docker pull mysql:8 && sudo docker pull redis:7.2 &&…

图像处理椒盐噪声

椒盐噪声,也称为脉冲噪声,是图像中经常见到的一种噪声。它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。这些白点和黑点会在图像中随机分布,导致图像中…

移远通信亮相骁龙AI PC生态科技日,以领先的5G及Wi-Fi产品革新PC用户体验

PC作为人们学习、办公、娱乐的重要工具,已经深度融入我们的工作和生活。随着物联网技术的快速发展,以及人们对PC性能要求的逐步提高,AI PC成为了行业发展的重要趋势。 11月7-8日,骁龙AI PC生态科技日在深圳举办。作为高通骁龙的重…

C语言,用最小二乘法实现一个回归模型

在 C 语言中实现最小二乘法回归模型,通常用于拟合一条直线(线性回归)。最小二乘法是一种优化算法,通过最小化实际数据点与模型预测值之间的误差的平方和来找到最佳拟合的线性模型。 最小二乘法的线性回归 对于一组数据点 ( x 1 …

SCUI Admin + Laravel 整合

基于 Vue3 和 Element Plus 和 Laravel 整合开发 项目地址:持续更新 LaravelVueProject: laravel vue3 scui

HTML5:网页开发的新纪元

文章目录 前言一、HTML5技术概述二、主要特点及优势1. 多媒体支持2. 图形绘制3. 离线存储4. 表单控件增强5. 响应式设计 三、应用场景1. 游戏开发2. 在线教育3. 电子商务 四、面临的挑战结语 前言 在互联网技术快速发展的今天,H5(HTML5的简称&#xff0…

Docker的轻量级可视化工具Portainer

docker目录 1 Portainer官方链接2 是什么?3 下载安装4 跑通一次5 后记 1 Portainer官方链接 这里给出portainer的官方链接:https://www.portainer.io/ portainer安装的官方链接:https://docs.portainer.io/start/install-ce/server/docker/l…

Sql server 备份还原方法

备份 方法1,选择对应的数据库名-------》右键 任务---------》备份 默认备份类型 完整 文件后缀 .bak 方法2,选择对应的数据库名-------》右键 任务----------》生成脚本 选择要编写的数据库对象(表,视图,存储过程等) 选择对应的 服…