鍍金池/ 教程/ 大數(shù)據(jù)/ 守門員模式
索引表模式
Sharding 分片模式
外部配置存儲(chǔ)模式
命令和查詢職責(zé)分離(CQRS)模式
靜態(tài)內(nèi)容托管模式
運(yùn)行重構(gòu)模式
計(jì)算資源整合模式
Throttling 節(jié)流模式
斷路器模式
事件獲取模式
實(shí)體化視圖模式
緩存預(yù)留模式
守門員模式
聯(lián)合身份模式
補(bǔ)償交易模式
重試模式
領(lǐng)導(dǎo)人選舉模式
優(yōu)先級隊(duì)列模式
健康端點(diǎn)監(jiān)控模式
消費(fèi)者的競爭模式
基于隊(duì)列的負(fù)載均衡模式
仆人鍵模式
管道和過濾器模式
調(diào)度程序代理管理者模式

守門員模式

通過使用充當(dāng)客戶端和應(yīng)用程序或服務(wù)之間的代理,驗(yàn)證和進(jìn)行消毒的請求,并將它們之間的請求和數(shù)據(jù)的專用主機(jī)實(shí)例保護(hù)的應(yīng)用程序和服務(wù)。這可以提供一個(gè)額外的安全層,并限制了系統(tǒng)的攻擊面。

背景和問題

應(yīng)用程序通過接受和處理請求揭露它們的功能提供給客戶。在云托管方案,應(yīng)用程序暴露終端客戶機(jī)連接,一般包括代碼來處理來自客戶端的請求。此代碼可以執(zhí)行認(rèn)證和驗(yàn)證,一些或所有請求的處理,并有可能訪問存儲(chǔ)等服務(wù)代表客戶端的。

如果惡意用戶能夠危及系統(tǒng)和訪問應(yīng)用程序的托管環(huán)境,它使用安全機(jī)制,諸如憑證和存儲(chǔ)密鑰,并且該服務(wù)并訪問數(shù)據(jù),被暴露。因此,惡意用戶可能能夠獲得無節(jié)制訪問敏感信息和其他服務(wù)。

解決方案

為了盡量減少接觸到敏感信息和服務(wù)客戶的風(fēng)險(xiǎn),去耦,揭露出從處理請求并訪問存儲(chǔ)在代碼公共端點(diǎn)的主機(jī)或任務(wù)。這可以通過使用一個(gè)立面或?qū)S萌蝿?wù),與客戶端進(jìn)行交互,然后手拿開的請求(可能通過一個(gè)去耦接口)連接到主機(jī)或任務(wù)將要處理的請求來實(shí)現(xiàn)。圖1示出了這種方法的一個(gè)高層視圖。

http://wiki.jikexueyuan.com/project/cloud-design-patterns/images/gm.png" alt="" />

圖1 - 這種模式的高級概述

守門員模式可以簡單地用來保護(hù)存儲(chǔ),或者它可被用作一個(gè)更全面的立面,以保護(hù)所有的應(yīng)用程序的功能。的重要因素是:

  • 控制驗(yàn)證。守門員驗(yàn)證所有請求,并拒絕那些不符合驗(yàn)證要求。
  • 有限的風(fēng)險(xiǎn)和曝光。守門員不具有訪問所使用的可信主機(jī)訪問存儲(chǔ)和服務(wù)的憑證或密鑰。如果關(guān)守被攻破,攻擊者無法獲得訪問這些憑據(jù)或密鑰。
  • 適當(dāng)?shù)陌踩?。守門員運(yùn)行在一個(gè)有限的特權(quán)模式,而應(yīng)用程序的其余部分在訪問存儲(chǔ)和服務(wù)所需要的完全信任模式下運(yùn)行。如果關(guān)守被破壞,它不能直接訪問應(yīng)用程序的服務(wù)或數(shù)據(jù)。

此圖案有效地作用就像一個(gè)防火墻在一個(gè)典型的網(wǎng)絡(luò)拓?fù)洹K试S關(guān)守來檢查請求并做出關(guān)于是否將請求傳遞到可信主機(jī)決定(有時(shí)也被稱為鑰匙之王),執(zhí)行所需的任務(wù)。這一決定通常需要守門員來驗(yàn)證并將其傳遞到受信任主機(jī)前消毒要求的內(nèi)容。

問題和注意事項(xiàng)

在決定如何實(shí)現(xiàn)這個(gè)模式時(shí),請考慮以下幾點(diǎn):

  • 確保受信任主機(jī)到網(wǎng)守請求通過僅暴露內(nèi)部或保護(hù)端點(diǎn),只有連接到守門員。受信任主機(jī)不應(yīng)該暴露任何外部端點(diǎn)或接口。
  • 關(guān)守必須在有限的特權(quán)模式下運(yùn)行。通常,這意味著運(yùn)行守門員和獨(dú)立的托管服務(wù)或虛擬機(jī)的可信主機(jī)。
  • 關(guān)守不應(yīng)該執(zhí)行相關(guān)的應(yīng)用程序或服務(wù),或訪問任何數(shù)據(jù)的任何處理。它的功能是純粹的驗(yàn)證和消毒要求。受信任的主機(jī)可能需要執(zhí)行的請求額外的驗(yàn)證,但核心的驗(yàn)證應(yīng)該由守門員進(jìn)行。
  • 使用守門員和信任的主機(jī)或任務(wù),如果這是可能的之間的安全通信通道(HTTPS,SSL或TLS)。然而,一些托管環(huán)境可能不支持HTTPS內(nèi)部端點(diǎn)。
  • 添加額外的層,以實(shí)現(xiàn)守門員模式的應(yīng)用有可能對應(yīng)用程序的性能造成一定影響,由于它需要額外的處理和網(wǎng)絡(luò)通信。
  • 關(guān)守實(shí)例可能是一個(gè)單點(diǎn)故障。為了最大限度地減少故障的影響,考慮部署其他實(shí)例,并使用自動(dòng)縮放機(jī)制,以確保有足夠的能力來保持可用性。

何時(shí)使用這個(gè)模式

這種模式非常適合于:

  • 應(yīng)用程序,處理敏感信息,揭露必須具有高一定程度的保護(hù)免受惡意攻擊,或執(zhí)行不得破壞關(guān)鍵業(yè)務(wù)服務(wù)。
  • 分布式應(yīng)用中,有必要從主要任務(wù)分別執(zhí)行請求驗(yàn)證,或集中此驗(yàn)證,以簡化維護(hù)和管理。

例子

在一個(gè)云托管的情況下,該模式可以通過使用一個(gè)內(nèi)部端點(diǎn),一個(gè)隊(duì)列,或存儲(chǔ)作為中間通信機(jī)制解耦從受信任的角色和服務(wù)應(yīng)用程序中的關(guān)守角色或虛擬機(jī)來實(shí)現(xiàn)。圖 2 示出了使用內(nèi)部的端點(diǎn)時(shí)的基本原則。

http://wiki.jikexueyuan.com/project/cloud-design-patterns/images/gm2.png" alt="" />

圖 2 - 的模式使用云服務(wù)的網(wǎng)絡(luò)和輔助角色的一個(gè)例子