跳至內容

如何對連線到 Amazon VPC 的 Lambda 函數授予網際網路存取權?

2 分的閱讀內容
0

我想對具有 Amazon Virtual Private Cloud (Amazon VPC) 連線的 AWS Lambda 函數授予網際網路存取權。

簡短說明

預設情況下,Lambda 函式會在具有網際網路存取權的 Lambda 託管 VPC 中執行。即使您將 Lambda 函式與公有子網路建立關聯,它也無法連線到網際網路,因為該函式具有私有 IP 位址。

若要讓您的 Lambda 函式透過網際網路存取 AWS 帳戶中 VPC 的資源,請新增 NAT 閘道或 NAT 執行個體。除非 VPC 具有網際網路存取權,否則該組態會將該函式限制於存取 VPC 內的資源。

**注意:**您也可以使用 VPC 端點,在沒有網際網路存取的情況下,從 Amazon VPC 內部連線至支援的 AWS 服務。

解決方法

確認下列資源是否允許對 Lambda 函式的傳出網際網路存取:

如果上述任何資源未授予您的 Lambda 函式網際網路存取權,請重新設定該資源,以授予您的函式網際網路存取權。您可以執行 AWSSupport-TroubleshootLambdaInternetAccess,也可以手動授予網際網路存取權。

使用 AWSSupport-TroubleshootLambdaInternetAccess 執行手冊

先決條件

在啟動執行手冊之前,請確認您的 AWS Identity and Access Management (IAM) 使用者或角色具有必要的權限。如需詳細資訊,請參閱 AWSSupport-TroubleshootLambdaInternetAccess必要 IAM 權限一節。

請完成下列步驟:

  1. 開啟 Systems Manager console (Systems Manager 主控台)。
  2. 在導覽窗格中,展開 Change Management Tools (變更管理工具),然後選擇 Automation (自動化)。
  3. 選擇 Execute runbook (執行執行手冊)。
  4. 選擇 Owned by Amazon (由 Amazon 擁有) 索引標籤,然後搜尋 TroubleshootLambdaInternetAccess
  5. 選擇 AWSSupport-TroubleshootLambdaInternetAccess 卡片。
    **注意:**不要選擇自動化的名稱。
  6. 選擇 Next (下一步)。
  7. 選擇 Execute (執行)。

查看執行手冊的輸出,以確定導致 Lambda 函式失去網路存取權的原因,以及如何解決該問題。

手動授予網際網路存取權

在 Amazon VPC 中建立公有子網路和私有子網路

為您的 Lambda 函式建立私有子網路,並為您的 NAT 閘道建立公有子網路。在 Name tag (名稱標籤) 欄位中,為每個子網路輸入一個可識別其為公用或私有子網路的名稱。例如,使用公用子網路私有 Lambda 1私有 Lambda 2

**注意:**最佳實務是跨不同的可用區域建立多個私有子網路。此動作會建立備援,並讓 Lambda 為您的函式維持高可用性

使用網際網路閘道為子網路新增網際網路存取權

建立網際網路閘道。然後,將其附加到您的 VPC

建立 NAT 閘道

建立 NAT 閘道。在 Subnet (子網路),選取您要公開的子網路。例如,選擇 Public subnet (公有子網路)。

(選用) 測試您的 NAT 閘道設定

建立兩個自訂路由表

**注意:**當 VPC 中的 Lambda 函式發出請求時,函式會隨機選取相關聯的子網路。如果函式使用設定錯誤的子網路,那麼您會收到錯誤。為避免此問題,請確保您函式所使用的所有子網路都採用相同的組態。

若要設定自訂路由表,請完成下列步驟:

  1. 為公有子網路和私有子網路建立路由表
    Name tag (名稱標籤) 欄位,輸入每個路由表的名稱,以協助您識別與其關聯的子網路。例如,使用公有子網路私有 Lambda
  2. 將私有子網路和公有子網路與路由表建立關聯
  3. 為路由表新增路由,並包含下列組態:
    對於目的地,輸入 0.0.0.0/0
    Target (目標),為公有子網路選擇 Internet gateway (網際網路閘道),然後輸入網際網路閘道 ID。為私有子網路選擇 NAT gateway (NAT 閘道),然後輸入 NAT 閘道 ID。
    **重要:**如果您使用 NAT 執行個體而非 NAT 閘道,請選擇 Network interface (網路介面),而不是 NAT gateway (NAT 閘道)。
  4. 選擇 Save routes (儲存路由)。

注意:確定到 NAT 閘道的路由處於作用中狀態。如果您刪除 NAT 閘道且未更新路由,則該路由將處於黑洞狀態。

檢查您的網路 ACL 組態

您 VPC 中的預設網路 ACL 允許所有傳入和傳出流量。如果您變更網路 ACL 規則,請確定您允許來自 Lambda 函式的傳出請求。另外,請確定您的網路 ACL 允許以下傳入流量:

  • 對於使用 NAT 閘道的私有子網路,允許臨時連接埠 1024-65535 上的傳入流量。
  • 對於使用 NAT 執行個體的私有子網路,允許 NAT 執行個體作業系統 (OS) 所使用臨時連接埠上的傳入流量。

如需詳細資訊,請參閱確保 Amazon VPC 中的網路間流量隱私權

建立 Lambda 執行角色

為 VPC 建立 Lambda 執行角色。然後,更新 Lambda 函式以使用新的 Lambda 執行角色

設定 Lambda 函式以連線到 VPC

將函式附加到 VPC。在 Subnets (子網路),選取您的私有子網路。在 Security groups (安全群組),選取安全群組。

注意:預設安全群組允許所有傳出網際網路流量,並且適用於大多數使用案例。如需詳細資訊,請參閱使用安全群組控制 AWS 資源的流量

對於具有 Amazon VPC 連線的 Lambda 函式,您可以使用僅限輸出的網際網路閘道存取網際網路。如需詳細資訊,請參閱 IPv6 支援

相關資訊

對 Lambda 中的網路問題進行疑難排解

如何對 Amazon VPC 中的 Lambda 函數逾時問題進行疑難排解?

如何對 Lambda 函數中的 ETIMEDOUT 錯誤進行疑難排解?

讓 Lambda 函數存取 Amazon VPC 中的資源

如何對 Lambda 函數故障進行疑難排解?