云原生時(shí)代,是否還需要 VPC 做應(yīng)用安全?

本文翻譯自 2020 年的一篇英文文章 DO I REALLY NEED A VPC?[1]。
由于譯者水平有限,本文不免存在遺漏或錯(cuò)誤之處。如有疑問,請(qǐng)查閱原文。
以下是譯文。

從安全的角度來說,VPC 非但不是一種超能力,反而是另一層責(zé)任(another layer of responsibility)。
準(zhǔn)備在 AWS 上部署應(yīng)用?那你需要一個(gè) VPC[2]:這種虛擬私有網(wǎng)絡(luò)(virtual private network)能夠保護(hù)你的應(yīng)用免受來自公網(wǎng)的攻擊, 就像它們部署在老式數(shù)據(jù)中心一樣。這是“虛擬機(jī)為王” —— 即所謂 的 Cloud 1.0 (IaaS 浪潮) —— 時(shí)代的指導(dǎo)哲學(xué)。
但如今,當(dāng)我在云上構(gòu)建新應(yīng)用或與同行交流類似主題時(shí),我們通常都不會(huì)提到 “VPC”。這 是因?yàn)椋藗冊(cè)絹碓絻A向于將云原生應(yīng)用(cloud-native applications)直接部署在更 高層的托管服務(wù)之上 —— 例如 Lambda、API Gateway 和 DynamoDB —— 這些服務(wù)通過 API 與彼此進(jìn)行通信。在 AWS 上,這種情況下的最佳實(shí)踐是 使用 IAM[3] 做認(rèn)證和鑒權(quán),以保障微服務(wù)間的通信安全。
如果需要將公有云和私有數(shù)據(jù)中心打通,那 VPC 是不可或缺的。但**現(xiàn)代云原生應(yīng)用 的安全,真的還需要 VPC 扮演關(guān)鍵角色嗎?**在給出我自己的答案之前,我先陳述幾位業(yè) 內(nèi)專家的觀點(diǎn)。
1. 需求分析:VPC 是可選還是必需?
也許此刻你正在與安全團(tuán)隊(duì)一起,評(píng)估你們?yōu)?strong style="color: rgb(21, 166, 117);">本地部署的應(yīng)用(on-prem applications )設(shè)計(jì)的云原生方案【譯者注 1】。你們的評(píng)估方式是:對(duì)照一個(gè)清單(checklist),逐 一檢查方案是否滿足其中列出的要求,滿足的就打?qū)矗╟hecking the box)。我們來聽聽 PurpleBox Security 公司的 Nihat Guven 對(duì)此怎么說:“安全(security)與合規(guī) (compliance)在其中同樣重要,二者互相追趕(playing catch-up)”。但是,相比 于真正去思考 VPC 能否提供安全優(yōu)勢、能提供哪些安全優(yōu)勢,“大家更多地將精力放在了 合規(guī)方面,即 —— 遵循既有標(biāo)準(zhǔn),只要清單上列出了(例如,VPC),我們就做”。
【譯者注 1】
On-premises 表示部署在私有數(shù)據(jù)中心。這個(gè)詞來源于單詞 “premises”,注意這是一個(gè) 獨(dú)立的單詞,并不是 “premise”(“前提、假設(shè)”)的復(fù)數(shù)形式(雖然 “premise” 的復(fù)數(shù)也 是“premises”)。單詞 “premises” 表示“(企業(yè)、機(jī)構(gòu)的)營業(yè)場所”,由此引申出兩個(gè) 早期術(shù)語:
on-premises:本地機(jī)房 off-premises:非本地機(jī)房 到了云計(jì)算時(shí)代,公有云顯然就是 off-premises 模式(不過沒人這么叫);與此相 對(duì)應(yīng),on-premises 指沒有部署在公有云上的,一般就是公司自己的數(shù)據(jù)中心,不管是自建的 還是租賃的,也不管是自維護(hù)的還是托管的。On-premises 或 on-premises deployment 現(xiàn)在一般翻譯為“本地部署”,雖然“本地”一詞通常讓人首先想到的是 “l(fā)ocal”。
另一位 AWS hero Teri Radichel(即將出版的 *Cloud Security for Executives* 一 書的作者)贊同這樣一種觀點(diǎn):VPC 并沒有什么神奇之處。“VPC 實(shí)際上并沒有做任何 事情”,她指出。“你真正需要的是一個(gè)包含 NACL、子網(wǎng)和安全組的合理網(wǎng)絡(luò)架構(gòu)。你 需要知道如何構(gòu)建這樣的架構(gòu),然后才能針對(duì)攻擊做好監(jiān)控。此外,你還要理解網(wǎng)絡(luò)的各個(gè) 分層、攻擊的種類,以及攻擊者是如何滲透網(wǎng)絡(luò)的。”
這引出了問題的關(guān)鍵所在:基于 IAM 的安全方案,其暴露面已經(jīng)是理論上最小的;而為應(yīng) 用添加 VPC 這件事情,最終都會(huì)變成在這個(gè)最小暴露面之外,再加額外的防護(hù)層( adding layers of security to the theoretical minimum imposed by IAM)。所以你 引入 VPC 并不是為了解決某個(gè)問題,而是為了 —— 例如,增加額外的保護(hù)層防止數(shù)據(jù)滲透( data exfiltration),或者能夠?qū)α髁磕J竭M(jìn)行更細(xì)粒度的分析。
以上例子都說明,很多時(shí)候 VPC 只是可選項(xiàng),而非必需。遺憾的是,很多工程師并沒有理 解到這一層。
2. 利弊權(quán)衡:額外的責(zé)任而非超能力
從安全的角度來說,VPC 非但不是一種超能力(superpower),反而是額外的責(zé)任 (additional responsibility)。
“如果沒有業(yè)務(wù)需求 —— 例如與私有數(shù)據(jù)中心互聯(lián) —— 那最好不要引入 VPC”,否則,“由 于 VPC 而引入的額外復(fù)雜性對(duì)安全配置來說非但無益,反而有害”。– Don Magee,前 AWS 安全專家
確實(shí),對(duì)于安全配置來說,越多并非永遠(yuǎn)意味著越好(more is not always better) 。如果你連配置 IAM 角色都還沒搞熟,那又如何相信你能做好 VPC 安全?如果你連 S3 bucket 的 public 屬性都不清楚,那又如何確定你能管好安全組、ACL 以及 VPC 引入的 subnets?
VPC 確實(shí)會(huì)帶來一些額外的網(wǎng)絡(luò)監(jiān)控工具,例如 flow logs,但問題又來了:你知道如何高 效地使用這些工具嗎?如果不知道,那就是在花大價(jià)錢抓數(shù)據(jù),但又沒有如何分析這些數(shù)據(jù) 的清晰計(jì)劃。
另外,并不是說引入了 VPC,它就自動(dòng)為你的數(shù)據(jù)提供一層額外的防護(hù)。正如 Magee 提醒我們的:“即使在 VPC 內(nèi),數(shù)據(jù)的保護(hù)也僅僅 HTTPS 加密 —— 就像你自己用 HTTPS 加 密一樣。你覺得這種安全值得信賴嗎?”。
3. 云原生安全:模型抽象與安全下沉
云安全太難了!但我顯然不是在鼓勵(lì)大家因此而放棄。相反,正是因?yàn)樵瓢踩绱死щy且重 要(both hard and important),我才建議你不要輕易引入自己的網(wǎng)絡(luò)控制方案,而 應(yīng)該盡可能用好平臺(tái)提供的安全能力。
這聽起來像是 “serverless” 的套路 —— 事實(shí)上,我們確實(shí)離此不遠(yuǎn)了。畢竟,如 AWS Lambda 項(xiàng)目的創(chuàng)始人 Tim Wagner 所樂于指出[4]的,所有 Lambda functions 默認(rèn)都在 VPC 內(nèi)運(yùn) 行 —— 這種 VPC 是 AWS 托管的,因此比大部分人自維護(hù)的 VPC 要更安全(我們得 承認(rèn)這個(gè)事實(shí))。
這是目前大的技術(shù)趨勢。AWS 仍然會(huì)維護(hù)主機(jī)層安全(host-level security),同時(shí)也會(huì) 提供更上層的服務(wù),例如 AppSync 和 DynamoDB。但我并不是說網(wǎng)絡(luò)安全在這些領(lǐng)域已經(jīng)式 微了,而是說越來越多的職責(zé)下沉到了云提供商那里。你確實(shí)會(huì)失去一些控制能力 ,但換來的是 AWS 最佳實(shí)踐的保駕護(hù)航之下,更快的應(yīng)用構(gòu)建速度。
你可能會(huì)說,保護(hù)云原生應(yīng)用的安全其實(shí)最后就是:“要么裸奔,要么上云”(letting go and letting cloud)。確實(shí),但這種職責(zé)模型轉(zhuǎn)變(paradigm shift)是傳統(tǒng)的安全團(tuán)隊(duì)才需要關(guān)心的[5] ;對(duì)于用戶來說,只需要用好這種優(yōu)勢,自然就會(huì)取得巨大收益。

