k8s kubernetes-admin用户权限解析

戴宗
• 阅读 902

k8s kubernetes-admin用户权限解析

本篇主要介绍一下 在k8s中 默认的 ~/.kube/config 中admin管理员权限得解析 ,看看为什么kubernetes-admin用户拥有所有权限

k8s   kubernetes-admin用户权限解析

1.k8s 默认 kubernetes-admin管理员用户

集群安装完成后 会有默认的配置文件在 原始目录在/etc/kubernetes/下面 一般会copy到 ~/.kube/config 下面 打开就可以看到里面有个 user:kubernetes-admin

下面来看看它的权限是有哪些

k8s   kubernetes-admin用户权限解析

2.查询clusterrolebindings

我们知道 k8s 中用户分为2种 一种是Normal Users 一种是Service Account , k8s不管理Users ,只要证书通过即可访问集群, 上面的kubernetes-admin就是属于 Users 一种 , 但是用户可以操作的权限是在 关联 rolebinding / clusterrolebinding , 所以 kubernetes-admin肯定也有绑定的角色, 下面来看看

kubectl get clusterrolebindings -A 

可以看到 cluster-admin 很像给 admin 的绑定权限

k8s   kubernetes-admin用户权限解析

详细查看 clusterrolebindings cluster-admin

[root@master1 .kube]# kubectl get clusterrolebindings cluster-admin -A -o yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  creationTimestamp: "2023-03-13T08:02:38Z"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
  name: cluster-admin
  resourceVersion: "148"
  uid: 1e950454-3849-4306-84a8-5e4a6ee59cbf
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin 
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: Group
  name: system:masters

k8s   kubernetes-admin用户权限解析

再看看 ClusterRole

kubectl get clusterrole cluster-admin -A -o yaml

k8s   kubernetes-admin用户权限解析

至此可以明白 在 Group 用户组 system:masters 下面的都有这个集群管理员权限

3.疑问 kubernetes-admin 和 system:masters组 怎么关联的

从上面可以知道 用户组 system:masters 下面的都有这个集群管理员权限 cluster-admin , 也可以猜测到kubernetes-admin 应该在这个组下面 , 但是哪里可以证明这个呢?

其实 组和用户的关系是在 证书里

X509客户端证书的一部分 Subject中O(organization)的值代表用户组,CN (common name)代表用户名, k8s可以据此认为user在哪个组中。

config 中 client-certificate-data 是 kubernetes-admin 的证书

k8s   kubernetes-admin用户权限解析

把证书base64 解密后 写入到 admin-temp-ca.crt 文件

cat <<EOF | base64 -d > admin-temp-ca.crt
> LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJWG5nNHhHT3FzSzR3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TXpBek1UTXdPREF5TWpOYUZ3MHlOREF6TVRJd09EQXlNalZhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXhHVVRUR2JCa0V4dkk5SnEKQUY5MlFrVnlIdHJXODdWeGc3cit4WlNnczJjblk0T3JlS1VNdU5SS01HbWlNcnU0cDduSGk1Z1prM1ZUOG4vMApSeW5QdHV3QUJ5dldBcnBJR2VIdk9ONWpVMTYvZ0o4NTNIcFVqa2dZMENkenc0R2JKY25jd3pKZjJFQ2wvelAxCml3VU5hcjNGM3F6bFhwMlNwOXhTQlgycGVkSmFuVzhVU2M4TGlWdmVTTE1mZCsrSDRmdVdIZzUyVXFRSitaL0wKbktaNnNJblhYdUhZY3ZYTTNkMnN5aFppUTBlUk4zWDl5U1JwSmE2ZHB1VThMRGgzYjJnOHBiUWFRZlpjQWFSVgo0V0haWlc5V1F4VkxBZXRZVlpQVloySzJHb3hrS1JRQzkrZGtCVEFIdmlCalJrQ3pGMjlQS3RFY2ZNNXIzMEFZCkxaaHhMd0lEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JTVUNUaWFxbm9RdFMySGdXUnFqaEZIaUhITQpWekFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBS2Q3S2lBSlRweWkvZjhSUTdpWnIxSlZFRFFZTG85NE5jdWMxCjVBRWZud3dtWW1ZaS9wb1BVR1Q0aWZpSGpmOFVHK3hTaDdhUUxjT0RaL1JQUFlTU3lPc2xVTXhDTlVYVUJUUWgKaFJhYUl2OTBCZmRBeS9lUEtrYnlDQTNYN0lQQzBEU2M3SjMzTVB2b3Z1MEM5NWtzUVZhajAvbm1zVGpDbzlidApZWk5iaFRIUDVoL3ljeG5TbEdIVnNZeW5EZ3F1M3BZbk9vSHBLZ1diNEw1NlhtVVNMUzQraFdVZno4ZmdtL2tDCmY0UHVyZnVjSEdKS1lPd04rOWZxOFhXQW5ZZ3NLdDdrbG5GNThoelhpcU55THd3L2pVeEFKRFN0bDdyeGVpU2QKTU9ZTW5LSG14TDlmbGZsU0hNSGVLOUR1Q2dCbHVUaEpQenpBcVZhYmVGTlhSTlB1U2c9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
> EOF
# 查询证书的内容
openssl x509  -in admin-temp-ca.crt -noout -text

