RBAC角色访问控制

参考: https://www.toutiao.com/i6942467217019666952/?wid=1643459986078

user(用户)

user不能直接创建


ServiceAccount(服务账户)

参考: https://kubernetes.io/zh/docs/reference/access-authn-authz/authentication/#service-account-tokens

  • ServiceAccount用的Secret类型kubernetes.io/service-account-token
  • ServiceAccount创建完成,其对应的Secret信息由kube-controller-manager更新
  • ServiceAccount可以简写为sa
    在这里插入图片描述

创建ServiceAccount(服务账户)

参考: https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#一些命令行工具

https://blog.youkuaiyun.com/wangmiaoyan/article/details/102551390

https://www.cnblogs.com/zhaobowen/p/13562487.html#一生成账号

RBAC认为权限授权实际上是WhoWhat、How的问题。在RBAC模型中,whowhathow构成了访问权限三元组,也就是"Who对What(Which)进行How的操作"。

  • Who(谁):权限的拥有者或主体,例如Principal、User、Group、Role、Actor等。

  • What(对什么资源):权限针对的对象或资源,例如Resource、Class。

  • How(以什么方式):具体的权限,例如Privilege,包括正向授权与负向授权。

  • Operators(做什么动作):操作,表明对What进行How的操作,即Privilege+Resource的组合。

  • Role:角色,代表一定数量的权限的集合。它是权限分配的单位与载体,旨在隔离User与Privilege的逻辑关系。

  • Group:用户组,同样是权限分配的单位与载体。权限不是直接分配给特定的用户,而是分配给组。组可以包含其他组(以实现权限的继承),也可以包含用户,组内用户会继承组的权限。User与Group之间存在多对多的关系,且Group可以层次化,以满足不同层级的权限控制要求。

# 在命名空间app-team1中创建服务账户cicd-token
kubectl create sa cicd-token -n app-team1

# 查看服务账户是否创建
kubectl get sa cicd-token -n app-team1 

# 查看服务账户详情
kubectl describe sa cicd-token -n app-team1 

删除ServiceAccount(服务账户)

# 查看命名空间app-team1下的所有用户
kubectl get sa -n app-team1 

# 命名空间app-team1下的cicd-token用户
kubectl delete sa cicd-token -n app-team1 

role(角色–管理指定资源的用户)

对哪个指定的资源(作用域是命名空间)执行哪些权限,不能添加拒绝权限;
创建role作用域只限于这个指定的资源对象.

例如:

  • 创建的服务账户只能操作指定的namespace
  • 创建的服务账户只能操作指定的pod
  • 创建的服务账户只能操作指定的deployment
  • 等等----可以精准的授权

创建role(角色)

参考: https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#kubectl-create-role

# 创建名称为 "pod-reader" 的 Role 对象,允许用户对 Pods 执行 get、watch 和 list 操作
kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods

创建RoleBinding(绑定角色)

https://kubernetes.io/zh/docs/reference/access-authn-authz/rbac/#rolebinding-and-clusterrolebinding
将服务账户绑定到role(角色)(要指定命名空间),让服务账户拥有role(角色)的权限。

也将服务账户绑定到clusterrole,(权限作用域只限于服务账户的命名空间),一般用来配置命名空间管理员权限;

角色绑定(Role Binding)是将角色中定义的权限赋予一个或者一组用户。一个 RoleBinding 可以引用同一的名字空间中的任何 Role。

# 将集群角色绑定到服务账户
## {binding_NAME}=用户名-集群角色名-binding
kubectl create rolebinding ${binding_NAME} -- clusterrole=${集群角色名} --serviceaccount=${命名空间名}:${用户名} -n ${命名空间名}

# 在命名空间app-team1中,将ClusterRole(集群角色)deployment-clusterrole绑定到服务账户cicd-token
kubectl create rolebinding cicd-token-deployment-clusterrole-binding -- clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1

删除RoleBinding

# 查看命名空间app-team1下有哪些rolebinding
kubectl get rolebinding -n app-team1

