kubernetes 安全控制認(rèn)證與授權(quán)

1. 概述

Kubernetes 對(duì)于訪問 API 來說提供了兩個(gè)步驟的安全措施:認(rèn)證和授權(quán)氧骤。認(rèn)證解決用戶是誰的問題,授權(quán)解決用戶能做什么的問題吃引。通過合理的權(quán)限管理筹陵,能夠保證系統(tǒng)的安全可靠刽锤。

Kubernetes集群的所有操作基本上都是通過kube-apiserver這個(gè)組件進(jìn)行的,它提供HTTP RESTful形式的API供集群內(nèi)外客戶端調(diào)用惶翻。需要注意的是:認(rèn)證授權(quán)過程只存在HTTPS形式的API中姑蓝。也就是說鹅心,如果客戶端使用HTTP連接到kube-apiserver吕粗,那么是不會(huì)進(jìn)行認(rèn)證授權(quán)的。所以說旭愧,可以這么設(shè)置颅筋,在集群內(nèi)部組件間通信使用HTTP,集群外部就使用HTTPS输枯,這樣既增加了安全性议泵,也不至于太復(fù)雜。

下圖是 API 訪問要經(jīng)過的三個(gè)步驟桃熄,前面兩個(gè)是認(rèn)證和授權(quán)先口,第三個(gè)是 Admission Control,它也能在一定程度上提高安全性瞳收,不過更多是資源管理方面的作用碉京。

整體結(jié)構(gòu).png

2. 整體結(jié)構(gòu)

安全控制認(rèn)證與授權(quán)功能主要由AuthN和AuthZ功能完成。AuthN負(fù)責(zé)用戶身份的認(rèn)證螟深,AuthZ負(fù)責(zé)根據(jù)用戶身份對(duì)其行為做權(quán)限控制谐宙。

2.1 AuthN 系統(tǒng)

2.1.1 簡(jiǎn)介

Kubernetes 的 AuthN 系統(tǒng)主要完成了以下工作:
根據(jù)配置驗(yàn)證用戶憑證,通常是 Bearer Token 或者 Basic Auth Password界弧。
解析用戶信息凡蜻,包括 Username,Groups垢箕,Uid 等划栓。這些信息將用于之后的 Authz 系統(tǒng)授權(quán)。

2.1.2 認(rèn)證模式

一般有以下幾種用戶身份認(rèn)證模式:

  • X509 Client Certs —— Client Certs 模式
    通過傳入 --client-ca-file 到 Apiserver 開啟条获。其中證書的 /CN (common name)表示用戶名茅姜,/O (organization)表示 Groups。
    Client Cert 模式通常用于某些受信任的組件訪問 Apiserver月匣,如 Kubernetes 各個(gè)組件訪問 Apiserver钻洒。

  • Static Token File —— 靜態(tài) Token 文件模式
    通過傳入 --token-auth-file 到 Apiserver 開啟。以下是其中一條記錄的模版锄开。HTTP 請(qǐng)求在 Header 中傳入 Authorization: Bearer Token 來認(rèn)證素标。


    image.png
  • Static Password File —— 靜態(tài) Password 文件模式
    通過傳入 --basic-auth-file 到 Apiserver 開啟。以下是其中一條記錄的模版萍悴。HTTP 請(qǐng)求在 Header 中傳入 Authorization:Basicbase64(user:password)來認(rèn)證头遭。


    image.png
  • Service Account Tokens
    Service Account Token 主要是用來給 Pod 提供訪問 Apiserver 的權(quán)限寓免。當(dāng) Pod 通過 Service Account 訪問 Apiserver 時(shí),用戶名為 system:serviceaccount: (NAMESPACE):(SERVICEACCOUNT)计维,并且屬于system: serviceaccounts和system: serviceaccounts:(NAMESPACE) 這兩個(gè) Group袜香。當(dāng)一個(gè) Pod 使用 InClusterConfig 創(chuàng)建 Client 訪問 Apiserver 時(shí),Client 會(huì)自動(dòng)載入 Service Account 的 Token鲫惶。

  • OIDC Token
    OIDC 是除了 WebHook 外 Kubernetes 提供的唯一一個(gè)動(dòng)態(tài)的 AuthN 方案蜈首。相比較于上面幾種方案的小打小鬧,OIDC 提供了標(biāo)準(zhǔn)的 AuthN 流程欠母,真正能夠作為 Kubernetes 系統(tǒng)用戶認(rèn)證的企業(yè)級(jí)解決方案欢策。

2.1.3 OpenID Connect Tokens 認(rèn)證

OpenID Connect 是一些由OAuth2提供商支持的OAuth2,特別是Azure Active Directory赏淌,Salesforce和Google踩寇。OAuth2的協(xié)議的主要擴(kuò)展是增加一個(gè)額外字段,返回了一個(gè)叫ID token的access token六水。這個(gè)token是被服務(wù)器簽名的JSON Web Token (JWT) 俺孙,具有眾所周知的字段,比如用戶的email掷贾。

