具有 VPC 的私有網路 - AWS Lambda

具有 VPC 的私有網路

Amazon Virtual Private Cloud (Amazon VPC) 是位於 AWS 雲端的虛擬網路,是專門為您的 AWS 帳戶所架設的虛擬網路。您可以使用 Amazon VPC 來為資料庫、快取執行個體或內部服務等資源建立私有網路。如需 Amazon VPC; 的詳細資訊,請參閱《什麼是 Amazon VPC?

Lambda 函數一律會在 Lambda 服務擁有的 VPC 內執行。Lambda 會將網路存取和安全性規則套用至此 VPC,Lambda 即會自動維護和監控 VPC。如果您的 Lambda 函數需要存取帳戶 VPC 中的資源,請設定函數來存取 VPC。Lambda 提供名為 Hyperplane ENI 的受管資源,您的 Lambda 函數可使用此資源來從 Lambda VPC 連接到您帳戶 VPC 中的 ENI (彈性網路介面)。

使用 VPC 或 Hyperplane ENI 均無需負擔額外費用。部分 VPC 元件需付費,例如 NAT 閘道。如需詳細資訊,請參閱 Amazon VPC 定價

VPC 網路元素

Amazon VPC 網路包含以下網路元素:

  • 彈性網路介面 - 彈性網路介面是代表虛擬網路卡之 VPC 中的邏輯網路元件。

  • 子網路 - 您 VPC 中的 IP 地址範圍。您可以將 AWS 資源新增至指定的子網路。針對必須連線至網際網路的資源使用公有子網路,並針對不會連線至網際網路的資源使用私有子網路。

  • 安全群組 - 使用安全群組來控制每個子網路中對 AWS 資源的存取。

  • 存取控制清單 (ACL - 使用網路 ACL 在子網路中提供額外的安全性。預設的子網路 ACL 會允許所有傳出和傳入流量。

  • 路由表 - 包含 AWS 用來為您的 VPC 引導網路流量的一組路由。您可以明確地將子網與特定路由表建立關聯。根據預設,子網路會與主路由表關聯。

  • 路由 - 路由表中每個路由都會指定 IP 地址範圍,以及 Lambda 傳送該範圍之流量的目的地。路由也會指定目標,即傳送流量所經的閘道、網路介面或連線。

  • NAT 閘道 - AWS 網路位址轉譯 (NAT) 服務,可控制從私有 VPC 私有子網路至網際網路的存取。

  • VPC 端點 - 您可以使用 Amazon VPC 端點建立與 AWS 中託管之服務的私有連線,而不需要透過網際網路或透過 NAT 裝置、VPN 連接或 AWS Direct Connect 連接來存取。如需詳細資訊,請參閱《AWS PrivateLink 和 VPC 端點》。

提示

若要將 Lambda 函數設定為存取 VPC 和子網路,可以使用 Lambda 主控台或 API。

請參閱 CreateFunction 中的 VpcConfig 部分來設定您的函數。如需詳細步驟,請參閱 設定 VPC 存取 (主控台)設定 VPC 存取 (API)

如需 Amazon VPC 聯網定義的詳細資訊,請參閱《Amazon VPC 開發人員指南》中的Amazon VPC 運作方式Amazon VPC 常見問答集

將 Lambda 函數連接到您的 VPC

Lambda 函數一律會在 Lambda 服務擁有的 VPC 內執行。根據預設,Lambda 函數不會連接到您帳戶中的 VPC。當您將函數連線至您帳戶的 VPC 時,除非您的 VPC 提供存取權限,否則該函數無法存取網際網路。

Lambda 會使用 Hyperplane ENI 存取 VPC 中的資源。Hyperplane ENI 會使用 VPC 對 VPC NAT (V2N) 來提供從 Lambda VPC 到您的帳戶 VPC 之 NAT 功能。V2N 會提供從 Lambda VPC 到您的帳戶 VPC 的連線,但不提供反向連線。

當您建立 Lambda 函數 (或更新其 VPC 設定) 時,Lambda 會為函數 VPC 組態中的每個子網路配置 Hyperplane ENI。如果函數共用相同的子網路和安全群組,則多個 Lambda 函數可以共用網路介面。

若要連線到另一個 AWS 服務,您可以使用 VPC 端點以供 VPC 與支援的 AWS 服務之間建立私有通訊之用。另一種方法是使用 NAT 閘道,將輸出流量路由至另一個 AWS 服務。

若要讓函數存取網際網路,請將傳出流量路由到公有子網路的 NAT 閘道。NAT 閘道具有公有 IP 地址,可透過 VPC 的網際網路閘道連線至網際網路。

如需有關如何設定 Lambda VPC 網路的資訊,請參閱 將傳出網路連線至 VPC 中的資源連線 Lambda 的傳入介面 VPC 端點

共用子網路

VPC 共用允許多個 AWS 帳戶在共用、集中管理的虛擬私有雲端 (VPC) 中建立其應用程式資源,例如 Amazon EC2 執行個體和 Lambda 函數。在此模型中,擁有 VPC 的帳戶 (擁有者) 會和屬於相同 AWS 組織的其他帳戶 (參與者) 共用一個或多個子網路。

若要存取私有資源,請將您的函數連線到 VPC 中的私有共用子網路。子網路擁有者必須與您共用子網路,才能將函數連線到該子網路。子網路擁有者也可以稍後取消共用子網路,從而移除連線。如需有關如何在共用子網路中共用、取消共用和管理 VPC 資源的詳細資訊,請參閱《Amazon VPC 指南》中的如何與其他帳戶共用 VPC

Lambda Hyperplane ENI

Hyperplane ENI 是 Lambda 服務建立和管理的受管網路資源。Lambda VPC 中的多個執行環境可以使用 Hyperplane ENI 安全地存取您帳戶中 VPC 內的資源。Hyperplane ENI 會提供從 Lambda VPC 到您的帳戶 VPC 之 NAT 功能。如需有關 Hyperplane ENI 的詳細資訊,請參閱 AWS Lambda 運算部落格中的《改善的 VPC 聯網以供 AWS 函數使用》。

帳戶中每個唯一的安全群組和子網路組合都需要不同的網路介面。帳戶中共用相同安全群組和子網路組合的函數會使用相同的網路介面。

由於帳戶中的函數會共用 ENI 資源,因此 ENI 生命週期比其他 Lambda 資源更複雜。以下部分說明 ENI 生命週期。

建立 ENI

Lambda 可能會為新建立的已啟用 VPC 的函數建立 Hyperplane ENI 資源,或為現有函數的 VPC 組態變更建立 Hyperplane ENI 資源。當 Lambda 建立所需資源時,函數仍處於擱置狀態。當 Hyperplane ENI 準備就緒時,函數會轉換為作用中狀態,且 ENI 會變成可供使用。Lambda 可能需要數分鐘來建立 Hyperplane ENI。

對於新建立的已啟用 VPC 的函數,在函數狀態轉換為作用中之前,在函數上操作的任何調用或其他 API 動作都會失敗。

對於現有函數的 VPC 組態變更,任何函數調用都會繼續使用與舊子網路和安全群組組態關聯的 Hyperplane ENI,直到函數狀態轉換為作用中為止。

如果 Lambda 函數連續閒置數週,Lambda 會回收未使用的 Hyperplane ENI,並將函數狀態設定為閒置。下一次調用會導致 Lambda 重新啟用閒置函數。調用失敗,而且函數會進入擱置狀態,直到 Lambda 完成 Hyperplane ENI 的建立或配置為止。

如需函數狀態的詳細資訊,請參閱Lambda 函數狀態

管理 ENI

Lambda 會使用您函數的執行角色中的許可來建立並管理網路介面。在帳戶中為已啟用 VPC 的函數定義唯一子網路加上安全群組組合時,Lambda 會建立 Hyperplane ENI。Lambda 會為使用相同子網路和安全群組組合的帳戶中其他已啟用 VPC 的函數重複使用 Hyperplane ENI。

目前沒有任何關於可使用相同 Hyperplane ENI 的 Lambda 函數的數量配額。不過,每個 Hyperplane ENI 均支援多達 65,000 個連線/連接埠。如果連線數量超過 65,000,Lambda 會建立新的Hyperplane ENI 來提供額外的連線。

當您更新函數組態以存取不同的 VPC 時,Lambda 會終止與先前 VPC 中 Hyperplane ENI 的連線。更新連至新 VPC 之連線的程序,可能需要幾分鐘的時間。在此期間,函數的調用會繼續使用先前的 VPC。更新完成後,新的調用會開始使用新 VPC 中的 Hyperplane ENI。此時,Lambda 函數不再連接到先前的 VPC。

刪除 ENI

當您更新函數以移除其 VPC 組態時,Lambda 需要長達 20 分鐘才能刪除連接的 Hyperplane ENI。Lambda 只會在沒有其他函數 (或已發佈的函數版本) 使用該 Hyperplane ENI 時刪除 ENI。

Lambda 需要函數執行角色中的許可才能刪除 Hyperplane ENI。如果您在 Lambda 刪除 Hyperplane ENI 之前刪除執行角色,Lambda 將無法刪除 Hyperplane ENI。您可以手動執行刪除作業。

Lambda 不會刪除帳戶中的函數或函數版本正在使用的網路介面。您可以使用 Lambda ENI 搜尋工具來識別正在使用 Hyperplane ENI 的函數或函數版本。對於您不再需要的任何函數或函數版本,您可以移除 VPC 組態來讓 Lambda 刪除 Hyperplane ENI。

連線

Lambda 支援兩種連線類型:TCP (傳輸控制通訊協定) 和 UDP (使用者資料包通訊協定)。

當您建立 VPC 時,Lambda 會自動建立 DHCP 選項集,並將其與 VPC 建立關聯。您可以為 VPC 設定自己的 DHCP 選項。如需更多詳細資訊,請參閱《Amazon VPC DHCP 選項》。

Amazon 為您的 VPC 提供 DNS 伺服器 (Amazon Route 53 Resolver)。如需詳細資訊,請參閱《VPC 的 DNS 支援》。

安全性

AWS 提供安全群組網路 ACL 來提升 VPC 中的安全性。安全群組控制執行個體的傳入與傳出流量,網路 ACL 則是控制子網的傳入與傳出流量。安全群組可為大多數子網路提供足夠的存取控制。如果您想讓 VPC 多一層安全,可以使用網路 ACL。如需詳細資訊,請參閱《Amazon VPC 中的網路間流量隱私權》。每個您建立的子網路都會自動與 VPC 的預設網路 ACL 建立關聯。您可以變更關聯,也可以變更預設網路 ACL 的內容。

如需一般安全性最佳實務,請參閱《VPC 安全最佳實務》。如需如何使用 IAM 來管理 Lambda API 和資源存取的詳細資訊,請參閱 AWS Lambda 許可

您可以針對 VPC 設定使用 Lambda 特定條件金鑰,為您的 Lambda 函數提供額外的許可控制。如需 VPC 條件索引鍵的詳細資訊,請參閱使用 IAM 條件索引鍵進行 VPC 設定

注意

可以從共有網際網路或 AWS PrivateLink 端點調用 Lambda 函數。只能透過公有網際網路存取函數 URL。雖然 Lambda 函數確實支援 AWS PrivateLink,但函數 URL 不支援。

可觀測性

您可以使用 VPC 流量日誌來擷取 VPC 中傳入和傳出網路介面之 IP 流量資訊。您可以將流程日誌資料發佈到 Amazon CloudWatch Logs 或 Amazon S3。建立流量日誌之後,您可以在選擇的目的地中擷取及檢視其資料。

附註:當您將函數連接到 VPC 時,CloudWatch 日誌訊息不會使用 VPC 路由。Lambda 會使用日誌的一般路由來傳送。