雲原生時代,是否還需要 VPC 做應用安全?

本文翻譯自 2020 年的一篇英文文章 DO I REALLY NEED A VPC?[1]。

由於譯者水平有限,本文不免存在遺漏或錯誤之處。如有疑問,請查閱原文。

以下是譯文。

從安全的角度來說,VPC 非但不是一種超能力,反而是另一層責任(another layer of responsibility)。

準備在 AWS 上部署應用?那你需要一個 VPC[2]:這種虛擬私有網絡(virtual private network)能夠保護你的應用免受來自公網的攻擊, 就像它們部署在老式數據中心一樣。這是 “虛擬機爲王” —— 即所謂 的 Cloud 1.0 (IaaS 浪潮) —— 時代的指導哲學

但如今,當我在雲上構建新應用或與同行交流類似主題時,我們通常都不會提到 “VPC”。這 是因爲,人們越來越傾向於將雲原生應用(cloud-native applications)直接部署在更 高層的託管服務之上 —— 例如 Lambda、API Gateway 和 DynamoDB —— 這些服務通過 API 與彼此進行通信。在 AWS 上,這種情況下的最佳實踐是 使用 IAM[3] 做認證和鑑權,以保障微服務間的通信安全。

如果需要將公有云和私有數據中心打通,那 VPC 是不可或缺的。但 ** 現代雲原生應用 的安全,真的還需要 VPC 扮演關鍵角色嗎?** 在給出我自己的答案之前,我先陳述幾位業 內專家的觀點。

  1. 需求分析:VPC 是可選還是必需?

也許此刻你正在與安全團隊一起,評估你們爲本地部署的應用(on-prem applications )設計的雲原生方案【譯者注 1】。你們的評估方式是:對照一個清單(checklist),逐 一檢查方案是否滿足其中列出的要求,滿足的就打對勾(checking the box)。我們來聽聽 PurpleBox Security 公司的 Nihat Guven 對此怎麼說:“安全(security)與合規 (compliance)在其中同樣重要,二者互相追趕(playing catch-up)”。但是,相比 於真正去思考 VPC 能否提供安全優勢、能提供哪些安全優勢,“大家更多地將精力放在了 合規方面,即 —— 遵循既有標準,只要清單上列出了(例如,VPC),我們就做”。

【譯者注 1】

On-premises 表示部署在私有數據中心。這個詞來源於單詞 “premises”,注意這是一個 獨立的單詞,並不是 “premise”(“前提、假設”)的複數形式(雖然 “premise” 的複數也 是 “premises”)。單詞 “premises” 表示 “(企業、機構的)營業場所”,由此引申出兩個 早期術語:

  • on-premises:本地機房

  • off-premises:非本地機房

到了雲計算時代,公有云顯然就是 off-premises 模式(不過沒人這麼叫);與此相 對應,on-premises 指沒有部署在公有云上的,一般就是公司自己的數據中心,不管是自建的 還是租賃的,也不管是自維護的還是託管的。On-premises 或 on-premises deployment 現在一般翻譯爲 “本地部署”,雖然“本地” 一詞通常讓人首先想到的是 “local”。

另一位 AWS hero Teri Radichel(即將出版的 Cloud Security for Executives 一 書的作者)贊同這樣一種觀點:VPC 並沒有什麼神奇之處。“VPC 實際上並沒有做任何 事情”,她指出。“你真正需要的是一個包含 NACL、子網和安全組的合理網絡架構。你 需要知道如何構建這樣的架構,然後才能針對攻擊做好監控。此外,你還要理解網絡的各個 分層、攻擊的種類,以及攻擊者是如何滲透網絡的。”

這引出了問題的關鍵所在:基於 IAM 的安全方案,其暴露面已經是理論上最小的;而爲應 用添加 VPC 這件事情,最終都會變成在這個最小暴露面之外,再加額外的防護層( adding layers of security to the theoretical minimum imposed by IAM)。所以你 引入 VPC 並不是爲了解決某個問題,而是爲了 —— 例如,增加額外的保護層防止數據滲透( data exfiltration),或者能夠對流量模式進行更細粒度的分析。

以上例子都說明,很多時候 VPC 只是可選項,而非必需。遺憾的是,很多工程師並沒有理 解到這一層。

  1. 利弊權衡:額外的責任而非超能力

從安全的角度來說,VPC 非但不是一種超能力(superpower),反而是額外的責任 (additional responsibility)

“如果沒有業務需求 —— 例如與私有數據中心互聯 —— 那最好不要引入 VPC”,否則,“由 於 VPC 而引入的額外複雜性對安全配置來說非但無益,反而有害”。– Don Magee,前 AWS 安全專家

確實,對於安全配置來說,越多並非永遠意味着越好(more is not always better) 。如果你連配置 IAM 角色都還沒搞熟,那又如何相信你能做好 VPC 安全?如果你連 S3 bucket 的 public 屬性都不清楚,那又如何確定你能管好安全組、ACL 以及 VPC 引入的 subnets?

VPC 確實會帶來一些額外的網絡監控工具,例如 flow logs,但問題又來了:你知道如何高 效地使用這些工具嗎?如果不知道,那就是在花大價錢抓數據,但又沒有如何分析這些數據 的清晰計劃。

另外,並不是說引入了 VPC,它就自動爲你的數據提供一層額外的防護。正如 Magee 提醒我們的:“即使在 VPC 內,數據的保護也僅僅 HTTPS 加密 —— 就像你自己用 HTTPS 加 密一樣。你覺得這種安全值得信賴嗎?”。

  1. 雲原生安全:模型抽象與安全下沉

雲安全太難了!但我顯然不是在鼓勵大家因此而放棄。相反,正是因爲雲安全如此困難且重 要(both hard and important),我才建議你不要輕易引入自己的網絡控制方案,而 應該儘可能用好平臺提供的安全能力

這聽起來像是 “serverless” 的套路 —— 事實上,我們確實離此不遠了。畢竟,如 AWS Lambda 項目的創始人 Tim Wagner 所樂於指出 [4] 的,所有 Lambda functions 默認都在 VPC 內運 行 —— 這種 VPC 是 AWS 託管的,因此比大部分人自維護的 VPC 要更安全(我們得 承認這個事實)。

這是目前大的技術趨勢。AWS 仍然會維護主機層安全(host-level security),同時也會 提供更上層的服務,例如 AppSync 和 DynamoDB。但我並不是說網絡安全在這些領域已經式 微了,而是說越來越多的職責下沉到了雲提供商那裏。你確實會失去一些控制能力 ,但換來的是 AWS 最佳實踐的保駕護航之下,更快的應用構建速度

你可能會說,保護雲原生應用的安全其實最後就是:“要麼裸奔,要麼上雲”(letting go and letting cloud)。確實,但這種職責模型轉變(paradigm shift)是傳統的安全團隊才需要關心的 [5] ;對於用戶來說,只需要用好這種優勢,自然就會取得巨大收益。

因此,嘗試去建立你的威脅模型,理解你面臨的風險,對你的團隊進行恰當的培訓。做完這 些你可能會發現,你最終還是需要 VPC,但那說明你是真的需要它,而不是爲了合規或其 他需求而無腦地引入。

如果有一天,你的雲原生蜘蛛俠(cloud-native Spidey)意識開始變得模糊,有一點還請 牢記:有時候,責任越小,能力越大(sometimes, great power comes from less responsibility)。

引用鏈接

[1]

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]

傳統的安全團隊才需要關心的: https://containerjournal.com/topics/container-ecosystems/comparing-serverless-and-containers-which-is-best/

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/TH4yIS9ZNjsOSqGEnIuRvQ