# 删除命名空间app-team1下名为cicd-token-deployment-clusterrole-binding的rolebinding
kubectl delete rolebinding cicd-token-deployment-clusterrole-binding -n app-team1

ClusterRole(集群角色)

ClusterRole的作用域是个整个集群下.

例如:

  • 创建的服务账户只能查看该集群的信息
  • 创建的服务账户可以修改该集群的信息
  • 等等----可以非常精准的授权

创建ClusterRole(集群角色)

ClusterRole 有若干用法。你可以用它来:

  • 定义对某命名空间域对象的访问权限,并将在各个命名空间内完成授权;
  • 为命名空间作用域的对象设置访问权限,并跨所有命名空间执行授权;
  • 为集群作用域的资源定义访问权限。
# 创建ClusterRole(集群角色)deployment-clusterrole,权限限定为:只允许创建deployments,daemonsets,statefulsets
kubectl create clusterrole deployment-clusterrole --verb=create --
resource=deployments,daemonsets,statefulsets

创建clusterrolebinding(绑定集群角色)

# 将服务账户绑定到集群角色
### {clusterrolebinding_NAME}=服务账户名-集群角色名-binding
kubectl create clusterrolebinding {binding_NAME} --clusterrole=集群角色名--serviceaccount=kube-system:用户名

# 将服务账户tiller绑定到集群管理员cluster-admin角色
kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller

删除clusterrolebinding

# 查看集群中有哪些clusterrolebinding
kubectl get clusterrolebinding |grep {clusterrolebinding_NAME}

# 删除指定clusterrolebinding
kubectl delete clusterrolebinding {clusterrolebinding_NAME}

查看RBAC权限常用命令

参考: https://kubernetes.io/zh/docs/reference/kubectl/overview/#%E8%B5%84%E6%BA%90%E7%B1%BB%E5%9E%8B

# 查看服务账户
kubectl get sa 用户名

# 查看服务账户详情
kubectl describe sa 用户名

# 查看集群角色
kubectl get ClusterRole 集群角色名

# 查看集群角色详情
kubectl describe ClusterRole 集群角色名

# 查看role
kubectl get role 角色名

# 查看role详情
kubectl describe role 角色名

# 查看rolebindings
kubectl get rolebinding 绑定名

# 查看rolebindings详情
kubectl describe rolebinding 绑定名

# 删除rolebindings
kubectl delete rolebinding 绑定名

测试服务账户权限

# 测试服务账户权限
kubectl --as=system:serviceaccount:app-team1:cicd-token get pods -n app-team1

CKA考试RBAC授权题

在这里插入图片描述

# 切换到名为k8s的集群
kubectl config use-context k8s

# 创建ClusterRole(集群角色)deployment-clusterrole,权限限定为:只允许创建deployments,daemonsets,statefulsets
kubectl create clusterrole deployment-clusterrole --verb=create -- resource=deployments,statefulsets,daemonsets

# 在命名空间app-team1中创建服务账户cicd-token
kubectl create serviceaccount cicd-token -n app-team1

# 在命名空间app-team1中,将ClusterRole(集群角色)deployment-clusterrole绑定到服务账户cicd-token
kubectl create rolebinding cicd-token-deployment-clusterrole-binding -- clusterrole=deployment-clusterrole --serviceaccount=app-team1:cicd-token -n app-team1
## 将集群角色绑定到服务账户
## {binding_NAME}=用户名-集群角色名-binding
kubectl create rolebinding ${binding_NAME} -- clusterrole=${集群角色名} --serviceaccount=${命名空间名}:${用户名} -n ${命名空间名}

# 测试服务账户权限
kubectl --as=system:serviceaccount:app-team1:cicd-token get pods -n app-team1

# 查看服务账户详情
kubectl describe sa cicd-token -n app-team1 

# 查看集群角色详情
kubectl describe clusterrole deployment-clusterrole

# 查看服务账户绑定成功,验证rolebinding资源
kubectl describe rolebinding cicd-token-deployment-clusterrole-binding -n app-team1
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

教Linux的李老师

赞赏是第一生产力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值