詳解使用Dex實(shí)現(xiàn)Kubernetes身份驗(yàn)證
?盡管Kubernetes是當(dāng)今使用最廣泛的開源容器編排平臺(tái),但它沒有創(chuàng)建和管理用戶的手段,至少?zèng)]有本地方式。然而,這并不是一個(gè)缺點(diǎn),因?yàn)樗梢詫?duì)接多種認(rèn)證服務(wù)。也正因此,Dex已成為Kubernetes可用的最佳身份驗(yàn)證解決方案之一。
在本文中,您將了解有關(guān) Dex for Kubernetes 的更多信息。我們將探討它可以解決的一些問題,通過使用第三方身份提供者進(jìn)行設(shè)置的高級(jí)概述,并考慮 Dex 未涵蓋的一些仍需要解決的問題。
什么是Dex?
Dex是 CoreOS, Inc. 發(fā)布的開源 CNCF 沙箱項(xiàng)目和身份驗(yàn)證服務(wù),它使用 OpenID Connect (OIDC) 將 Kubernetes 和其他與 OIDC 兼容的服務(wù)與無數(shù)身份提供者鏈接。換句話說,您可以將 Dex 視為kubectl Okta、GitHub、Google、Microsoft 和 Linkedin 等廣泛使用的身份提供商之間的中介。
Dex 作為 Kubernetes 和其他身份提供者之間的橋梁的能力允許管理員實(shí)施集中的用戶和組管理,這對(duì)于擁有多個(gè)團(tuán)隊(duì)的組織來說是必不可少的。
此外,正如您將在以下部分中了解的那樣,Dex 還可以加強(qiáng)安全性,并為 Kubernetes 帶來現(xiàn)代便捷的登錄體驗(yàn)。
Dex for Kubernetes 是如何工作的?
在深入了解 Dex 的工作原理之前,了解 Kubernetes 身份驗(yàn)證過程的工作原理非常重要。
與 Kubernetes 集群通信時(shí),kubectl?實(shí)際上是在與 API 服務(wù)器進(jìn)行交互。對(duì)于 API 服務(wù)器的每個(gè) HTTP 請(qǐng)求,身份驗(yàn)證插件都會(huì)查找用戶名、UID 和組。此類屬性可以由客戶端證書、身份驗(yàn)證代理或不記名令牌提供。這就是 Dex 的用武之地,充當(dāng)身份提供者和kubectl客戶端之間的橋梁。
由于 Dex 使用 OIDC,它可以使用所謂的“connectors”訪問存儲(chǔ)在第三方身份提供商中的用戶信息。這允許 Dex 以不記名令牌的形式將用戶信息轉(zhuǎn)發(fā)給 Kubernetes 以完成身份驗(yàn)證過程。所有這些對(duì)用戶都是透明的,因?yàn)樗峭ㄟ^單點(diǎn)登錄 (SSO) 流程完成的。
此外,正如我們將在下一節(jié)中討論的那樣,Dex 發(fā)送的 ID 令牌包含可用于用戶授權(quán)的信息。
上述過程是對(duì) Kubernetes 中身份驗(yàn)證工作方式的簡化。有關(guān)身份驗(yàn)證過程的更多詳細(xì)信息,請(qǐng)查看官方Kubernetes 文檔。
(https://kubernetes.io/docs/reference/access-authn-authz/authentication/)
Dex 解決了什么問題?
我們已經(jīng)提到,Dex 通過允許管理員使用組織的身份服務(wù)提供者來管理用戶和組來擴(kuò)展 Kubernetes 的功能。
然而,這并不是 Dex 解決的唯一問題。讓我們來看看它提供的其他一些好處。
01提高安全性
Dex 以多種方式提高了 Kubernetes 集群的安全性:
它提供了一種通過身份提供者將用戶登錄到集群的安全方式。
它消除了與為多個(gè)用戶使用相同的 kubeconfig 文件相關(guān)的安全風(fēng)險(xiǎn)。
它可以通過審核日志有效地檢測每個(gè)用戶執(zhí)行的操作。
它消除了無時(shí)間限制地創(chuàng)建不記名令牌的做法。
由于使用 RBAC 規(guī)則(零信任 RBAC 訪問)進(jìn)行有效的用戶和組管理,它有助于執(zhí)行身份驗(yàn)證和授權(quán)策略。
02靈活性
每個(gè)組織都有獨(dú)特的要求,而 Dex 足夠靈活,幾乎可以使用任何身份提供者。Okta、GitHub、GitLab、Microsoft、Linkedin 以及使用 OpenID Connect、OAuth 2.0、LDAP 和 SAML 2.0 協(xié)議等的服務(wù)可用的連接器就是證明。 更多Dex的信息請(qǐng)操作github地址。(https://github.com/dexidp/dex)
03提供集中認(rèn)證系統(tǒng)
實(shí)施 Dex 可能不是小型團(tuán)隊(duì)的最佳解決方案。但是,對(duì)于擁有數(shù)十名用戶分布在不同團(tuán)隊(duì)中的組織來說,Dex 是一個(gè)非常強(qiáng)大的工具。不必手動(dòng)創(chuàng)建、管理和分發(fā) kubeconfig 文件在節(jié)省時(shí)間和安全性方面都是一個(gè)巨大的優(yōu)勢(shì)。
此外,Dex 通過實(shí)現(xiàn)更精細(xì)的訪問控制來補(bǔ)充 Kubernetes。正如您將在下一節(jié)中看到的,Dex 控制 ID 令牌的發(fā)行,允許您指定其持續(xù)時(shí)間,這對(duì)于涉及臨時(shí)用戶訪問的情況非常方便。
此外,如有必要,您可以撤銷所有 ID 令牌。您甚至可以撤銷特定用戶或組的訪問權(quán)限。
總而言之,Dex 可以讓你為 Kubernetes 添加一個(gè)高效易用的集中式認(rèn)證系統(tǒng)。
使用 Dex 在 Kubernetes 上設(shè)置身份驗(yàn)證
正如我們已經(jīng)建立的那樣,Dex 充當(dāng)了一個(gè)門戶,它使用連接器將 Kubernetes 與多個(gè)身份提供者鏈接起來。
下圖提供了單點(diǎn)登錄過程的高級(jí)概述:
在身份驗(yàn)證過程中,將執(zhí)行以下步驟:
- 最終用戶發(fā)起登錄 Dex 的請(qǐng)求。這通常通過用戶啟動(dòng)單點(diǎn)登錄的 Web 應(yīng)用程序或門戶來完成。
- Dex 將此請(qǐng)求轉(zhuǎn)發(fā)給第三方身份提供商(例如,Active Directory、Google、GitHub 或 Okta)。為此,Dex 使用“connectors”,它具有一系列用于查詢其他用戶管理系統(tǒng)的協(xié)議。
- 多虧了這些“connectors”,Dex 可以從身份提供者那里訪問相關(guān)的用戶信息,例如姓名、電子郵件、唯一標(biāo)識(shí)符、組、訪問令牌等。在 Okta 的情況下,這些數(shù)據(jù)以 ID 令牌的形式出現(xiàn)。根據(jù)Dex 文檔,“ID 令牌是 JSON Web 令牌 (JWT)……作為證明最終用戶身份的 OAuth2 響應(yīng)的一部分返回?!?/li>
- 一旦 Dex 從第三方上游身份提供者那里獲得了用戶信息,它就會(huì)承擔(dān)身份提供者的角色,并頒發(fā)一個(gè)簽名的 ID 令牌發(fā)送給kubectl客戶端,客戶端將 JWT 轉(zhuǎn)發(fā)給 API 服務(wù)器。
- API 服務(wù)器使用 Kubernetes OpenID Connect 令牌身份驗(yàn)證器插件使用 ID 令牌。此時(shí)的結(jié)果可以是驗(yàn)證或拒絕用戶。如果用戶成功通過身份驗(yàn)證,API 服務(wù)器將使用 ID 令牌信息來應(yīng)用 RBAC 規(guī)則。
- 來自 API 服務(wù)器的響應(yīng)被發(fā)送回kubectl客戶端。
- 客戶端將kubectl結(jié)果顯示給最終用戶。
有關(guān)通過 LDAP 進(jìn)行身份驗(yàn)證的信息,請(qǐng)閱讀此處(https://dexidp.io/docs/connectors/ldap/?) 的文檔。有關(guān)如何通過 OpenID Connect 提供程序(例如 Okta)進(jìn)行身份驗(yàn)證的其他信息,請(qǐng)參閱此處(?https://dexidp.io/docs/connectors/oidc/?) 的文檔。
Dex 沒有解決哪些問題?
盡管 Dex 為尋求 Kubernetes 單點(diǎn)登錄體驗(yàn)的組織提供了出色的解決方案,但它也不能免除與某些身份提供者相關(guān)的限制。
正如Dex 文檔(https://github.com/dexidp/dex) 所示,并非所有身份提供者都支持刷新令牌請(qǐng)求。這意味著根據(jù)身份提供者的不同,用戶將不得不不時(shí)重復(fù)上一節(jié)中描述的身份驗(yàn)證過程。
此外,并非所有的 Dex 連接器都是穩(wěn)定的。Google、Bitbucket Cloud 和 OAuth 2.0 的連接器狀態(tài)仍為 alpha。
要記住的另一點(diǎn)是,Dex 僅用作身份驗(yàn)證解決方案。環(huán)境變量、kube-contexts 和成本的管理必須手動(dòng)完成或通過使用其他工具完成。
結(jié)論
在本文中,您了解到 Dex 是一種可行的解決方案,可以通過 Kubernetes 獲得更好的登錄體驗(yàn)。
作為 OIDC 提供商,Dex 允許您的組織利用正在使用的身份提供商連接到 Kubernetes。
這是一個(gè)巨大的優(yōu)勢(shì),因?yàn)闊o需添加額外的基礎(chǔ)設(shè)施,您的組織就可以為 Kubernetes 實(shí)施集中式身份管理,從而節(jié)省時(shí)間并有助于改進(jìn)安全策略。
原文: ?https://loft.sh/blog/dex-for-kubernetes-how-does-it-work/