k8s   kubernetes-admin用户权限解析

至此就把 组和 用户关联起来了, 也就理解了 kubernetes-admin 管理员的整个权限流程

4.扩展思考

通过上面可以理解了 只要在 system:masters组下面的用户 都具有管理员权限, 那么是不是我们自己也可以去创建一个用户然后 用 k8s 根证书 下发一个 Subject: O=system:masters ,CN=johnny-admin 的证书 ?

总结

本篇主要介绍了kubernetes-admin 管理员的权限流程 以及如何和 system:masters组进行匹配的

欢迎大家访问 个人博客 Johnny小屋
欢迎关注个人公众号

k8s   kubernetes-admin用户权限解析

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
Oracle数据库提权(dba权限执行系统命令)
0x01提权准备这里我们先创建一个低权限的用户testSQLconnsys/admin123@orclassysdba;已连接。SQLcreateusertestidentifiedbytest;然后查看一下权限SQLselectfrom
Stella981 Stella981
3年前
RabbitMQ常用命令记录
创建用户:(在RabbitMQ的sbin目录下执行)命令用户密码rabbitmqctladd_useradminadmin查看用户:(在RabbitMQ的sbin目录下执行)rabbitmqctl.batlist_users给admin用户管理员权限:(在RabbitM
Wesley13 Wesley13
3年前
MySQL.授权管理
查看权限:showgrantsfor'用户’@‘IP地址’  授权:grant权限on数据库.表to‘用户’@‘IP地址’取消权限:revoke权限on数据库.表from‘用户’@‘IP地址’常用权限:allprivileges除grant外的所有权限     select  仅查权限     select,i
Wesley13 Wesley13
3年前
mysql之grant权限说明
mysql中给一个用户授权如select,insert,update,delete等其中的一个或者多个权限,主要使用grant命令,格式为:给没有用户授权grant权限on数据库对象to'用户'@'主机IP'identifiedby'密码';给已经存在的用户授权grant权限on数据库对象to'用户'@'主机IP';
Wesley13 Wesley13
3年前
mysql用户
1\.学会能按着需求创建一个帐号2\.知道连接字符串是什么样3\.密码密码怎么恢复mysql用户权限介绍mysql用户管理 !(https://oscimg.oschina.net/oscnet/368d3c1e00a0a9515545c2962660a27a080.png)!(https://oscimg.oschin
Wesley13 Wesley13
3年前
Linux中的特殊权限
Linux中除了普通权限之外,还有三个特殊权限。      SUID::以文件的所属用户执行,而非执行文件的用户,多用于可执行文件,设置suid后,在权限位中,所属用户的最后一个权限为变为s,添加SUID权限可用“s”表示。    例如:passwdadam@ultraera ~$ which passwd/usr/b
Wesley13 Wesley13
3年前
oracle用户权限管理
oralce对权限管理比较严谨,普通用户之间也是默认不能互相访问的,需要互相授权1.查看当前数据库所有用户:select\fromall\_users;2.查看表所支持的权限:select\fromuser\_tab\_privs;3.把表的权限赋予用户:  grantselect,insert,updateon
Wesley13 Wesley13
3年前
@Secured()、 @PreAuthorize() 、 @RolesAllowed()
在Springsecurity的使用中,为了对方法进行权限控制,通常采用的三个注解,就是@Secured()、@PreAuthorize()、@RolesAllowed()。示例,修改用户密码必须是ADMIN权限,可以用三种方法:@Secured({"ROLE_ADMIN"})publicvoidchangePassword(
Easter79 Easter79
3年前
Subversion Server Edge用户权限设置简介
SubversionServerEdge用户权限可分为两种,一种为按用户权限,一种为按组权限设置1、按用户设置权限\codeLibrary:/\//对整个代码库\r    //所有用户有读的权限zsrw      //zs用户有读和写的权限2、按组设置权限\groups\ //需要先建立用户组g\_man
Wesley13 Wesley13
3年前
2.18 特殊权限set_uid 2.19 特殊权限set_gid 2.20 特殊权限stick_bit 2.21 软链接文件 2.22 硬连接文件
set\_uid权限说明:setuid权限针对二进制可执行文件,使文件在执行阶段具有文件所有者的权限。比如passwd这个命令就具有该权限。当普通用户执行passwd命令时,可以临时获得root权限,从而可以更改密码。作用:setuid的作用是保证普通用户临时拥有该命令所有者的身份。给一个文件设置成setuid,前提这个文件是一个二
Wesley13 Wesley13
3年前
C 实现基于角色的权限系统
本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId1068实例使用C实现基于角色的权限菜单管理系统,管理员可以添加用户,删除用户,添加分组,删除分组,添加角色,删除角色,为角色关联权限等功能,管理员用户自定义各个操作员的权限