Kubernetes 访问控制 - RBAC 鉴权

Understanding-the-Kubernetes-RBAC-API

Author:rab


目录

    • 前言
    • 一、Role
    • 二、ClusterRole
    • 三、RoleBinding
    • 四、ClusterRoleBinding
    • 总结


前言

API 访问控制有很多,比如 RBAC 鉴权、ABAC 鉴权、Node 鉴权等。自 Kubernetes 1.6 版本以后,RBAC 成为 Kubernetes 的默认访问控制机制。RBAC 允许管理员定义和控制哪些用户、服务账号或组可以执行哪些操作(例如创建、更新、删除、获取资源)以及对哪些资源。这有助于增加集群的安全性,并允许管理员实施细粒度的权限控制。Kubernetes 中的 Role-Based Access Control(RBAC)API 定义了四种主要对象 => Role(角色)、ClusterRole(集群角色)、RoleBinding(角色绑定)、ClusterRoleBinding(集群角色绑定),用于实现权限管理和访问控制策略。接下来,我们将分别介绍这 4 种对象资源。

RBAC 官网:https://kubernetes.io/zh-cn/docs/reference/access-authn-authz/rbac/

一、Role

1、功能

Role 总是用来在某个名字空间内设置访问权限,在我们创建 Role 时,必须指定该 Role 所属的名字空间。

2、案例

apiVersion: rbac.authorization.k8s.io/v1
kind: Role                           # 定义了要创建的RBAC对象的类型,这里是一个Role对象
metadata:                            # Role对象的元信息namespace: default                 # 控制着该命名空间内的资源访问权限name: pod-reader                   # 后续的配置中引用该名称来分配权限
rules:                               # Role对象对象包含的权限规则
- apiGroups: [""]                    # 空字符串""表示控制核心API组,即不属于任何自定义API组的资源。这意味着该Role控制对核心Kubernetes资源的访问resources: ["pods"]                # 指定了要控制的资源类型,即 "pods"(Pod资源)verbs: ["get", "watch", "list"]    # 允许对pods资源执行get、watch和list操作,允许查看和监视Pod资源的信息

这个 Role 角色的配置表示,用户或服务账号被授予在 “default” 命名空间中执行 “get”、“watch” 和 “list” 操作以访问 Pod 资源的权限。

二、ClusterRole

1、功能

与 Role 相对,ClusterRole 则是一个集群作用域的资源。ClusterRole 同样可以用于授予 Role 能够授予的权限。 因为 ClusterRole 属于集群范围,所以它也可以为以下资源授予访问权限:

  • 集群范围资源,比如节点(Node);
  • 非资源端点,比如 /healthz
  • 跨名字空间访问的名字空间作用域的资源,如 Pod。

2、案例

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole                   # 定义了要创建的RBAC对象的类型,这里是一个ClusterRole对象
metadata:                           # ClusterRole对象的元信息# namespace: default              # 此时namespace被忽略,因为ClusterRoles不受名字空间限制。name: secret-reader               # 后续的配置中引用该名称来分配权限
rules:                              # ClusterRole对象对象包含的权限规则
- apiGroups: [""]                   # 空字符串""表示控制核心API组,即不属于任何自定义API组的资源。这意味着该ClusterRole控制对核心Kubernetes资源的访问resources: ["secrets"]            # 指定了要控制的资源类型,即 "secrets"(Secret 资源)verbs: ["get", "watch", "list"]   # 允许对secrets资源执行get、watch和list操作,允许查看和监视Secret资源的信息

这个 ClusterRole 配置表示,用户或服务账号被授予在整个集群范围内执行 “get”、“watch” 和 “list” 操作以访问 Secret 资源的权限。与 Role 不同,ClusterRole 可以用于控制集群范围的资源,而不仅限于特定命名空间内的资源。

三、RoleBinding

1、功能

用于将 RoleClusterRole 与特定用户、服务账号或组绑定,以授予它们访问资源的权限。RoleBinding定义了谁可以执行哪些操作,并将这些规则应用到特定的命名空间或整个集群,RoleBinding 在指定的名字空间中执行授权。

因此,一个 RoleBinding 可以引用同一的名字空间中的任何 Role。 或者,一个 RoleBinding 可以引用某 ClusterRole 并将该 ClusterRole 绑定到 RoleBinding 所在的名字空间。

2、案例

apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding                       # 定义了要创建的RBAC对象的类型,这里是一个RoleBinding对象
metadata:                               # RoleBinding对象的元信息name: read-pods                       # RoleBinding对象的名称,用来标识这个绑定namespace: default                    # 指定了该RoleBinding对象所属的命名空间
subjects:                               # 定义了要分配权限的主体(可指定多个主体)
- kind: User                            # 指定了主体的类型为用户name: jane                            # 指定了用户名为jane的用户(name字段值是区分大小写的)apiGroup: rbac.authorization.k8s.io   # 指定了主体所属的API组
roleRef:                                # roleRef指定与某Role或ClusterRole的绑定关系kind: Role                            # 此字段必须是Role或ClusterRolename: pod-reader                      # 此字段必须与你要绑定的Role或ClusterRole的名称匹配apiGroup: rbac.authorization.k8s.io   # 指定了角色所属的API组

这个 RoleBinding 配置的作用是将名为 “jane” 的用户赋予在 “default” 命名空间内执行 “pod-reader” 角色中定义的权限的权限。“pod-reader” 角色应确保已经存在(假设为 Pod 资源),并定义了对 “pods” 资源执行 “get”、“watch” 和 “list” 操作的权限。因此,“jane” 用户将能够在 “default” 命名空间中执行这些操作以查看和监视 Pod 资源的信息。

四、ClusterRoleBinding

1、功能

上面说了,一个 RoleBinding 可以引用某 ClusterRole 并将该 ClusterRole 绑定到 RoleBinding 所在的名字空间。 如果你希望将某 ClusterRole 绑定到集群中所有名字空间,那你要使用 ClusterRoleBinding,它实现了跨整个集群完成访问权限的授予。

2、案例

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding                # 定义了要创建的RBAC对象的类型,这里是一个ClusterRoleBinding对象
metadata:                               # ClusterRoleBinding对象的元信息name: read-secrets-global             # ClusterRoleBinding对象的名称,用来标识这个绑定
subjects:                               # 定义了要分配权限的主体(可指定多个主体)
- kind: Group                           # 指定了主体的类型为组name: manager                         # 指定了组的名称,即manager组(name字段值是区分大小写的)apiGroup: rbac.authorization.k8s.io   # 指定了主体所属的API组
roleRef:                                # 定义了与该绑定关联的集群角色kind: ClusterRole                     # 指定了与该绑定关联的角色类型,即ClusterRolename: secret-reader                   # 指定了要关联的集群角色的名称,即secret-readerapiGroup: rbac.authorization.k8s.io   # 指定了角色所属的API组

这个 ClusterRoleBinding 配置的作用是将 “manager” 组关联到名为 “secret-reader” 的集群角色上,从而赋予 “manager” 组在整个集群中执行 “secret-reader” 角色中定义的权限的权限。“secret-reader” 集群角色应确保已经存在(假设为 Secrets 资源),并定义了对 “secrets” 资源执行 “get”、“watch” 和 “list” 操作的权限,该权限在整个集群范围内生效。

特别需要注意的是:

创建了绑定之后,你不能再修改绑定对象所引用的 Role 或 ClusterRole。 试图改变绑定对象的 roleRef 将导致合法性检查错误。 如果你想要改变现有绑定对象中 roleRef 字段的内容,必须删除重新创建绑定对象。

这种限制有两个主要原因:

  1. roleRef 设置为不可以改变,这使得可以为用户授予对现有绑定对象的 update 权限, 这样可以让他们管理主体列表,同时不能更改被授予这些主体的角色。
  2. 针对不同角色的绑定是完全不一样的绑定。要求通过删除/重建绑定来更改 roleRef, 这样可以确保要赋予绑定的所有主体会被授予新的角色(而不是在允许或者不小心修改了 roleRef 的情况下导致所有现有主体未经验证即被授予新角色对应的权限)。

使用 kubectl auth reconcile 命令可以创建或者更新包含 RBAC 对象的清单文件, 并且在必要的情况下删除和重新创建绑定对象,以改变所引用的角色。

