十七洞焙、k8s安全框架

一蟆淀、kubernetes安全框架

二、認(rèn)證闽晦、授權(quán)扳碍、準(zhǔn)入控制

三提岔、基于角色的權(quán)限訪問控制:RBAC

四仙蛉、案例:為指定用戶授權(quán)訪問不同命名空間權(quán)限

4.1、用k8s CA簽發(fā)客戶端證書

4.2碱蒙、生成kubeconfig授權(quán)文件

4.3荠瘪、創(chuàng)建RBAC權(quán)限策略

4.4、指定kubeconfig文件測試:

4.5赛惩、添加service權(quán)限哀墓,修改此配置

4.6、添加apps和deployment權(quán)限

4.7喷兼、官方示例參考

4.8篮绰、查看所有API接口

4.9、不添加kubeconfig文件直接執(zhí)行kubectl命令

五季惯、授權(quán)一個應(yīng)用程序(pod)訪問apiserver流程



一吠各、kubernetes安全框架

k8s安全控制框架主要由下面三個階段進(jìn)行控制,每一個階段都支持插件方式勉抓,通過api?server配置來啟用插件贾漏。

1、鑒權(quán):Authentication

2藕筋、授權(quán):Authorization

3纵散、準(zhǔn)入控制:Admission?Control

客戶端要想訪問k8s集群api?server,一般需要證書、token或用戶名+密碼伍掀;如果Pod訪問掰茶,需要ServiceAccount。

二蜜笤、認(rèn)證符匾、授權(quán)、準(zhǔn)入控制

2.1?鑒權(quán):Authentication

三種客戶端身份認(rèn)證:

a瘩例、HTTPS證書認(rèn)證:?基于CA證書簽名的數(shù)字證書認(rèn)證

b啊胶、HTTP?Token認(rèn)證:通過一個Token來識別用戶

c、HTTP?Base認(rèn)證:用戶名+密碼的方式認(rèn)證

2.2垛贤、授權(quán):Authorization

RBAC(Role-BasedAccess Control焰坪,基于角色的訪問控制):負(fù)責(zé)完成授權(quán)(Authorization)工作。

RBAC根據(jù)API請求屬性聘惦,決定允許還是拒絕

比較常見的授權(quán)維度:

a某饰、user:用戶名

b、group:用戶分組

c善绎、資源黔漂,如pod、deployment

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

e炬守、命名空間

f、API組

2.3?準(zhǔn)入控制:Admission?Control

實際上是一個準(zhǔn)入控制插件列表剂跟,發(fā)送到API?Server的請求都需要經(jīng)過這個列表中的每個準(zhǔn)入控制器插件的檢查减途,檢查不通過,則拒絕請求曹洽。

準(zhǔn)入控制插件列表:https://kubernetes.io/zh-cn/docs/reference/command-line-tools-reference/kube-apiserver/

三鳍置、基于角色的權(quán)限訪問控制:RBAC

RBAC(Roke-Based?Access?Control,基于角色的訪問控制)送淆,允許通過kubernetes?API動態(tài)配置策略(立即生效)税产。

角色:

1、Role:授權(quán)特定命名空間的訪問權(quán)限

2偷崩、ClusterRole:授權(quán)所有命名空間的訪問權(quán)限

角色綁定:

1辟拷、RoleBinding:將角色綁定到主體(即subject)

2、ClusterRoleBinding:將集群角色綁定到主體

主體:

1环凿、User:?用戶

2梧兼、Group:?用戶組

3、?ServiceAccount:服務(wù)賬號

四智听、案例:為指定用戶授權(quán)訪問不同命名空間權(quán)限

示例:為qj用戶授權(quán)default命名空間pod讀取權(quán)限

4.1羽杰、用k8s?CA簽發(fā)客戶端證書

CA指的是k8s的根證書渡紫。

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

二進(jìn)制部署考赛,一般會放到一個單獨的目錄: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授權(quán)文件

