身份分發(fā)對現(xiàn)代API安全至關(guān)重要

服務(wù)必須接收足夠的信息,以便在網(wǎng)格內(nèi)實(shí)施適當(dāng)?shù)陌踩鉀Q方案。這以身份數(shù)據(jù)的形式出現(xiàn),以執(zhí)行授權(quán)決策。有了這些數(shù)據(jù),服務(wù)就可以知道誰在請求什么,以及代表誰提出請求。然而,這開啟了身份分發(fā)試圖解決的一系列新問題。

本文來自微信公眾號“開源云中文社區(qū)”。

在當(dāng)今的API背后,通常有許多服務(wù)處理一個請求。單一應(yīng)用程序直接在互聯(lián)網(wǎng)上公開并負(fù)責(zé)處理整個API請求的日子已經(jīng)一去不復(fù)返了。現(xiàn)在,這個過程通常更加復(fù)雜——請求通過負(fù)載均衡器到達(dá)API網(wǎng)關(guān),然后被轉(zhuǎn)發(fā)到負(fù)責(zé)具體端點(diǎn)的服務(wù)。為了處理請求,該服務(wù)通常會調(diào)用其他數(shù)據(jù)源或服務(wù),而這些數(shù)據(jù)源和服務(wù)可能會調(diào)用更多的服務(wù)等。

正如你所看到的,許多通信發(fā)生在現(xiàn)代的軟件服務(wù)網(wǎng)格中。但為了遵守零信任標(biāo)準(zhǔn),公司必須妥善確保所有這些請求的通信安全。因?yàn)樵谶@個基于云的服務(wù)和不斷增加的漏洞的新時代,僅在外圍實(shí)施安全策略已經(jīng)不夠了。

服務(wù)必須接收足夠的信息,以便在網(wǎng)格內(nèi)實(shí)施適當(dāng)?shù)陌踩鉀Q方案。這以身份數(shù)據(jù)的形式出現(xiàn),以執(zhí)行授權(quán)決策。有了這些數(shù)據(jù),服務(wù)就可以知道誰在請求什么,以及代表誰提出請求。然而,這開啟了身份分發(fā)試圖解決的一系列新問題。

什么是身份分發(fā)?

身份分發(fā)有助于確保在由API組成的復(fù)雜服務(wù)網(wǎng)格中,每一方都安全地處理請求并執(zhí)行明智的授權(quán)決策。它使身份數(shù)據(jù)能夠連續(xù)驗(yàn)證,而不僅僅是在外圍。

然而,身份必須安全地分布在所有系統(tǒng)組件之間。此外,不建議基于請求標(biāo)頭或正文中設(shè)置的純值執(zhí)行授權(quán)。相反,簽名的令牌或證書應(yīng)用于此任務(wù),因?yàn)樗鼈兲峁┝蓑?yàn)證數(shù)據(jù)真實(shí)性的方法。

不僅僅是驗(yàn)證用戶

當(dāng)考慮請求中的身份信息時,人們會立即想到發(fā)起請求的經(jīng)過身份驗(yàn)證的用戶。然而,身份分發(fā)不僅僅關(guān)乎用戶。接收請求的服務(wù)應(yīng)驗(yàn)證請求的來源。它應(yīng)該驗(yàn)證最初發(fā)送請求的外部應(yīng)用程序,并使用調(diào)用者的允許列表。服務(wù)還應(yīng)該能夠通過限制各方之間不必要通信的機(jī)制來驗(yàn)證直接內(nèi)部調(diào)用方,例如API網(wǎng)關(guān)或轉(zhuǎn)發(fā)請求的另一個服務(wù)。

緩解API安全風(fēng)險

在分發(fā)用戶身份時,首先想到的可能是一個簡單的解決方案:在外圍獲取用戶的憑據(jù)(如會話ID或訪問令牌),并將其傳遞給所有其他服務(wù)。