总结

  1. Role(角色)
    • Role 对象是 RBAC 中的一种资源,用于定义一组权限规则,以控制对指定命名空间内的资源的访问权限。
    • Role 只能授予对一个命名空间内资源的权限。
    • Role 定义了针对特定 API 组中的资源对象的操作权限。
  2. ClusterRole(集群角色)
    • ClusterRole 也是一种 RBAC 资源,但它的权限范围更广泛,可以用于定义全局集群范围内的资源权限。
    • ClusterRole 用于控制对集群级别的资源,如节点、命名空间、持久卷等的权限。
    • ClusterRole 定义了针对特定 API 组中的资源对象的操作权限。
  3. RoleBinding(角色绑定)
    • RoleBinding 是一个资源对象,用于将用户、服务账号或组与一个特定命名空间内的 Role 对象关联起来,从而赋予它们相应的权限。
    • RoleBinding 可以用于在命名空间级别定义权限。
  4. ClusterRoleBinding(集群角色绑定)
    • ClusterRoleBindingRoleBinding 类似,但是它将用户、服务账号或组与 ClusterRole 关联,从而赋予他们对整个集群范围的资源的权限。
    • ClusterRoleBinding 用于在集群级别定义权限。

—END

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

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

相关文章

浅谈AcrelEMS-CB商业建筑能源管理系统解决方案-安科瑞 蒋静

1概述 AcrelEMS-CB商业建筑能源管理系统,集电力监控、电能质量监测与治理、电气安全预警、能耗分析、照明控制、新能源使用、能源收费以及设备运维等功能于一体,通过一套系统对商业建筑的能源进行统一监控、统一运维和调度,系统可以通过WEB和…

OpenCV4(C++)——形态学(腐蚀、膨胀)

