CKA认证 | Day8 K8s安全

第八章 Kubernetes安全

1、Kubernetes RBAC授权

Kubernetes 基于角色的访问控制(Role-Based Access Control, RBAC) 是一种强大的权限管理机制,用于控制用户、用户组、服务账户对 Kubernetes 集群资源的访问。通过 RBAC,可以细粒度地定义哪些用户或服务账户可以执行哪些操作,从而增强集群的安全性和可管理性。

1.1 Kubernetes 安全框架

K8S安全控制框架主要由下面3个阶段进行控制,每一个阶段都支持 插件方式,通过 API Server 配置来启用插件

  1. Authentication(鉴权),验证用户身份是否为可信任的

  2. Authorization(授权),判断用户是否有权限访问某个资源

  3. Admission Control(准入控制),是否有额外的校验能力做相关方面的验证

1.1.1 鉴权(Authentication)

K8s Apiserver提供三种客户端身份认证:

  • HTTPS 证书认证:基于CA证书签名的数字证书认证(kubeconfig),例如./kube/config
  • HTTP Token认证:通过一个Token来识别用户(serviceaccount),例如加入集群、Dashboard的Token
  • HTTP Base认证:用户名+密码的方式认证(1.19版本弃用)

 

1.1.2 授权(Authorization)

RBAC(Role-Based Access Control,基于角色的访问控制):负责完成授权(Authorization)工作。

RBAC根据API请求属性,决定允许还是拒绝。

比较常见的授权维度:

  • user:用户名
  • group:用户分组
  • 资源,例如pod、deployment
  • 资源操作方法:get,list,create,update,patch,watch,delete
  • 命名空间
  • API组

 

1.1.3 准入控制(Admission Control)

Adminssion Control实际上是一个准入控制器插件列表,发送到API Server的请求都需要经过这个列表中的每个准入控 制器插件的检查,检查不通过,则拒绝请求。

  • 启用一个准入控制器:

kube-apiserver --enable-admission-plugins=NamespaceLifecycle,LimitRanger ...

  • 关闭一个准入控制器:

kube-apiserver --disable-admission-plugins=PodNodeSelector,AlwaysDeny ...

  • 查看默认启用:

kubectl exec kube-apiserver-k8s-master -n kube-system -- kube-apiserver -h | grep enable-admission-plugins

补充:方便用于可以自定义、扩展访问时的检查控制功能;对k8s功能做一个解耦

## 查看准入控制器
[root@k8s-master-1-71 ~]# vi /etc/kubernetes/manifests/kube-apiserver.yaml

 

1.2 基于角色的权限访问控制:RBAC

RBAC(Role-Based Access Control,基于角色的访问控制), 是K8s默认授权策略,并且是动态配置策略(修改即时生效)

主体(subject)

  • User:用户
  • Group:用户组
  • ServiceAccount:服务账号

角色

  • Role:授权特定命名空间的访问权限
  • ClusterRole:授权所有命名空间的访问权限

角色绑定

  • RoleBinding:将角色绑定到主体(即subject)
  • ClusterRoleBinding:将集群角色绑定到主体

注:RoleBinding在指定命名空间中执行授权,ClusterRoleBinding在集群范围执行授权。

RBAC 的工作原理
定义角色:

  • 使用 Role 或 ClusterRole 定义权限规则。
  • 例如,定义一个 Role 允许用户查看和列出 Pod。

绑定角色:

  • 使用 RoleBinding 将 Role 绑定到特定用户、用户组或服务账户。
  • 例如,将 pod-reader 角色绑定到用户 jane,使其在 default 命名空间中拥有对 Pod 的读取权限。

权限验证:

  • 当用户尝试执行操作时,Kubernetes 会检查相关的 RoleBinding 和 ClusterRoleBinding。
  • 根据绑定的角色和规则,决定是否允许该操作。


1)角色相关命令:

① role角色:

  • 创建role:kubectl create role <role-name> --verb=<操作方法> --resource=<资源> [-n namespace]

例如:创建名称为 “pod-reader” 的 Role 对象,允许用户对 Pods 执行 get、watch 和 list 操作

kubectl create role pod-reader --verb=get --verb=list --verb=watch --resource=pods
  • 查看role:kubectl get role [-n namespace]
  • 删除role:kubectl delete role <role-name> [-n namespace]

② clusterrole角色:

  • 创建clusterrole:kubectl create clusterrole <clusterrole-name> --verb=<操作方法> --resource=<资源>

例如:创建名称为 “pod-reader” 的 ClusterRole 对象,允许用户对 Pods 对象执行 get、 watch 和 list 操作

kubectl create clusterrole pod-reader --verb=get,list,watch --r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小安运维日记

Hey~ 感谢您的充电支持!!

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

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

打赏作者

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

抵扣说明:

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

余额充值