十七、k8s安全框架

一、kubernetes安全框架

二、认证、授权、准入控制

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

四、案例:为指定用户授权访问不同命名空间权限

4.1、用k8s CA签发客户端证书

4.2、生成kubeconfig授权文件

4.3、创建RBAC权限策略

4.4、指定kubeconfig文件测试:

4.5、添加service权限,修改此配置

4.6、添加apps和deployment权限

4.7、官方示例参考

4.8、查看所有API接口

4.9、不添加kubeconfig文件直接执行kubectl命令

五、授权一个应用程序(pod)访问apiserver流程



一、kubernetes安全框架

k8s安全控制框架主要由下面三个阶段进行控制,每一个阶段都支持插件方式,通过api server配置来启用插件。

1、鉴权:Authentication

2、授权:Authorization

3、准入控制:Admission Control

客户端要想访问k8s集群api server,一般需要证书、token或用户名+密码;如果Pod访问,需要ServiceAccount。

二、认证、授权、准入控制

2.1 鉴权:Authentication

三种客户端身份认证:

a、HTTPS证书认证: 基于CA证书签名的数字证书认证

b、HTTP Token认证:通过一个Token来识别用户

c、HTTP Base认证:用户名+密码的方式认证

2.2、授权:Authorization

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

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

比较常见的授权维度:

a、user:用户名

b、group:用户分组

c、资源,如pod、deployment

d、资源操作方法:get, list, create, update, patch, watch, delete

e、命名空间

f、API组

2.3 准入控制:Admission Control

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

准入控制插件列表:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/

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

RBAC(Roke-Based Access Control,基于角色的访问控制),允许通过kubernetes API动态配置策略(立即生效)。

角色:

1、Role:授权特定命名空间的访问权限

2、ClusterRole:授权所有命名空间的访问权限

角色绑定:

1、RoleBinding:将角色绑定到主体(即subject)

2、ClusterRoleBinding:将集群角色绑定到主体

主体:

1、User: 用户

2、Group: 用户组

3、 ServiceAccount:服务账号

四、案例:为指定用户授权访问不同命名空间权限

示例:为qj用户授权default命名空间pod读取权限

4.1、用k8s CA签发客户端证书

CA指的是k8s的根证书。

kubeadmin部署,目录是:/etc/kubernetes/pki/ca.crt  和 ca.key

二进制部署,一般会放到一个单独的目录:TLS/kubernetes/ca.pem或者其他后缀 和 ca-key.pem

需要单独安装cfssl、 cfssl-certinfo、cfssljson等 命令

vi cert.sh

cat > ca-config.json << EOF

{

  "signing": {

    "default": {

  "expiry": "87600h"

  },

  "profiles": {

    "kubernetes": {

  "usages": [

    "signing",

"key encipherment",

"server auth",

"client auth"

  ],

  "expiry": "87600h"

}

  }

}

}

EOF

cat > qj-csr.json <<EOF

{

  "CN": "qj",

  "hosts": [],

  "key": {

    "algo": "rsa",

"size": 2048

  },

  "names": [

    {

  "C": "CN",

  "ST": ""BeiJing,

  "L": "BeiJing",

  "O": "k8s",

  "OU": "System"

}

  ]

}

EOF

cfssl gencert -ca=/etc/kubernetes/pki/ca.crt -ca-key=/etc/kubernetes/pki/ca.key -config=ca-config.json -profile=kubernetes qj-csr.json | cfssljson -bare qj

注:

CN字段代表用户名

O字段代表用户组名

# bash cert.sh

会生成qj-key.pem和qj.pem两个文件

4.2、生成kubeconfig授权文件

# vi  kubeconfig.sh

kubectl config set-cluster kubernetes \

  --certificate-authority=/etc/kubernetes/pki/ca.crt \

  --embed-certs=true \

  --server=https://192.168.2.153:6443 \

  --kubeconfig=qj.kubeconfig

#设置客户端认证

kubectl config set-credentials qj \

  --client-key=qj-key.pem \

  --client-certificate=qj.pem \

  --embed-certs=true \

  --kubeconfig=qj.kubeconfig

#设置默认上下文

kubectl config set-context kubernetes \

  --cluster=kubernetes \

  --user=qj \

  --kubeconfig=qj.kubeconfig

#设置当前使用配置

kubectl config use-context kubernetes --kubeconfig=qj.kubeconfig

# bash  kubeconfig.sh

会生成qj.kubeconfig文件。


4.3、创建RBAC权限策略

拷贝qj.kubeconfig文件到远程主机。

# scp qj.kubeconfig root@x.x.x.x:~

在远程主机执行kubectl命令:

# kubectl get pods  --kubeconfig=qj.kubeconfig   此时会报qj账户无法列出默认命名空间pods,即没有权限


创建RBAC权限策略

# vi rbac.yaml

apiVersion: rbac.authorization.k8s.io/v1

kind: Role

metadata:

namespace: default

name: pod-server

rule:

- apiGroups: [""] #API组

  resources: ["pods"] #资源

  verbs: ["get","watch","list"] #操作方法

---

apiVersion: rbac.authorization.k8s.io/v1

kind: RoleBinding

metadata:

name: read-pods

namespace: default

subjects:

- kind: User #主体

  name: qj #用户名

  apiGroup: rbac.authorization.k8s.io

roleRef:

kind: Role #绑定角色

name: pod-reader #绑定的角色名称

apiGroup: rbac.authorization.k8s.io

# kubectl apply -f rbac.yaml

4.4、# 指定kubeconfig文件测试:

# kubectl get pods --kubeconfig=./qj.kubeconfig

4.5、# 添加service权限,修改此配置:

# kubectl apply -f rbac.yaml

4.6、# 添加apps和deployment权限

# kubectl apply -f rbac.yaml

4.7、# 官方示例参考:

https://kubernetes.io/docs/reference/access-authn-authz/rbac/

4.8、查看所有API接口:

# kubectl api-resources   《红框重表示API组,只有v1的表示为核心组,留空 。如apps/v1表示组为apps组》

4.9、不添加kubeconfig文件直接执行kubectl命令

放在家目录如:/root

# mkdir /root/.kube

# mv qj.kubeconfig /root/.kube/config

# kubectl get pod,svc

五、授权一个应用程序(pod)访问apiserver流程

1、创建一个serviceaccount

2、创建role规则

3、role绑定serviceaccount

subjects:

- king: ServiceAccount

name: nfs-client-provisioner


六、获取token

# kubectl get sa

#kubectl get secret

七、管理员权限组

获取权限组:


获取管理员权限组,默认的管理员权限组:

赋管理员权限,可以直接使用:

# kubectl create serviceaccount dashboard-admin -n kube-system

# kubectl create clusterrolebinding dashboard-admin --cluserrrole=cluster-admin --serviceaccount=kube-system:dashboard-admin

#kubectl describe secrets -n kube-system $(kubectl -n kube-system get secret |awk '/dashboard-admin/{print $1}')


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,919评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,567评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,316评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,294评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,318评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,245评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,120评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,964评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,376评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,592评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,764评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,460评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,070评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,697评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,846评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,819评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,665评论 2 354

推荐阅读更多精彩内容