如何為連接到 Amazon VPC 的 Lambda 函數提供網際網路存取權限?
上次更新日期:2022 年 11 月 23 日
我想為連線到 Amazon Virtual Private Cloud (Amazon VPC) 的 AWS Lambda 函數提供網際網路存取權限。該如何設定?
簡短描述
從私有子網路存取網際網路需要網路位址轉譯 (NAT)。若要讓網際網路存取 Amazon VPC 連線的 Lambda 函數,請將其輸出流量傳送至公有子網路中的 NAT 閘道或 NAT 執行個體。
如需詳細資訊,請參閱《Amazon VPC 使用者指南》中的網際網路閘道。如需範例設定,請參閱含公有子網路和私有子網路 (NAT) 的 VPC。
疑難排解與 Amazon VPC 連接的 Lambda 函數的網際網路存取問題
請參閱如何通過 Systems Manager Automation 解決使用 Amazon S3 事件通知叫用 Lambda 函數的問題?
注意:您也可以使用 Amazon VPC 端點從 Amazon VPC 內部連接到受支援的 AWS 服務,無需網際網路存取權限。Lambda 無法放置在具有網際網路閘道的公有子網路中,因為無法將 Lambda 函數授予公有 IP 地址。若要從啟用 VPC 的功能存取公有網際網路,您必須將該功能放置於私有子網路中,且該子網路使用 NAT 閘道、NAT 執行個體或其他客戶受管的預設路由以供公有網際網路存取。
解決方案
(可選) 使用 AWS 管理主控台中的 VPC 精靈建立新的 Amazon VPC
注意:如果您使用 VPC 精靈建立新的 Amazon VPC,則可跳至下列小節:為您的 VPC 建立 Lambda 執行角色。
1. 在 AWS 管理主控台中開啟 VPC 精靈 。
2. 選擇含公有子網路和私有子網路的 VPC。新的公有子網路和私有子網路 (包括其關聯的網際網路閘道和 NAT 閘道) 會顯示在 Amazon VPC 主控台中。
在 Amazon VPC 中建立公有子網路和一或多個私有子網路
如需說明,請參閱在 VPC 中建立子網路以建立各子網路。
建立子網路時,請在 Name tag (名稱標籤) 中輸入每個子網路的名稱,將其標示為公有或私有子網路。例如:Public subnet (公有子網路)、Private lambda 1 (私有 Lambda 1) 和 Private lambda 2 (私有 Lambda 2)。
建立一個網際網路閘道,並將其連接到您的 Amazon VPC
如需說明,請參閱建立網際網路閘道並使其連接。
建立 NAT 閘道
如需說明,請參閱 建立 NAT 閘道。當您建立 NAT 閘道時,請在子網路中選擇要設為公有的子網路。(參考上一個範例:公有子網路。)
注意:若要測試您的 NAT 閘道設定,請參閱《Amazon VPC 使用者指南》中的 測試公有 NAT 閘道。
建立兩個自訂路由表,一個用於您的公有子網路,另一個則用於私有子網路
注意:與 Amazon VPC 連接的 Lambda 函數在發出請求時會隨機選取關聯的子網路。函數使用的所有子網路都應該具有相同的組態,以防止因 Lambda 使用設定錯誤的子網路而造成隨機錯誤。
如需說明,請參閱Create a custom route table (建立自訂路由表)。建立路由表時,請在 Name tag (Name tag) 中輸入每個路由表的名稱,以便標示與其關聯的子網路。例如:Public subnet (私有子網路) 和 Private Lambda (私有 Lambda)。
每個路由表都務必執行下列動作:
若是公有子網路的路由表
1. 將公有子網路的路由表 (公有子網路 ) 與您想要設為公有的子網路建立關聯。
2. 在路由表中新增路由,其中包含下列組態:
在目標中輸入 0.0.0.0/0。
在 Target (目標) 中,選擇 Internet Gateway (網際網路閘道),然後選擇您所建立之網際網路閘道的 ID (igw-123example)。選擇儲存路由。
若為私有子網路的路由表
1. 建立私有子網路的路由表 (Private Lambda) 與私有子網路之間的關聯。
2. 在路由表中新增路由,其中包含下列組態:
在目標中輸入 0.0.0.0/0。
在目標中選擇 NAT 閘道。然後,選擇您所建立的 NAT 閘道 (nat-123example) 的 ID。
重要事項:如果您使用的是 NAT 執行個體,請改用網路介面。選擇儲存路由。
注意:請確保通往 NAT 閘道的路由處於作用中狀態。如果已刪除 NAT 閘道且您還沒有更新路由,則它們處於 blackhole 狀態。如需詳細資訊,請參閱更新路由表。
確認您的網路 ACL 允許來自 Lambda 函數的輸出要求,必要時也允許輸入流量
Amazon VPC 中的預設網路存取控制清單 (ACL) 允許所有輸入和輸出流量。如果您變更網路 ACL 規則,請確保您仍允許來自 Lambda 函數的輸出要求。
也請確保您的網路 ACL 會根據您的 VPC 組態允許下列輸入流量:
- 對於使用 NAT 閘道的私有子網路:允許暫時性連接埠 1024-65535 上的輸入流量。
- 對於使用 NAT 執行個體的私有子網路:允許 NAT 執行個體作業系統所使用的暫時性連接埠上的輸入流量。
注意:如需詳細資訊,請參閱 Amazon VPC 中的網際網路流量隱私權 。
為 VPC 建立 Lambda 執行角色
1. 開啟 AWS Identity and Access Management (IAM) 主控台中的角色頁面。
2. 選擇建立角色。建立角色頁面隨即開啟。
3. 在「建立角色」頁面上,執行下列動作:
在選取受信任企業的類型中,選擇 AWS 服務。
在 一般使用案例中,選擇 Lambda 。
選擇 下一步:許可。
在附加許可政策底下,搜尋 AWSLambdaVPCAccessExecutionRole。
選取具有該名稱的政策。然後選擇下一步:標籤。
(可選) 為您的使用案例新增標籤。
選擇下一步:檢閱。
在角色名稱中,輸入 Lambda 執行角色的名稱。例如:lambda_vpc_basic_execution。
(可選) 在Role description (角色描述) 中,輸入角色的描述。選擇 Create role (建立角色)。
如需詳細資訊,請參閱 AWS Lambda 執行角色和在 IAM 主控台中建立執行角色。
設定您的 Lambda 函數,使其與 Amazon VPC 連接
1. 在 Lambda 主控台中開啟函數頁面。
2. 選擇要與 Amazon VPC 連接的函數名稱。
3. 選擇組態。
4. 在現有角色底下的現有角色中,選擇您之前建立的 Lambda 執行角色。
5. 在 VPC 底下,選擇編輯。然後,執行以下操作:
在 Virtual Private Cloud (VPC) 中,選擇您的 VPC。
在子網路中,選擇您建立的私有子網路。透過子網路 ID (以及您指定的名稱) 來識別它們。
在安全群組中,選擇一個安全群組。
注意:預設安全群組允許所有輸出網際網路流量,而且此流量在大多數使用情況下已足夠。如需詳細資訊,請參閱 VPC 的安全群組。選擇儲存。