然而,這種解決方案引入了兩個問題。首先,它打破了最低特權(quán)原則。假設(shè)你將原始憑證傳遞給所有服務(wù)。在這種情況下,現(xiàn)在意味著處理請求的每個服務(wù)都具有原始調(diào)用者(前端應(yīng)用程序)擁有的所有權(quán)限。如果組織內(nèi)部有一個流氓行為者,這可能會造成安全漏洞。如果某個服務(wù)將特權(quán)令牌發(fā)送給外部服務(wù),也可能會造成漏洞。

第二個問題是原始憑證可能包含有關(guān)實(shí)體(例如用戶)的重要信息。其中一些信息可能是敏感的,不應(yīng)與各方共享,特別是當(dāng)單個請求跨越組織邊界時。

身份分發(fā)是一個組織問題

身份分發(fā)的安全益處取決于所使用的技術(shù)選擇和實(shí)現(xiàn)。最終,這都是關(guān)于令牌或證書的傳遞,并根據(jù)既定算法進(jìn)行驗(yàn)證。授權(quán)決策是使用軟件工具做出的,如授權(quán)管理系統(tǒng)或驗(yàn)證令牌的代碼。盡管如此,身份分配問題絕不是純粹的技術(shù)問題,而是一個組織問題。

組織應(yīng)該花時間來決定哪些服務(wù)應(yīng)該獲得哪些身份數(shù)據(jù)來正確處理授權(quán)決策。你必須知道用戶的哪些信息可以安全地跨越組織邊界。這將決定數(shù)據(jù)在令牌中的顯示方式,以及何時交換令牌。例如,某些服務(wù)需要用戶的社會安全號碼來正確授權(quán)請求,因此令牌將包含該號碼作為聲明。然而,這是一條敏感的信息,任何不需要它的服務(wù)都應(yīng)該在沒有此聲明的情況下接收令牌。

一方面,需要驗(yàn)證哪些用戶或客戶端信息可以安全地與哪些服務(wù)共享。另一方面,需要具體確定這些服務(wù)需要哪些信息來執(zhí)行完全知情的授權(quán)決策。

身份分發(fā)技術(shù)

不同的技術(shù)可以幫助正確實(shí)現(xiàn)身份分發(fā)。一旦知道哪些信息應(yīng)該與憑證一起傳遞,哪些方應(yīng)該接收這些信息,就可以考慮以下解決方案來在服務(wù)網(wǎng)格中充分分配身份。

確保所有流量安全

如今,傳輸層安全(TLS)在互聯(lián)網(wǎng)上幾乎無處不在。當(dāng)從應(yīng)用程序向API發(fā)送包含憑據(jù)(令牌或會話)的請求時,這是一種很好的方法,也是必須的。然而,在周界終止TLS仍然很常見。負(fù)載均衡器或API網(wǎng)關(guān)通常會接收到加密請求,但隨后會通過普通HTTP連接不加密地轉(zhuǎn)發(fā)該請求。這不是最佳實(shí)踐——TLS應(yīng)該端到端使用,甚至在網(wǎng)格中的服務(wù)之間使用。這允許你的服務(wù)控制其他服務(wù)的調(diào)用,幫助鎖定基礎(chǔ)設(shè)施。

鎖定基礎(chǔ)設(shè)施

通過在網(wǎng)格中的所有服務(wù)之間使用加密連接,可以引入對通信的控制。通過相互TLS(mTLS)和SPIFFE或Kubernetes入口設(shè)置等框架,你可以確保服務(wù)僅由特定服務(wù)調(diào)用。這甚至可以取代傳統(tǒng)使用的其他形式的憑證。例如,服務(wù)可以使用mTLS而不是硬編碼密碼對數(shù)據(jù)庫進(jìn)行身份驗(yàn)證。mTLS還可以保護(hù)位于不同集群或數(shù)據(jù)中心的服務(wù)之間的流量。這種保護(hù)并不能取代業(yè)務(wù)級別的授權(quán),但在創(chuàng)建安全的服務(wù)網(wǎng)格方面發(fā)揮著重要作用。

