Lambda 隔離技術 - AWS Lambda 安全概觀

Lambda 隔離技術

Lambda 使用各種開放原始碼和專有隔離技術來保護工作者和執行環境。每個執行環境都包含下列項目的專用複本:

  • 特定函數版本的程式碼

  • 為您的函數版本選取的任何 AWS Lambda 層

  • 選擇的函數執行時間 (例如 Java 11、NodeJS 12、Python 3.8 等) 或函數的自訂執行時間

  • 可寫入的 /tmp 目錄

  • 基於 Amazon Linux 2 的最小 Linux 使用者空間

執行環境會使用數種內建於 Linux 核心的容器類技術,以及 AWS 專有的隔離技術,與其他執行環境隔離。這些技術包括:

  • cgroups ‒ 用來限制函數對 CPU 和記憶體的存取。

  • namespaces ‒ 每個執行環境都會在專用的命名空間內執行。我們會透過具備唯一的群組程序 ID、使用者 ID、網路界面及其他由 Linux 核心管理的資源進行這項作業。

  • seccomp-bpf ‒ 限制執行環境內所能使用的系統呼叫 (syscall)。

  • iptables路由表 ‒ 防止輸入網路通訊及隔離 MVM 之間的網路連線。

  • chroot ‒ 為基礎檔案系統提供範圍存取。

  • Firecracker 組態 ‒ 用來對區塊型儲存設備及網路裝置輸送量進行速率限制。

  • Firecracker 安全功能 ‒ 如需 Firecracker 目前安全設計的詳細資訊,請參閱 Firecracker 最新的設計文件

搭配 AWS 專有的隔離技術,這些機制可在執行環境間提供強大的隔離。

儲存和狀態

執行環境永遠不會在不同函數版本或客戶間重複使用,但單一環境可能會在相同函數版本的叫用間重複使用。這表示資料和狀態可能會在叫用間持續存在。資料和/或狀態可能會持續存在數小時,才會做為一般執行環境生命週期管理的一部分遭到刪除。基於效能考量,函數可以透過保存和重複使用本機快取或叫用之間長時間執行的連線,利用這項行為來改善效率。在執行環境中,這些多個叫用會由單一程序處理,因此任何涉及整個程序的狀態 (例如 Java 中的靜態狀態) 都可供未來的叫用重複使用 (若叫用在重複使用的執行環境中發生的話)。

每個 Lambda 執行環境也會包含可寫入的檔案系統,可在 /tmp 取得。這個儲存體無法跨執行環境存取或共享。與程序狀態相同,寫入 /tmp 的檔案會在執行環境的生命週期期間保存。這可以讓您將昂貴的傳輸作業 (例如下載機器學習 (ML) 模型) 分攤到多個叫用中。不希望在叫用間保存資料的函數不應寫入 /tmp,或是必須在叫用間刪除其位於 /tmp 中的檔案。/tmp 目錄的後端是 Amazon EC2 執行個體存放區,並且會受到靜態加密。

希望將資料保存到執行環境外部檔案系統的客戶應考慮使用 Lambda 與 Amazon Elastic File System (Amazon EFS) 的整合。如需詳細資訊,請參閱搭配 AWS Lambda 使用 Amazon EFS

若客戶不希望在叫用間保存資料或狀態,Lambda 建議客戶不要使用執行內容或執行環境來存放資料或狀態。如果客戶希望主動防止資料或狀態在叫用間遭到洩露,Lambda 建議客戶為每個狀態建立不同的函數。Lambda 不建議客戶使用或將安全敏感狀態存放到執行環境,因為其可能會在叫用間遭到變更。我們建議改為針對每次叫用重新計算狀態。