因此,嘗試去建立你的威脅模型,理解你面臨的風(fēng)險(xiǎn),對(duì)你的團(tuán)隊(duì)進(jìn)行恰當(dāng)?shù)呐嘤?xùn)。做完這 些你可能會(huì)發(fā)現(xiàn),你最終還是需要 VPC,但那說明你是真的需要它,而不是為了合規(guī)或其 他需求而無腦地引入。
如果有一天,你的云原生蜘蛛俠(cloud-native Spidey)意識(shí)開始變得模糊,有一點(diǎn)還請(qǐng) 牢記:有時(shí)候,責(zé)任越小,能力越大(sometimes, great power comes from less responsibility)。
引用鏈接
DO I REALLY NEED A VPC?: https://info.acloud.guru/resources/do-i-really-need-a-vpc
[2]VPC: https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html
[3]IAM: https://aws.amazon.com/iam/
[4]所樂于指出: https://medium.com/@timawagner/not-using-serverless-yet-why-you-need-to-care-about-re-invent-2019s-serverless-launches-c26fa0263d77
[5]傳統(tǒng)的安全團(tuán)隊(duì)才需要關(guān)心的: https://containerjournal.com/topics/container-ecosystems/comparing-serverless-and-containers-which-is-best/
原文鏈接:https://arthurchiao.art/blog/do-i-really-need-a-vpc-zh/


你可能還喜歡
點(diǎn)擊下方圖片即可閱讀

云原生是一種信仰???
關(guān)注公眾號(hào)
后臺(tái)回復(fù)?k8s?獲取史上最方便快捷的 Kubernetes 高可用部署工具,只需一條命令,連 ssh 都不需要!


點(diǎn)擊?"閱讀原文"?獲取更好的閱讀體驗(yàn)!
發(fā)現(xiàn)朋友圈變“安靜”了嗎?