使用完善的標(biāo)準(zhǔn)

服務(wù)需要一種安全可靠地獲取身份數(shù)據(jù)以做出授權(quán)決策的方法。這些數(shù)據(jù)可以以多種形式提供,但建議使用既定標(biāo)準(zhǔn)。OAuth和JSON Web令牌(JWT)是非常適合此目的的久經(jīng)考驗(yàn)的標(biāo)準(zhǔn)示例。公司應(yīng)確保發(fā)行符合OAuth流和安全最佳實(shí)踐的代幣,而不是開發(fā)定制解決方案。如果按照當(dāng)前的最佳實(shí)踐使用,JWT在服務(wù)之間分發(fā)身份數(shù)據(jù)是非??煽康摹?/p>

基于聲明的授權(quán)

OWASP在其API安全漏洞排名中,將破壞的授權(quán)列為第一大API漏洞。這突出了身份分發(fā)對于向正確的服務(wù)提供正確的身份數(shù)據(jù),以便他們能夠執(zhí)行正確的授權(quán)決策是多么重要。服務(wù)應(yīng)該使用基于聲明的授權(quán),而不是依賴API鍵或范圍,因?yàn)樗鼮閺?fù)雜的授權(quán)提供了最佳解決方案。使用聲明允許服務(wù)輕松地將授權(quán)外部化到權(quán)利管理系統(tǒng),如開放策略代理(OPA)。

不透明令牌作為隱私增強(qiáng)

為了更好地保護(hù)訪問令牌中的身份數(shù)據(jù),建議使用不透明令牌。與JWT不同,不透明令牌不會向前端應(yīng)用程序或竊聽者透露任何信息。當(dāng)向第三方應(yīng)用程序頒發(fā)令牌時,這一點(diǎn)尤為重要,因?yàn)榻M織無法控制令牌的使用情況。然而,使用JWT更方便服務(wù)。作為自包含的令牌,JWT不需要接收者不斷地查詢中央服務(wù)以檢查令牌的有效性或讀取相關(guān)的身份信息。為了充分利用這兩者的優(yōu)點(diǎn),公司應(yīng)該考慮實(shí)施Phantom Token方法,在這種方法中,不透明的令牌在基礎(chǔ)設(shè)施之外使用,而相關(guān)的JWT分布在服務(wù)網(wǎng)格內(nèi)。

使用令牌共享技術(shù)

在處理單個請求時調(diào)用其他服務(wù)的服務(wù)應(yīng)確保在鏈中傳遞正確的令牌。在某些情況下,共享原始服務(wù)接收的相同令牌是可以接受的。當(dāng)服務(wù)在概念上接近時,這可能是有意義的。但對于其他服務(wù),原始服務(wù)應(yīng)該發(fā)送包含盡可能少的細(xì)節(jié)的令牌。它應(yīng)該有足夠的細(xì)節(jié)來執(zhí)行授權(quán)決策,并遵守最小特權(quán)原則。這可以通過以下令牌共享技術(shù)實(shí)現(xiàn):

——嵌入令牌,以便原始令牌包含信息較少的其他令牌。

——交換令牌,其中原始服務(wù)將令牌交換為僅包含相關(guān)信息的另一個令牌。

結(jié)論

API需要身份數(shù)據(jù)來執(zhí)行授權(quán)決策。在現(xiàn)代服務(wù)網(wǎng)格中,必須分發(fā)這些數(shù)據(jù),以便參與請求處理的所有各方都能保持相同的安全級別。實(shí)施適當(dāng)?shù)纳矸莘职l(fā)技術(shù)對于保持API和用戶數(shù)據(jù)安全至關(guān)重要。請記住,在設(shè)計身份分發(fā)時,應(yīng)考慮到只有在必要時,才能在服務(wù)之間共享數(shù)據(jù)和憑據(jù)。

THEEND

最新評論(評論僅代表用戶觀點(diǎn))

更多
暫無評論