#?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

#設(shè)置客戶端認(rèn)證

kubectl config set-credentials qj \

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

? --client-certificate=qj.pem \

? --embed-certs=true \

? --kubeconfig=qj.kubeconfig

#設(shè)置默認(rèn)上下文

kubectl config set-context kubernetes \

? --cluster=kubernetes \

? --user=qj \

? --kubeconfig=qj.kubeconfig

#設(shè)置當(dāng)前使用配置

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

#?bash? kubeconfig.sh

會生成qj.kubeconfig文件唧喉。


4.3、創(chuàng)建RBAC權(quán)限策略

拷貝qj.kubeconfig文件到遠(yuǎn)程主機(jī)忍抽。

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

在遠(yuǎn)程主機(jī)執(zhí)行kubectl命令:

# kubectl get pods? --kubeconfig=qj.kubeconfig? ?此時會報qj賬戶無法列出默認(rèn)命名空間pods八孝,即沒有權(quán)限


創(chuàng)建RBAC權(quán)限策略

# 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權(quán)限干跛,修改此配置:

#?kubectl apply -f?rbac.yaml

4.6、# 添加apps和deployment權(quán)限

#?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文件直接執(zhí)行kubectl命令

放在家目錄如:/root

# mkdir /root/.kube

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

# kubectl get pod,svc

五扬舒、授權(quán)一個應(yīng)用程序(pod)訪問apiserver流程

1阐肤、創(chuàng)建一個serviceaccount

2、創(chuàng)建role規(guī)則

3呼巴、role綁定serviceaccount

subjects:

- king: ServiceAccount

name: nfs-client-provisioner


六泽腮、獲取token

# kubectl get sa

#kubectl get secret

七、管理員權(quán)限組

獲取權(quán)限組:


獲取管理員權(quán)限組衣赶,默認(rèn)的管理員權(quán)限組:

賦管理員權(quán)限,可以直接使用:

# 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}')


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市厚满,隨后出現(xiàn)的幾起案子府瞄,更是在濱河造成了極大的恐慌,老刑警劉巖碘箍,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件遵馆,死亡現(xiàn)場離奇詭異,居然都是意外死亡丰榴,警方通過查閱死者的電腦和手機(jī)货邓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來四濒,“玉大人换况,你說我怎么就攤上這事职辨。” “怎么了戈二?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵舒裤,是天一觀的道長。 經(jīng)常有香客問我觉吭,道長腾供,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任鲜滩,我火速辦了婚禮伴鳖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘徙硅。我一直安慰自己黎侈,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布闷游。 她就那樣靜靜地躺著峻汉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪脐往。 梳的紋絲不亂的頭發(fā)上休吠,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機(jī)與錄音业簿,去河邊找鬼瘤礁。 笑死,一個胖子當(dāng)著我的面吹牛梅尤,可吹牛的內(nèi)容都是我干的柜思。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼巷燥,長吁一口氣:“原來是場噩夢啊……” “哼赡盘!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缰揪,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤陨享,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钝腺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抛姑,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年艳狐,在試婚紗的時候發(fā)現(xiàn)自己被綠了定硝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡毫目,死狀恐怖蔬啡,靈堂內(nèi)的尸體忽然破棺而出诲侮,到底是詐尸還是另有隱情,我是刑警寧澤星爪,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布浆西,位于F島的核電站,受9級特大地震影響顽腾,放射性物質(zhì)發(fā)生泄漏近零。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一抄肖、第九天 我趴在偏房一處隱蔽的房頂上張望久信。 院中可真熱鬧,春花似錦漓摩、人聲如沸裙士。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽腿椎。三九已至,卻和暖如春夭咬,著一層夾襖步出監(jiān)牢的瞬間啃炸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工卓舵, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留南用,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓掏湾,卻偏偏與公主長得像裹虫,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子融击,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容