文章目录 一、腐蚀(erode)二、膨胀(dilate)三、形态学操作四、总结 一、腐蚀(erode) OpenCV 4提供了用于图像腐蚀的erode()函数。 void cv::erode(src, dst, kernel, anchor, iterations, borderType, bo…

自动曝光算法(第一讲)

序言 失业在家无事,想到以后换方向不做自动曝光了,但是自动曝光的工作经验也不能浪费了,准备写一个自动曝光的教学,留给想做自动曝光的小伙伴参考。笔者当时开发自动曝光没有按摄影的avtvevbvsv公式弄,而是按正确的增…

「Java开发指南」如何用MyEclipse搭建Spring MVC应用程序?(一)

本教程将指导开发者如何生成一个可运行的Spring MVC客户应用程序,该应用程序实现域模型的CRUD应用程序模式。在本教程中,您将学习如何: 从数据库表的Scaffold到现有项目部署搭建的应用程序 使用Spring MVC搭建需要MyEclipse Spring或Bling授…

C++使用栈实现简易计算器(支持括号)

使用C实现&#xff0c;使用系统自带stac 支持括号处理支持小数计算支持表达式有效性检查支持多轮输入。 运行结果示例&#xff1a; 代码&#xff1a; #include <iostream> #include <stack> #include <string> using namespace std;//判断是否是数字字符 …

解决pycharm中,远程服务器上文件找不到的问题

一、问题描述 pycharm中&#xff0c;当我们连接到远程服务器上时。编译器中出现报错问题&#xff1a; cant open file /tmp/OV2IRamaar/test.py: [Errno 2] No such file or directory 第二节是原理解释&#xff0c;第三节是解决方法。 二、原理解释 实际上这是由于我们没有设置…

5.5 TCP报文段的首部格式

思维导图&#xff1a; 5.5 TCP报文段的首部格式 基本概念 TCP报文段&#xff1a;包含首部和数据两部分&#xff0c;首部至少20字节。作用&#xff1a;首部字段定义了TCP的功能和行为。长度&#xff1a;首部长度可变&#xff0c;基础首部20字节&#xff0c;可添加选项。 首部…

Openssl数据安全传输平台019:外联接口类的封装以及动态库的制作 - Bug未解决,感觉不是代码的问题

文章目录 1 外联接口1.1 接口类的封装1.2 共享内存与配置文件 2 json格式配置文件的定义2.1 共享内存中存储的节点结构2.2 服务器端配置文件2.3 客户端配置文件2.4 改进配置文件 3 共享内存类修改4 将接口打包成库(静态/动态)4.1 相关的指令4.1.1 静态库4.1.2 动态库 4.2 外联接…

【地理位置识别】IP归属地应用的特点

IP归属地应用是一类用于确定特定IP地址的地理位置信息&#xff08;通常是城市、地区或国家&#xff09;的工具和服务。以下是IP归属地应用的几个主要特点&#xff1a; 地理位置识别&#xff1a; IP归属地应用主要用于确定IP地址的地理位置。这可以帮助组织更好地了解其网站访问…

Physics2DPlugin3加载后会跳转gsap官网解决

因工作需要使用Physics2DPlugin3库&#xff0c;目标效果 加载他里面的在线js&#xff0c;使用效果正常&#xff0c;但是几秒会跳转官网&#xff0c;我们app内部、浏览器都会这样。 于是研究js代码&#xff0c;发现里面有setTimeout跳转。 删掉就好了 分享我改好的文件&#x…

全球地表动态水体产品(数据集V2.0)(2000-2020年/8天/250米)

摘要 全球地表动态水体产品(8天/250米)GSWED(Global Surface Water Extent Dataset)由中国科学院空天信息创新研究院湿地与环境遥感研究团队制作而成。本套数据集是基于MODIS数据构建了一套全球地表水体NDVI阈值时空参数集,在此基础上使用遥感大数据云平台进行研发的,使用G…

【Excel密码】四个方法,设置excel表格只读模式

Excel文件想要设置成只读模式&#xff0c;其实很简单&#xff0c;今天给大家分享四个excel设置只读模式的方法。 方法一&#xff1a;文件属性 右键点击文件&#xff0c;查看文件属性&#xff0c;在属性界面&#xff0c;勾选上只读属性就可以了。 方法二&#xff1a;始终以只读…

左移测试,如何确保安全合规还能实现高度自动化?

「云原生安全既是一种全新安全理念&#xff0c;也是实现云战略的前提。 基于蚂蚁集团内部多年实践&#xff0c;云原生PaaS平台SOFAStack发布完整的软件供应链安全产品及解决方案&#xff0c;包括静态代码扫描Pinpoint&#xff0c;软件成分分析SCA&#xff0c;交互式安全测试IA…

【密评】商用密码应用安全性评估从业人员考核题库(十七)

商用密码应用安全性评估从业人员考核题库&#xff08;十七&#xff09; 国密局给的参考题库5000道只是基础题&#xff0c;后续更新完5000还会继续更其他高质量题库&#xff0c;持续学习&#xff0c;共同进步。 4001 多项选择题 网络和通信安全层面的通信主体一般包括哪些&…

uni-app 微信小程序 搜索关键字后 结果中的关键字变色

如图&#xff1a;想实现搜索关键字&#xff0c;搜索到的内容中把包含的此字变为蓝色。 实现方式如下&#xff1a;此方式是uniapp开发运行到微信小程序的代码。 第一种方法&#xff1a;小程序自己实现 1.布局写法 *[HTML]: 没有使用花括号渲染,所以需要 $options.filters 来…

平面波向球面波的展开

平面波向球面波的展开是一个极其重要的话题 手稿放在文章的结尾处 勒让德展开 citation 1: 我们整理一下&#xff0c;对exp(x)做泰勒展开&#xff0c;得 citation 2: 我们先把精力集中到解决这个积分上去 反复利用分部积分 考虑到奇偶性问题 当且仅当时积分不为零现在做变换 …

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-远程桌面屏幕监控

红队专题 招募六边形战士队员[24]屏幕监控-(1)屏幕查看与控制技术的讲解图像压缩算法图像数据转换其他 [25]---屏幕监控(2)查看屏幕的实现添加 CScreen类获取图像声明变量stdafx.h 头文件处理发送函数 7.1 屏幕抓图显示创建对话框工程&#xff0c;拉入图片显示控件修改控件为位…

解析mfc100u.dll文件丢失的修复方法,快速解决mfc100u.dll问题

在计算机使用过程中&#xff0c;我们经常会遇到一些错误提示&#xff0c;其中最常见的就是“缺少某个文件”的错误。最近&#xff0c;我也遇到了一个这样的问题&#xff0c;那就是“mfc100u.dll丢失”。这个问题可能会导致某些应用程序无法正常运行&#xff0c;给我们带来困扰。…

精品Python空巢老人志愿服务平台慈善捐赠活动报名

《[含文档PPT源码等]精品基于Python的空巢老人志愿服务平台》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功&#xff01; 软件开发环境及开发工具&#xff1a; 开发语言&#xff1a;python 使用框架&#xff1a;Django 前端技术&#…

PicoDiagnostics (NVH设备软件)-电脑无法识别示波器(安装驱动)

有些用户第一次使用示波器时&#xff08;或者更换电脑使用示波器时&#xff09;&#xff0c;发现电脑识别不了示波器&#xff0c;出现此类问题&#xff0c;可以根据下述方法进行解决。 我们先来看看软件识别到示波器的状态&#xff1a; PS7版本的软件中&#xff0c;可以点击软件…