0x00 前言
要想研究一个东西是不是存在安全问题,那么就要知道这个东西是什么,怎么用的,如何认证,认证方式等问题,了解这些才能更好的去解释学习安全问题。
0x01 访问控制
首先是k8s用户k8s用户分为service account以及user account。
1.service account
1.1 解释
service account是k8s为pod内部的进程访问apiserver创建的一种用户,在pod外部也可以通过sa的token和证书访问apiserver,在pod外部一般都是采用client证书的方式。
可以通过配置文件指定sa用户
1.2 操作
查看serviceAccounts
kubectl get serviceAccounts
kubectl -s 192.168.247.156:8080 svc
2. User Account
2.1 解释
User Account是给人用的,默认的用户是kubernetes-admin@kubernetes,也就是管理员用户
2.2 操作
切换用户:kubectl config user-context
3.认证、授权和准入
APIserver是访问以及管理资源对象的唯一入口,访问Apiservice需要经过三个流程
- 认证(Authenticator),身份鉴别
- 授权(Authorization)判断用户权限和动作是否对应
- 准入控制(Adminission Control)用于补充授权机制以实现更加精细的访问控制
0x02 认证管理
1.静态令牌文件认证
令牌信息保存与文本文件中,由“令牌、用户名、用户ID和所属的用户组”四个字段组成,用户组为可选字段
格式:token,user,uid,“group1,group2,group3”
如 3e6745.42c03381b4162e8e,jack,998,kubeadmin
2.x509
客户端证书认证:客户端在请求报文中携带x509证书的数字证书用于认证,x509就是一种证书格式
3.引导令牌
一种动态管理承载令牌进行身份认证的方式,用于简化K8s集群的节点认证过程。
4.静态密码文件
用户名和密码等令牌以明文格式存储的CSV格式文件,使用 --basic-auth-file 选项进行加载
5. 服务账户令牌
apiserver自动启动,service account 自动创建
6.OPENID连接令牌
OAuth2 认证风格
7.webhook令牌
接受带有令牌的post请求身份验证,这个在gitlab和Jenkins中比较常见
8.认证代理
可以通过http头部的指定字段,或者特定字段进行认证
9.keystone
借助外部的keystone服务器进行身份验证
10.匿名请求
将"system:anonymous"用户绑定到"cluster-admin"用户组