為了識(shí)別用戶睛榄,驗(yàn)證使用來自O(shè)Auth2 token響應(yīng)的id_token (而不是 access_token)作為bearer token。token如何包含在請(qǐng)求中可以參考下圖:


認(rèn)證流程

使用OpenID認(rèn)證胯盯,API Server需要配置

  • --oidc-issuer-url懈费,如https://accounts.google.com
  • --oidc-client-id,如kubernetes
  • --oidc-username-claim博脑,如sub
  • --oidc-groups-claim憎乙,如groups
  • --oidc-ca-file,如/etc/kubernetes/ssl/kc-ca.pem

2.1.4 Webhook Token 認(rèn)證

Webhook Token 認(rèn)證方式可以讓用戶使用自己的認(rèn)證方式叉趣,用戶只需要按照約定的請(qǐng)求格式和應(yīng)答格式提供 HTTPS 服務(wù)泞边,當(dāng)用戶把 Bearer Token 放到請(qǐng)求的頭部,kubernetes 會(huì)把 token 發(fā)送給事先配置的地址進(jìn)行認(rèn)證疗杉,如果認(rèn)證結(jié)果成功阵谚,則認(rèn)為請(qǐng)求用戶合法。 這種方式下有三個(gè)參數(shù)可以配置:

  • –authentication-token-webhook-config-file :kubeconfig 文件說明如果訪問認(rèn)證服務(wù)器
  • –authentication-token-webhook-cache-ttl :認(rèn)證結(jié)果要緩存多久烟具,默認(rèn)是兩分鐘
  • --runtime-config=authentication.k8s.io/v1beta1=true梢什。

Webhook 的配置文件具體如下:


webhook請(qǐng)求端配置.png

Webhook Service 需要實(shí)現(xiàn) TokenReview 的接口:


webhook服務(wù)端配置.png

2.1.5 認(rèn)證代理

API Server需要配置

--requestheader-username-headers=X-Remote-User
--requestheader-group-headers=X-Remote-Group
--requestheader-extra-headers-prefix=X-Remote-Extra-
# 為了防止頭部欺騙,證書是必選項(xiàng)
--requestheader-client-ca-file
# 設(shè)置允許的CN列表朝聋∥宋纾可選。
--requestheader-allowed-names

2.1.6 Keystone Password 認(rèn)證

Keystone 是 openstack 提供的認(rèn)證和授權(quán)組件冀痕,這個(gè)方法對(duì)于已經(jīng)使用 openstack 來搭建 Iaas 平臺(tái)的公司比較適用荔睹,直接使用 keystone 可以保證 Iaas 和 Caas 平臺(tái)保持一致的用戶體系狸演。

需要API Server在啟動(dòng)時(shí)指定--experimental-keystone-url=<AuthURL>,而https時(shí)還需要設(shè)置--experimental-keystone-ca-file=SOMEFILE僻他。

2.1.7 匿名請(qǐng)求

如果請(qǐng)求沒有通過以上任何方式的認(rèn)證宵距,正常情況下應(yīng)該是直接返回 401 錯(cuò)誤。但是 kubernetes 還提供另外一種選擇吨拗,給沒有通過認(rèn)證的請(qǐng)求一個(gè)特殊的用戶名 system:anonymous 和組名 system:unauthenticated 满哪。

這樣的話,可以跟下面要講的授權(quán)結(jié)合起來丢胚,為匿名請(qǐng)求設(shè)置一些特殊的權(quán)限翩瓜,比如只能讀取當(dāng)前 namespace 的 pod 信息受扳,方便用戶訪問携龟。

如果使用AlwaysAllow以外的認(rèn)證模式,則匿名請(qǐng)求默認(rèn)開啟勘高,但可用--anonymous-auth=false禁止匿名請(qǐng)求峡蟋。

2.2 AuthZ

2.2.1 簡(jiǎn)介

Kubernetes 的 AuthZ 系統(tǒng)主要完成了以下幾件事情:
解析 HTTP 請(qǐng)求,獲取請(qǐng)求的各種屬性
根據(jù)屬性和 AuthN 獲取的用戶信息华望,依次匹配 AuthZ 規(guī)則蕊蝗,如果成功則通過,如果全部失敗則返回禁止訪問赖舟。
不同于 AuthN 方案蓬戚,AuthZ 方案在 Kubernetes 中和其 API 風(fēng)格有相當(dāng)大的關(guān)聯(lián)。由于嚴(yán)格遵循 RESTful 標(biāo)準(zhǔn)定義 API宾抓,Kubernetes 在提取 HTTP 請(qǐng)求屬性和定義 AuthZ 規(guī)則等方面有了極大的便利子漩。
下面是 Kubernetes 提供的兩種 AuthZ 方案 —— ABAC 和 RBAC。

2.2.2 ABAC

ABAC 全稱 Attribute Based Access Control(基于屬性的訪問控制)石洗。通過 --authorization-mode=ABAC 開啟幢泼,并且通過 --authorization-policy-file 指定策略文件。
以下是 ABAC 的一條記錄的例子:


image.png

可以發(fā)現(xiàn) ABAC 定義的字段基本上就是來自于上述的 Attributes 接口能夠獲取的信息讲衫。另外值得一提的是 Kubernetes 中的 ABAC 沒有動(dòng)態(tài)方案缕棵,修改策略文件后必須重啟 Apiserver。

2.2.3 RBAC

RBAC 全稱 Role Based Access Control(基于角色的訪問控制)涉兽, 通過 --authorization-mode=RBAC 開啟招驴。

目前和 RBAC 相關(guān)的 Resource 有以下 4 種:

Role
RoleBinding
ClusterRole
ClusterRoleBinding
image.png

Role 和 RoleBinding 是 NameSpace 下的資源,而 ClusterRole 和 ClusterRoleBinding 是系統(tǒng)級(jí)的資源枷畏。1.8 后 RBAC 所屬的資源已經(jīng)從 v1beta1 升級(jí)到 v1别厘。

2.2.3.1 Role

Role 的例子如下:


image.png

2.2.3.2 ClusterRole

ClusterRole 的例子如下:


image.png

ClusterRole 可以用來定義全局的 Resource。當(dāng)使用 ClusterRoleBinding 綁定時(shí)矿辽,表示能訪問所有 NameSpace 下的資源(如上述的 secrets)丹允,當(dāng)使用 RoleBinding 綁定時(shí)郭厌,表示只能訪問 RoleBinding 所屬的 NameSpace 下的資源。

2.2.3.3 RoleBinding

RoleBinding 的例子如下:


image.png

RoleBinding 負(fù)責(zé)綁定 Subjects 和某一個(gè) Role 或者 ClusterRole雕蔽。

2.2.3.4 ClusterRoleBinding

ClusterRoleBinding 的例子如下:


image.png

ClusterRoleBinding 能夠綁定 Subjects 和 ClusterRole折柠。

2.2.3.5 Subjects

Subjects 分為以下 3 種類型,Subjects 來自于 AuthN 的結(jié)果批狐。

User
Group
ServiceAccount

2.2.4 Authz 的Webhook配置

AuthZ 系統(tǒng)也可以通過 Webhook 實(shí)現(xiàn)扇售。不過比起 AuthN,AuthZ 系統(tǒng)通常沒有必要使用 Webhook嚣艇。
通過傳入

--authorization-webhook-config-file 

開啟承冰,另外還要添加

--runtime-config=authorization.k8s.io/v1beta1=true。

Webhook 的配置文件如下:


image.png

Webhook Service 需要實(shí)現(xiàn) SubjectAccessReview 的接口


image.png

3. 參考文章

link1
link2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末食零,一起剝皮案震驚了整個(gè)濱河市困乒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌贰谣,老刑警劉巖娜搂,帶你破解...
    沈念sama閱讀 218,525評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異吱抚,居然都是意外死亡捐康,警方通過查閱死者的電腦和手機(jī)忠聚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人敦锌,你說我怎么就攤上這事艇搀∫傅撸” “怎么了袋狞?”我有些...
    開封第一講書人閱讀 164,862評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長岸更。 經(jīng)常有香客問我鸵膏,道長,這世上最難降的妖魔是什么怎炊? 我笑而不...
    開封第一講書人閱讀 58,728評(píng)論 1 294
  • 正文 為了忘掉前任谭企,我火速辦了婚禮,結(jié)果婚禮上评肆,老公的妹妹穿的比我還像新娘债查。我一直安慰自己,他們只是感情好瓜挽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評(píng)論 6 392
  • 文/花漫 我一把揭開白布盹廷。 她就那樣靜靜地躺著,像睡著了一般久橙。 火紅的嫁衣襯著肌膚如雪俄占。 梳的紋絲不亂的頭發(fā)上管怠,一...
    開封第一講書人閱讀 51,590評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音缸榄,去河邊找鬼渤弛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛甚带,可吹牛的內(nèi)容都是我干的她肯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鹰贵,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼晴氨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起碉输,我...
    開封第一講書人閱讀 39,244評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤籽前,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后腊瑟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體聚假,經(jīng)...
    沈念sama閱讀 45,693評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡块蚌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評(píng)論 3 336
  • 正文 我和宋清朗相戀三年闰非,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片峭范。...
    茶點(diǎn)故事閱讀 40,001評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡财松,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出纱控,到底是詐尸還是另有隱情辆毡,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評(píng)論 5 346
  • 正文 年R本政府宣布甜害,位于F島的核電站舶掖,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏尔店。R本人自食惡果不足惜眨攘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望嚣州。 院中可真熱鬧鲫售,春花似錦、人聲如沸该肴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匀哄。三九已至秦效,卻和暖如春雏蛮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背阱州。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評(píng)論 1 270
  • 我被黑心中介騙來泰國打工底扳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人贡耽。 一個(gè)月前我還...
    沈念sama閱讀 48,191評(píng)論 3 370
  • 正文 我出身青樓衷模,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蒲赂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阱冶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評(píng)論 2 355

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