?譯者 | 胥磊
審校 | 孫淑娟
在過(guò)去的十年,企業(yè)網(wǎng)絡(luò)的入侵已經(jīng)變得司空見(jiàn)慣,大家對(duì)邊界安全的關(guān)注也在日漸淡化。但越來(lái)越多的公司發(fā)現(xiàn)僅僅通過(guò)“處于內(nèi)網(wǎng)”就信任訪問(wèn)的用戶和設(shè)備,明顯不足以應(yīng)對(duì)不斷變化的威脅。
與此同時(shí)將業(yè)務(wù)應(yīng)用程序重新平臺(tái)化為 SaaS 模式,加上移動(dòng)和分布式的網(wǎng)絡(luò)逐漸成為行業(yè)趨勢(shì),使得通過(guò)VPN接入公司內(nèi)網(wǎng)顯得老套和繁瑣。疫情的爆發(fā)圍繞上述趨勢(shì)掀起的一場(chǎng)風(fēng)暴,加速了安全的更新?lián)Q代。對(duì)于任何想要生存下來(lái)的公司來(lái)說(shuō),采用零信任架構(gòu)都不再有可商談的余地。
零信任意味著縱深防御
關(guān)于安全(含現(xiàn)實(shí)世界和數(shù)字世界)的最重要原則之一就是縱深防御。通過(guò)與單一控制措施來(lái)確保安全(就像大門(mén)上的一把鎖)進(jìn)行比較,單一措施的效果遠(yuǎn)不如采取一系列安全措施的組合能提供更多的安全性。
“門(mén)和鎖”的分類(lèi)
在這些確保安全的措施里面有不少可以采用零信任安全架構(gòu),都?xì)w屬于粗粒度和細(xì)粒度訪問(wèn)控制的范疇。在過(guò)去的十年,大部分安防行業(yè)的注意力都集中在粗粒度訪問(wèn)控制,但在最近兩年伴隨一波創(chuàng)新的浪潮已經(jīng)變?yōu)榧?xì)粒度訪問(wèn)控制了。
如上圖所示,縱深防御就是要求每一層上至少要有一個(gè)解決方案(甚至更多)。下面讓我們深入研究其中的幾個(gè)。
粗粒度訪問(wèn)控制
這類(lèi)訪問(wèn)控制雖然能知道正在訪問(wèn)受保護(hù)資源的用戶和設(shè)備,但是沒(méi)有這些用戶,相關(guān)操作以及操作資源的上下文。主要包括訪問(wèn)代理,單點(diǎn)登錄/身份服務(wù)提供商以及API網(wǎng)關(guān)/路由。
1. 訪問(wèn)代理
正如Google在推廣其BeyondCorp時(shí)所說(shuō)的那樣,訪問(wèn)代理是用戶訪問(wèn)企業(yè)應(yīng)用和資源的第一道防線。使用了用戶、設(shè)備、網(wǎng)絡(luò)、位置甚至日期/時(shí)間屬性的準(zhǔn)入控制策略,有助于確保只有通過(guò)該策略允許的請(qǐng)求才被路由到應(yīng)用程序。Zscaler 和 Cisco 等大型供應(yīng)商以此作為傳統(tǒng) VPN 的替代品。
2. 企業(yè)單點(diǎn)登錄/身份服務(wù)提供商
身份服務(wù)提供商(IDP)通常被用于用戶要登錄他們可以訪問(wèn)的應(yīng)用時(shí)進(jìn)行身份驗(yàn)證。雖然嚴(yán)格意義上來(lái)說(shuō)這不是授權(quán)層,但I(xiàn)DP可以根據(jù)一系列的屬性對(duì)用戶做出是否有權(quán)限訪問(wèn)某些應(yīng)用的粗粒度決策。例如Okta這樣的IDP可以將銷(xiāo)售部門(mén)的用戶配置到Salesforce,并強(qiáng)制只有銷(xiāo)售人員才可以訪問(wèn)此類(lèi)應(yīng)用。IDP 對(duì)于下游訪問(wèn)控制也是至關(guān)重要的,因?yàn)樗a(chǎn)生一個(gè)簽名的訪問(wèn)令牌(如 JWT) ,IDP 的下游各層都可以使用這個(gè)令牌來(lái)確認(rèn)請(qǐng)求所代表的用戶身份。
3. API路由/網(wǎng)關(guān)
服務(wù)網(wǎng)格提供了一個(gè)機(jī)會(huì),在將請(qǐng)求路由到應(yīng)用程序之前可以使用API網(wǎng)關(guān)進(jìn)行API的訪問(wèn)授權(quán)。云原生計(jì)算基金會(huì)的開(kāi)放策略代理(OPA)項(xiàng)目,作為一個(gè)可用于訪問(wèn)授權(quán)的通用策略引擎而廣受歡迎。像Styra這類(lèi)供應(yīng)商可以非常容易的通過(guò)配置類(lèi)似Kong和Envory的API網(wǎng)關(guān)來(lái)評(píng)估OPA策略,該策略可以基于HTTP方法,路徑甚至訪問(wèn)令牌(JWT)中的屬性來(lái)允許或拒絕請(qǐng)求。話雖如此,由于API網(wǎng)關(guān)沒(méi)有足夠的用戶相關(guān)的上下文(超出JWT范疇),而且無(wú)法提供特定資源的訪問(wèn)控制,因此這一層的防御是粗粒度的。
細(xì)粒度訪問(wèn)控制
這種類(lèi)型的安全措施都內(nèi)置于應(yīng)用本身或者了解應(yīng)用正在訪問(wèn)的資源,由于它們有那些正在嘗試執(zhí)行操作的用戶,操作本身以及操作的資源相關(guān)的全部上下文,因此認(rèn)為它們都是“細(xì)粒度”的,包括應(yīng)用/API授權(quán),數(shù)據(jù)過(guò)濾和數(shù)據(jù)代理。隨著粗粒度解決方案日趨成熟,目前許多創(chuàng)新都轉(zhuǎn)向了細(xì)粒度授權(quán),其中的大多數(shù)解決方案都要某種程度地集成到應(yīng)用程序中,而不僅僅是網(wǎng)絡(luò)級(jí)別攔截請(qǐng)求。
1. 應(yīng)用/API授權(quán)服務(wù)
幾乎每個(gè)業(yè)務(wù)應(yīng)用都有角色和權(quán)限控制,根據(jù)登錄用戶的權(quán)限級(jí)別來(lái)區(qū)分可用的操作集。一個(gè)健壯的 RBAC/ABAC 解決方案,允許應(yīng)用將來(lái)自身份服務(wù)提供商(OPA)或目錄的屬性映射到應(yīng)用的角色和權(quán)限,以便盡可能自動(dòng)地分配角色和權(quán)限。
現(xiàn)代的應(yīng)用有一個(gè)負(fù)責(zé)為每個(gè)應(yīng)用/API請(qǐng)求授權(quán)的微服務(wù),它會(huì)根據(jù)用戶和資源屬性編寫(xiě)授權(quán)策略來(lái)允許或拒絕請(qǐng)求。OPA作為這層的良好的解決方案開(kāi)始被推行,很多供應(yīng)商(其中包括Aserto)都將OPA作為端到端應(yīng)用授權(quán)解決方案的一部分。SaaS開(kāi)發(fā)人員也開(kāi)始逐步使用基于OPA等開(kāi)源項(xiàng)目中現(xiàn)成的解決方案來(lái)替換自主開(kāi)發(fā)的授權(quán)微服務(wù)。
2. 數(shù)據(jù)過(guò)濾
一些應(yīng)用依靠數(shù)據(jù)訪問(wèn)層來(lái)過(guò)濾出用戶正在訪問(wèn)的數(shù)據(jù)中那些“正確”的數(shù)據(jù),通常這些都是在行級(jí)安全級(jí)別的數(shù)據(jù)庫(kù)中,或由開(kāi)發(fā)人員手動(dòng)或通過(guò)ORM庫(kù)的構(gòu)建在應(yīng)用中完成。
解決這個(gè)問(wèn)題的新方法包括向庫(kù)提供描述主體(用戶或用戶組),謂詞(要執(zhí)行的動(dòng)作)和對(duì)象(資源)以及主體可以使用的規(guī)則,和對(duì)資源可以執(zhí)行的哪些操作,然后這些庫(kù)將協(xié)助構(gòu)建對(duì)數(shù)據(jù)源的查詢控制,只返回“正確”的數(shù)據(jù)。本質(zhì)上是提供了一個(gè)“授權(quán)感知的ORM”。
3. 數(shù)據(jù)代理
數(shù)據(jù)代理不僅可以通過(guò)依賴(lài)了數(shù)據(jù)源的應(yīng)用來(lái)進(jìn)行限制訪問(wèn)數(shù)據(jù)源還可以通過(guò)網(wǎng)絡(luò)層進(jìn)行限制。類(lèi)似于API網(wǎng)關(guān),數(shù)據(jù)代理可以攔截對(duì)已知數(shù)據(jù)源的請(qǐng)求,并根據(jù)用戶以及其正在查詢的字段做出細(xì)粒度的訪問(wèn)決策。Cyral已采用OPA作為執(zhí)行數(shù)據(jù)庫(kù)訪問(wèn)控制規(guī)則的底層引擎。
結(jié)論
借助于零信任架構(gòu),安全不再是孤注一擲的賭博行為。在降低因未授權(quán)訪問(wèn)和數(shù)據(jù)泄露帶來(lái)的風(fēng)險(xiǎn)方面,縱深防御比過(guò)時(shí)的基于邊界安全的方法要有效得多。每個(gè)公司都應(yīng)采用這種粗細(xì)粒度混合的訪問(wèn)控制。
結(jié)合使用訪問(wèn)代理,身份提供商和API網(wǎng)關(guān),為基于用戶和設(shè)備身份的應(yīng)用,資源和數(shù)據(jù)訪問(wèn)提供粗粒度訪問(wèn)控制。創(chuàng)建應(yīng)用且對(duì)應(yīng)用的每個(gè)請(qǐng)求都基于RBAC/ABAC服務(wù)進(jìn)行授權(quán),可以確保在應(yīng)用層執(zhí)行細(xì)粒度的訪問(wèn)控制,因?yàn)閼?yīng)用層中有著最多的誰(shuí)被允許在哪些資源上執(zhí)行哪些操作的上下文。一旦授權(quán)服務(wù)允許操作,使用數(shù)據(jù)過(guò)濾可以僅返回用戶可以訪問(wèn)的數(shù)據(jù),從而減少“手工”編寫(xiě)查詢代碼的需求。最后數(shù)據(jù)代理可以根據(jù)用戶和應(yīng)用正在訪問(wèn)的字段的細(xì)粒度屬性對(duì)數(shù)據(jù)源的查詢進(jìn)行獨(dú)立授權(quán)。所有這些方法的組合使用可以更好地提高安全性。
譯者介紹
胥磊,51CTO社區(qū)編輯,某頭部電商技術(shù)副總監(jiān),關(guān)注Java后端開(kāi)發(fā),技術(shù)管理,架構(gòu)優(yōu)化,分布式開(kāi)發(fā)等領(lǐng)域。
原文標(biāo)題:??Modern Application Security Requires Defense in Depth???,作者:Omri Gazitt?