這次在讀《kubernetes權威指南》時,看到第六章對身份認證和權限控制這部分的內容。自己平時雖然一直都在使用這兩個功能,但理解的最覺得很片段。這裏將原理整體介紹了(自己感覺的),在此做以摘抄。
我們都知道,Kubernetes 集羣中所有的資源訪問和變更都是通過 Kubernetes API Server 的 REST API 來實現的,所以集羣安全的關鍵點就在於如何識別並認證(Authentication)客戶端身份,以及隨後的訪問權限的授權(Authorization)這兩個關鍵的問題,本節對認證管理進行說明。
我們知道,Kubernetes 提供了三種級別的客戶端認證方式。
一般的服務程序所使用的用戶身份認證方式也應該在上述三種方式中。
(這是我一直想知道的,但卻總是忘了查)
這裏需要一個 CA 證書,我們知道 CA 是PKI 系統中通信雙方都信任的實體,被稱爲可信第三方(Trusted Third Party,TTP)。CA 所謂可信第三方的重要條件之一就是 CA 的行爲具有非否認性。作爲第三方而不是簡單的上級,就必須能讓信任者有追究自己責任的能力。CA 通過證書證實他人的公鑰信息,證書上有 CA 的簽名。用戶如果因爲信任證書而有了損失,則證書可以所謂有效的證據用於追究 CA 的法律責任。正式因爲 CA 承擔責任的承諾,所以 CA 也被稱爲可信第三方。CA 與用戶是相互獨立的實體,CA 作爲服務提供方,有可能應爲服務質量問題(例如:發佈的公鑰信息有錯誤)給用戶帶來損失。在證書中綁定了公鑰數據和相應私鑰擁有者的身份信息,並帶有 CA 的數字簽名;在證書中也包含了 CA 的名稱,以便依賴方找到 CA 的公鑰,驗證證書上的數字簽名。
這塊是自己理解的:
CA 是個身份信息鑑定機構,用戶(客戶端或者服務器)將自己的身份信息寫成公鑰交給 CA 去鑑定,如果 CA 鑑定身份屬實後會給用頒發一張證書,這張證書裏有:公鑰、私鑰擁有者的身份信息、數字簽名。數字簽名就相當於 CA 往證書的右下角蓋了一個紅戳,用於向其他用戶表明,這張證書上的公鑰信息和私鑰信息是我這個CA 鑑定的,我擔保這些信息是正確的、安全的、可信的,你們(其他用戶)如果因爲相信這張證書而被騙了,我這個 CA 負責賠償損失,並承擔法律責任。
CA 認證涉及諸多概念,比如根證書、自簽名證書、**、私鑰、加密算法及 HTTPS 協議等,本書大致講述 SSL 協議流程,有助於理解 CA 認證和 Kubernetes CA 認證的配置過程。
上述是雙向認證SSL協議的具體通信過程,這種情況要求服務器和客戶端都要有證書。單向認證SSL協議則不需要客戶端擁有CA證書。在上述的步驟中只需要將服務器驗證客戶端證書的步驟去掉,之後協商對稱密碼方案和對稱通話**時,服務器發送給客戶的密碼沒被加密即可。
HTTP Token 的認證是用一個很長的特殊編碼方式的並且難以被模仿的字符串----Token 來表明用戶身份的一種方式。在通常情況下,Token 是一個很複雜的字符串,比如我們用私鑰簽名一個字符串後的數據就可以被當做一個 Token。此外每一個Token 對應一個用戶名,存儲在 API-server 能訪問的一個文件中。當客戶端發起 API 調用請求時,需要再 HTTP Header 裏放入 Token,這樣一來,API-server 就能識別合法用戶與非法用戶了。(如果是 web服務端程序,Token應該是存放在瀏覽器的 Cookie中吧)。
我們都知道 HTTP 是無狀態的,瀏覽器和 Web服務器可以之前可以通過 Cookie 來進行身份識別。桌面應用程序(新浪桌面客戶端、命令行程序)一般不會使用 Cookie,那他們與 Web服務器之間是如何進行身份識別呢?這就用到了 HTTP Base 認證,這種認證方式是把「用戶名+冒號+密碼」用 BASE64 算法進行編碼後的字符串放在 request 中的 Header Authentication 域裏發送給服務端,服務端在收到後進行解碼,獲取用戶名及密碼,然後進行身份鑑權。