今天給大家?guī)淼氖?數(shù)人云 工程師文權(quán)在高效運(yùn)維線上群的分享實(shí)錄。從傳統(tǒng)單體應(yīng)用架構(gòu)到微服務(wù)架構(gòu),安全問題一直是人們關(guān)注的重點(diǎn),文權(quán)與大家分享了關(guān)于微服務(wù)訪問安全設(shè)計(jì)方案的探索與實(shí)踐。
我們首先從傳統(tǒng)單體應(yīng)用架構(gòu)下的訪問安全設(shè)計(jì)說起,然后分析現(xiàn)代微服務(wù)架構(gòu)下,訪問安全涉及的原則,接著討論目前常用的幾種微服務(wù)架構(gòu)下的訪問安全設(shè)計(jì)方案。最后,詳析Spring Cloud微服務(wù)架構(gòu)下如何解決訪問安全的問題。
一、傳統(tǒng)單體應(yīng)用的訪問安全設(shè)計(jì)

上面的示意圖展示了單體應(yīng)用的訪問邏輯。用戶通過客戶端發(fā)出http或者h(yuǎn)ttps請(qǐng)求,經(jīng)過負(fù)載均衡后,單體應(yīng)用收到請(qǐng)求。接著經(jīng)過auth層,進(jìn)行身份驗(yàn)證和權(quán)限批準(zhǔn),這里,一般會(huì)有跟后端數(shù)據(jù)庫的交互。通過后,將請(qǐng)求分發(fā)到對(duì)應(yīng)的功能邏輯層中去。完成相關(guān)操作后,返回結(jié)果給客戶端。
傳統(tǒng)單體應(yīng)用的訪問安全設(shè)計(jì)——原則

從以上分析可以看到,傳統(tǒng)單體應(yīng)用的訪問安全設(shè)計(jì)原則為:
第一,每次的用戶請(qǐng)求都需要驗(yàn)證是否安全,這里可以分兩種情況:
一種是沒有session的請(qǐng)求,需要經(jīng)過幾個(gè)步驟完成session化。一般為驗(yàn)證當(dāng)前用戶的credential,獲取當(dāng)前用戶的identity,這兩步都需要訪問數(shù)據(jù)庫等持久化對(duì)象來完成,最后一步是為當(dāng)前可用創(chuàng)建session,返回給客戶端后,啟用該session。
另一種是有session的請(qǐng)求,只需驗(yàn)證請(qǐng)求中當(dāng)前session的有效性,即可繼續(xù)請(qǐng)求。
第二,用戶的操作請(qǐng)求都在后端單個(gè)進(jìn)程中執(zhí)行完成,完全依賴后端調(diào)用方法的可靠性。一旦出錯(cuò),應(yīng)用是無法再次重復(fù)請(qǐng)求。
傳統(tǒng)單體應(yīng)用的訪問安全設(shè)計(jì)——優(yōu)勢(shì)和注意點(diǎn)

小結(jié),傳統(tǒng)單體應(yīng)用由于設(shè)計(jì)相對(duì)簡單單一,暴露給外界的入口相對(duì)較少,從而具有被攻擊并造成危害性的可能小的優(yōu)勢(shì)。
也正是由于單體應(yīng)用簡單單一的特點(diǎn),需要注意相關(guān)問題:
應(yīng)用后端保存了所有的credential等敏感信息
一旦入侵了對(duì)這個(gè)應(yīng)用的請(qǐng)求,就有可能拿到所有的保存在后端的信息
應(yīng)用的每次操作一般都需要和數(shù)據(jù)庫進(jìn)行交互,造成數(shù)據(jù)庫負(fù)載變高
二、微服務(wù)架構(gòu)下,訪問安全設(shè)計(jì)原則

先來看下這張典型的微服務(wù)設(shè)計(jì)架構(gòu)圖,如圖所示,有以下幾點(diǎn)特征:
每個(gè)服務(wù)只有權(quán)限去操作自己負(fù)責(zé)的那部分功能。
用戶請(qǐng)求的身份驗(yàn)證和權(quán)限批準(zhǔn)都由獨(dú)立的gateway服務(wù)來保障
對(duì)外服務(wù)的LB層無法直接與提供業(yè)務(wù)服務(wù)的應(yīng)用層進(jìn)行訪問

從上面的特征分析來看,想要給出一份訪問安全設(shè)計(jì)的原則說明,就要看看微服務(wù)架構(gòu)下,訪問安全有哪些痛點(diǎn),以下羅列了幾點(diǎn):
單點(diǎn)登錄,即在微服務(wù)這種多獨(dú)立服務(wù)的架構(gòu)下,實(shí)現(xiàn)用戶只需要登錄一次就能訪問所有相互信任的應(yīng)用系統(tǒng)
微服務(wù)架構(gòu)下的應(yīng)用一般都是無狀態(tài)的,導(dǎo)致用戶的請(qǐng)求每次都需要鑒權(quán),可能引發(fā)Auth服務(wù)的性能瓶頸
微服務(wù)架構(gòu)下,每個(gè)組件都管理著各自的功能權(quán)限,這種細(xì)粒度的鑒權(quán)機(jī)制需要事先良好的規(guī)劃
微服務(wù)架構(gòu)下,需要考慮到那些非瀏覽器端的客戶請(qǐng)求,是否具有良好的可操作性
根據(jù)實(shí)際情況,還有一些其他痛點(diǎn),這里不再一一贅述,而這些痛點(diǎn),就形成了我們?cè)跒槲⒎?wù)架構(gòu)設(shè)計(jì)訪問安全的原則。
三、微服務(wù)架構(gòu)下,常用的訪問安全設(shè)計(jì)方案
HTTP Basic Authentication + Independent Auth DB
HTTP Basic Authentication + Central Auth DB