Lambda 執行 - AWS Lambda 安全概觀

Lambda 執行

當 Lambda 代您執行函數時,會同時管理佈建及設定執行程式碼所需的基礎系統。這可讓您的開發人員專注在商業邏輯及撰寫程式碼,而非管理基礎系統。

Lambda 服務分成控制平面資料平面。每個平面都在服務中提供不同的用途。控制平面提供管理 API (例如 CreateFunctionUpdateFunctionCodePublishLayerVersion 等),並會管理與所有 AWS 服務的整合。與 Lambda 控制平面的通訊在傳輸中會受到 TLS 保護。所有存放在 Lambda 控制平面內的客戶資料都會透過使用 AWS KMS 進行靜態加密,其設計旨在保護資料不受未經授權的洩露或竄改。

資料平面是 Lambda 的叫用 API,會在叫用 Lambda 函數時觸發。叫用 Lambda 函數時,資料平面會在 AWS Lambda 工作者 (或直接稱呼為工作者,這是一種 Amazon EC2 執行個體類型) 上配置執行環境給該函數版本,或是選擇已為該函數版本設定的現有執行環境,然後使用該環境完成叫用。如需詳細資訊,請參閱本文件中的〈AWS Lambda MicroVM 與工作者〉一節。

Lambda 執行環境

每一次的叫用都會由 Lambda 叫用服務路由至工作者上能夠處理該請求的執行環境。除了透過資料平面外,客戶和其他使用者都無法直接啟動與執行環境的傳入/輸入網路通訊。這有助於確保與您執行環境的通訊經過身分驗證及授權。

執行環境會針對特定函數版本進行保留,並且無法在不同函數版本、不同函數或 AWS 帳戶間重複使用。這表示單一函數可能會具有兩個不同版本,並可能會導致至少兩個獨特的執行環境。

每個執行環境一次只能用於一個並行叫用,並且基於效能考量,執行環境可以在相同函數版本的多次叫用間重複使用。取決於許多因素 (例如叫用率、函數組態等),特定函數版本可能會有一或多個執行環境。透過這種方式,Lambda 能夠為其客戶提供函數版本層級的隔離。

Lambda 目前不會隔離函數版本執行環境內的叫用。這表示其中一次叫用可能會留下一個狀態,而該狀態可能會影響下一次叫用 (例如寫入 /tmp 的檔案或記憶體中的資料)。如果您希望確保其中一次叫用不會影響另外一次叫用,Lambda 建議您建立其他不同的函數。例如,您可以為更容易發生錯誤的複雜剖析作業建立不同函數,並重複使用不會執行安全敏感作業的函數。Lambda 目前沒有限制客戶能建立的函數數量。如需限制的詳細資訊,請參閱 Lambda 配額頁面。

執行環境會持續受到 Lambda 的監控及管理,並且可能會因為各種理由而建立或刪除,這些理由包括但不限於:

  • 新的叫用抵達,且不存在適合的執行環境

  • 發生內部執行時間部署或工作者軟體部署

  • 發佈了新的佈建並行執行組態

  • 執行環境或工作者的租用時間正逐漸接近,或是已超過最大生命週期

  • 其他的內部工作負載重新平衡程序

客戶可以在其函數組態上設定佈建並行執行,以管理為某個函數版本存在的預先佈建執行環境數量。當被設定執行這項作業時,Lambda 將會建立、管理及確保一律存在的設定執行環境數。這可確保客戶可對其任何規模的無伺服器應用程式啟動效能進行更大程度的控制。

除了透過佈建並行執行組態外,客戶無法決定性地控制 Lambda 為回應叫用而建立或管理的執行環境數。

執行角色

每個 Lambda 函數也必須設定執行角色,這是一種 IAM 角色,Lambda 服務會在執行與函數相關的控制平面和資料平面作業時取得這個角色。Lambda 服務會取得這個角色以擷取暫時安全憑證,這項安全憑證會在函數的叫用期間做為環境變數提供使用。基於效能考量,Lambda 服務會快取這些憑證,並且可能會在使用相同執行角色的不同執行環境之間重複使用這些憑證。

為了確保遵守最低權限原則,Lambda 建議每個函數都具備自身的獨特角色,並且使用其需要的最小許可設定該角色。

Lambda 服務也可能取得執行角色以執行特定控制平面作業,例如與建立和設定 VPC 函數彈性網路界面 (ENI) 有關的作業、傳送日誌到 Amazon CloudWatch Application Insights 的作業、傳送追蹤到 AWS X-Ray 的作業,或是其他與叫用無關的作業。客戶可以在 AWS CloudTrail 中檢閱稽核日誌,隨時檢閱和稽核這些使用案例。

如需此主題的詳細資訊,請參閱 AWS Lambda 執行角色文件頁面。

Lambda MicroVM 與工作者

Lambda 會在稱為 AWS Lambda 工作者的 Amazon EC2 執行個體機群上建立執行環境。工作者是裸機EC2 Nitro 執行個體,會由 Lambda 在不同、隔離,且客戶無法看見的 AWS 帳戶中啟動及管理。工作者具備由 Firecracker 建立的一或多個硬體虛擬化微型虛擬機器 (MVM)。Firecracker 是一種開放原始碼的虛擬機器監控器 (VMM),使用以 Linux 核心為基礎的虛擬機器 (KVM) 建立及管理 MVM。其專為建立和管理安全、多租用戶的容器和函數型服務所建置,這些容器和服務會提供無伺服器作業模型。如需 Firecracker 安全模型的詳細資訊,請參閱 Firecracker 專案網站。

做為共同責任模式的一部分,Lambda 會負責維護安全組態、控制,以及修補工作者層級。Lambda 團隊使用 Amazon Inspector 探索已知的潛在安全問題,以及其他自訂安全問題通知機制和預先揭露的清單,使客戶無需管理其執行環境的基礎安全狀態。

顯示 AWS Lambda 工作者隔離模型的圖表。

圖 3 ‒ AWS Lambda 工作者的隔離模型

工作者的最大租用生命週期為 14 小時。當工作者接近最大租用時間時,不會再有任何叫用路由至該工作者;MVM 會正常終止,並且基礎工作者執行個體也會終止。Lambda 會持續監控和針對其機群生命週期的生命週期活動進行警示。

所有與工作者進行的資料平面通訊都會使用 Galois/計數器模式的進階加密標準 (AES-GCM) 加密。由於工作者是託管在 Lambda 服務帳戶中由 Lambda 所管理的網路隔離 Amazon VPC 內,因此除了通過資料平面的作業外,客戶無法直接與工作者互動。

當工作者需要建立新的執行環境時,其會獲得具備時間限制的授權以存取客戶函數成品。這些成品專為 Lambda 的執行環境和工作者進行了最佳化。使用 ZIP 格式上傳的函數程式碼會先進行一次最佳化,然後會使用 AWS 管理的金鑰和 AES-GCM,以加密格式存放。

使用容器映像格式上傳到 Lambda 的函數也會進行最佳化。首先會從原始來源下載容器映像,最佳化為不同區塊,然後使用經過身分驗證的收斂加密方法存放為加密區塊,這種加密方法會使用 AES-CTR、AES-GCM 和 SHA-256 MAC 的組合。收斂加密方法可讓 Lambda 安全地消除加密區塊的重複資料。解密客戶資料所需的所有金鑰均會使用客戶管理的 AWS KMS 客戶主金鑰 (CMK) 進行保護。Lambda 服務的 CMK 用量可在 AWS CloudTrail 日誌中供客戶使用,以進行追蹤和稽核。