View a markdown version of this page

設定 AWS Lambda Web 函數的聯網 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定 AWS Lambda Web 函數的聯網

Web 函數接受來自用戶端的請求。它也可以連接其他資源來執行其工作,例如 VPC 中的資料庫、內部 API 或公有網際網路上的服務。您可以獨立設定這兩個方向。您可以向發起人公開端點,而不授予 VPC 存取權,或提供函數私有傳出存取權,而不變更誰可以叫用它。

傳入流量會透過端點到達 Web 函數。端點會定義其網域名稱、端點類型、區域和授權組態。傳出流量是在修訂版上設定。沒有輸出網路連接器的修訂版會直接到達公有IPv4目的地。參考連接器的修訂會透過您的 VPC 傳送其傳出流量。Web 函數會在 Lambda 擁有和管理的基礎設施上執行,而不是在您的 VPC 內。輸出網路連接器只會新增傳出 VPC 存取。它不會變更用戶端到達端點的方式,或允許誰叫用它。

注意

Web Function 端點網域名稱可從公有網際網路存取。 AWS PrivateLink 介面端點不適用於 Web Function 端點網域名稱。使用端點的授權組態來控制存取。

傳入連線能力

用戶端會透過 Lambda 管理的公有 HTTPS 端點叫用 Web 函數。Lambda 終止 TLS 並將請求轉送到應用程式的 HTTP 伺服器。受管端點支援 HTTP/1.1。它不會公開私有 VPC 地址或接受與執行環境的直接連線。

IamAuth 會控制誰可以叫用端點,但不會讓端點在網路層私有。如需授權選項,請參閱 Lambda Web 函數端點存取控制。

端點控制請求路由、授權、限流和擴展。其端點類型和區域集會在您建立時修正。若要變更任一屬性,請建立新的端點,並將用戶端移至其新的網域名稱。

端點組態獨立於 VPC 輸出。將輸出網路連接器新增至修訂版並不會使端點成為私有,也不會限制傳入請求。

重要

您只能將輸出網路連接器與HomeRegion端點搭配使用。Lambda 拒絕嘗試將 MultiRegion或 PerRegion 端點路由到參考輸出網路連接器的修訂版。

當修訂版權重在具有不同連接器組態的修訂版之間分割流量時,請求會使用不同的網路路徑。當您診斷間歇性連線時,請先檢查端點的自動部署模式和修訂權重。如需他們將請求路由到修訂的方式,請參閱 部署模式。

在端點前方新增 HTTP 前門

前門是接收用戶端請求並將其轉送至端點的服務。它新增了自訂網域、快取或 Web 應用程式防火牆保護等功能。Web 函數端點不支援自訂網域名稱或直接 AWS WAF 關聯。當您在檢視器與邊緣、回應壓縮或 AWS WAF 控制項之間需要自訂網域、邊緣快取、HTTP/2 或 HTTP/3 時,請在端點前面使用 Amazon CloudFront。

下圖顯示生產前門。用戶端連線至受 保護的 CloudFront 自訂網域 AWS WAF。CloudFront 會將請求傳送至受保護的 Web Function 端點,並將其路由至執行環境。如果沒有輸出網路連接器,應用程式可以呼叫公有 AWS 服務或網際網路端點。它無法連接只有私有 VPC 地址的資源。若要連接這些資源,請參閱 將 Web 函數連接至 VPC。使用 IamAuth,CloudFront 會簽署每個原始伺服器請求,而 Lambda 會在叫用函數之前授權請求。Lambda 會保留檢視器的原始Authorization標頭,並將其轉送至您的函數。Lambda 提供的網域僅接受具有叫用許可之主體的簽署請求,並拒絕未簽署的直接請求,例如直接呼叫網域的瀏覽器。為了確保端點僅接受來自分佈的呼叫,請新增以資源為基礎的政策,以授予 CloudFront 服務主體叫用許可,並使用來源 ARN 條件將其限定到分佈的 Amazon Resource Name (ARN)。使用 時ApplicationManaged,端點為公有,直接請求會繞過 CloudFront 和 AWS WAF。

檢視器會使用受 保護的自訂網域連線至 CloudFront 分佈 AWS WAF。CloudFront 會將原始伺服器請求簽署到使用 IamAuth 的 Web 函數端點。對 Lambda 提供之網域的未簽署直接請求會遭到拒絕。
  1. 將 Web 函數網域設定為 HTTPS 自訂原始伺服器。

  2. 將憑證和替代網域名稱連接到分佈,並將您的網域名稱系統 (DNS) 記錄指向分佈。

  3. 僅轉送應用程式所需的標頭、Cookie 和查詢字串。請勿轉送檢視器的Host標頭,因為 Lambda 會在 上路由Host,並在其不是端點網域時傳回 HTTP 404。如果您使用轉送所有檢視器標頭的受管原始伺服器請求政策,請選擇 AllViewerExceptHostHeader。端點標頭限制包括轉送的標頭。

  4. (選用) 當您需要 IP、機器人、速率型或受管規則檢查時,連接 AWS WAF Web ACL。

  5. 保護原始伺服器,讓用戶端無法略過分佈。對於 IAM 授權的端點,僅授予對預期前門身分的存取權。對於應用程式受管授權, 需要並驗證原始伺服器秘密或其他應用程式層級的證明,以證明請求是透過分發發出的。

如需 CloudFront 授權程序,請參閱 CloudFront 整合。

瀏覽器存取和 CORS

Lambda 不會為 Web 函數新增跨來源資源共用 (CORS) 標頭。您的應用程式或前門必須處理預檢和實際請求。

  • 傳回允許的原始伺服器,而不是反映每個Origin值。

  • 僅允許應用程式使用的方法和請求標頭。

  • 當瀏覽器傳送登入資料時,請使用明確的原始伺服器並傳回 Access-Control-Allow-Credentials: true。請勿將登入資料與萬用字元原始伺服器結合。

  • 將OPTIONS預檢請求與應用程式方法分開測試。

  • 驗證和授權每個受保護的請求。CORS 不是身分驗證控制。

串流和通訊協定限制

Web Functions 會在應用程式送達時將請求內文串流到您的應用程式,並透過 HTTP/1.1 將回應串流回用戶端。請求路徑為半雙工:Lambda 會在交付應用程式的回應之前轉送完整的請求內文。在您撰寫回應之前,請先完整閱讀請求內文。設定 timeoutSeconds以涵蓋雙向的串流:接收請求內文並傳送回應。當逾時過後,Lambda 會結束回應。用戶端會收到已傳送的狀態碼,內含截斷的內文。在用戶端中斷連線時停止上游工作。

Lambda 不支援 WebSocket 升級。Lambda 會在轉送請求之前移除連線特定的升級標頭。當單向伺服器server-to-client傳送的事件。

如需完整的標頭和方法合約,請參閱 HTTP 請求和回應。

傳出連線

您可以選擇每個修訂的傳出網路路徑。

  • 沒有輸出網路連接器 – 修訂會直接到達公有IPv4目的地,而不會周遊您的 VPC。來源地址是由 Lambda 管理、不穩定,且不適合允許清單。修訂沒有通往 VPC 中私有資源的路由。

  • 使用輸出網路連接器 – 修訂會透過連接器子網路中的彈性網路界面傳送傳出流量。您的 VPC 路由表、安全群組和網路存取控制清單 (ACLs適用。使用此選項可連接私有 VPC 資源、透過 Direct Connect 或 VPN 連線的內部部署網路,或需要您地址空間流量的目的地。

參考連接器會取代預設的傳出路徑。連接器會在您的 VPC 中放置流量,但不提供網際網路存取。若要到達公有IPv4目的地,連接器子網路需要 NAT 閘道的路由。若要到達公有IPv6目的地,他們需要通往輸出限定網際網路閘道的路由。

連接器流量沒有穩定的來源 IP 地址。設定目的地安全群組以允許連接器的安全群組。如果目的地不支援安全群組參考,請允許連接器子網路 CIDR 區塊,而非個別地址。

Lambda 會以非同步方式執行連接器操作。連接器會在 Lambda 建立其網路介面PENDING時報告,以及ACTIVE何時修訂可以參考它。其他狀態包括 INACTIVE、DELETING、 FAILED和 DELETE_FAILED。

更新後,請檢查 LastUpdateStatus InProgress、 Successful或 Failed。如果操作失敗,請使用其狀態原因和原因代碼來識別受影響的子網路、安全群組、許可或 IP 地址容量。

DNS 解析

對於私有 DNS 名稱,請在連接器的 VPC 中啟用 DNS 支援和 DNS 主機名稱。將任何必要的 Route 53 私有託管區域與該 VPC 建立關聯。

每個執行環境都會快取 DNS 答案。變更 DNS 記錄後,現有環境會繼續使用舊答案,直到快取值過期或 Lambda 取代環境為止。若要強制進行清理推展,請建立新的修訂,並將端點流量轉移到其中。

疑難排解時,請分別測試名稱解析和網路連線能力。依 IP 地址連線至目的地以驗證網路路徑,然後測試其 DNS 名稱。

將 Web 函數連接至 VPC

輸出網路連接器是可重複使用的 Lambda 資源。您建立一次連接器,並從每個需要 VPC 存取的 Web 函數修訂版參考已發佈的連接器版本。

對於 Web 函數,連接器參考具有下列屬性:

  • 修訂版參考零或一個連接器。

  • 連接器 ARN 必須包含版本限定詞。

  • 連接器必須與 Web 函數位於相同的 AWS 帳戶和區域。

  • 連接器必須具有 WebFunction作為其關聯的運算資源類型。

  • 只有HomeRegion端點支援參考輸出網路連接器的修訂版。

  • 您無法在設定參考之後變更參考。若要新增、變更或移除它,請建立新的修訂。

先決條件

建立連接器之前:

  • 在具有可用 IP 地址的不同可用區域中選擇至少兩個子網路。

  • 選擇允許所需傳出流量的安全群組。

  • 允許來自每個目的地上連接器安全群組的傳入流量。

  • 設定從連接器子網路到所需私有、內部部署或公有目的地的路由。

  • 建立 運算子角色,授予 Lambda 管理網路介面的許可。

  • 請確定建立連接器和修訂版的身分具有 中的許可設定聯網的許可,包括lambda:PassNetworkConnector連接器和操作員角色iam:PassRole的許可。

連接器的運算子角色和修訂版的執行角色具有不同的用途。運算子角色會管理 VPC 中的網路介面。執行角色會授予您的應用程式呼叫 AWS APIs的許可。您不會將連接器網路介面許可新增至執行角色。

運算子角色許可

Lambda 會擔任連接器的運算子角色來管理連接器的網路介面。角色的信任政策必須允許 Lambda 服務主體 lambda.amazonaws.com擔任該角色:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

將如下所示的許可政策連接至連接器的運算子角色。此政策允許 Lambda 建立和標記連接器的網路介面:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateENI", "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": [ "arn:aws:ec2:*:*:network-interface/*", "arn:aws:ec2:*:*:subnet/*", "arn:aws:ec2:*:*:security-group/*" ] }, { "Sid": "TagENI", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "arn:aws:ec2:*:*:network-interface/*", "Condition": { "StringEquals": { "ec2:ManagedResourceOperator": "network-connectors.lambda.amazonaws.com" } } } ] }

建立 連接器

下列 AWS CLI 命令會建立 Web Functions 的IPv4連接器。使用您自己的值取代連接器名稱、子網路 IDs、安全群組 ID 和運算子角色 ARN。

aws lambda-core create-network-connector \ --name my-connector \ --configuration '{ "VpcEgressConfiguration": { "SubnetIds": [ "subnet-0ab1c2d3e4f5a6b78", "subnet-1bc2d3e4f5a6b7c89" ], "SecurityGroupIds": ["sg-0123456789abcdef0"], "NetworkProtocol": "IPv4", "AssociatedComputeResourceTypes": ["WebFunction"] } }' \ --operator-role arn:aws:iam::123456789012:role/NetworkConnectorOperatorRole

連接器支援一種運算資源類型。Web Functions 的連接器不支援其他 Lambda 運算類型,且其運算資源類型不可變。

Lambda 會以非同步方式建立連接器。使用 get-network-connector 等待其State為 ACTIVE,並記下目前的版本編號。

參考修訂版的連接器

當您建立 Web 函數的第一個修訂版或更新版本serviceConfig.egressNetworkConnectorArn時,請設定 。使用符合版本資格的 ARN:

arn:aws:lambda:us-east-1:123456789012:network-connector:nc-0a1b2c3d4e5f6a7b8:4

下列 AWS CLI 命令會建立參考連接器第 4 版的修訂。將函數名稱、執行角色 ARN、連接器 ARN 和區域取代為您自己的值。

aws lambda-web create-web-function-revision \ --function-name my-web-function \ --build-config file://build-config.json \ --service-config '{ "executionRoleArn": "arn:aws:iam::123456789012:role/WebFunctionExecutionRole", "timeoutSeconds": 30, "egressNetworkConnectorArn": "arn:aws:lambda:us-east-1:123456789012:network-connector:nc-0a1b2c3d4e5f6a7b8:4" }' \ --region us-east-1

修訂時不接受不合格的 ARN、連接器名稱或連接器 ID。建立修訂之後:

  • 等到修訂版的狀態為 Active。

  • 閱讀修訂並確認 egressNetworkConnectorArn包含預期的連接器版本。

  • 確認端點將流量路由到修訂版。LatestRevision 模式中的HomeRegion端點會自動取得最新的作用中修訂。對於處於 Disabled 模式的端點,請更新其修訂權重。

  • 使用 VPC 流程日誌測試 VPC 目的地並確認流量。

端點的自動部署模式會決定是否自動建立作用中的修訂更新路由。在所有模式下,在測試其連接器之前,確認哪個修訂正在服務。

更新或移除 VPC 連線

更新連接器會發佈新版本。現有的修訂會保留在其連接器 ARN 中鎖定至 版本。

若要推展連接器變更:

  • 使用 更新連接器update-network-connector。連接器必須是 ACTIVE。提供完整的 VpcEgressConfiguration,包括您要保留的每個子網路 ID 和安全群組 ID,因為更新會取代現有的組態。

  • 等待連接器的 LastUpdateStatus變成 Successful。

  • 取得新的連接器版本。

  • 建立參考新版本合格 ARN 的修訂。

  • 對於處於 LatestRevision 模式的HomeRegion端點,請確認其已取得新的作用中修訂。對於處於 Disabled 模式的端點,請更新其修訂權重來轉移流量。

更新連接器而不建立參考其新版本的修訂,並不會變更執行 Web 函數的網路組態。

若要移除 VPC 連線,請建立不含 的修訂egressNetworkConnectorArn。處於 LatestRevision 模式的HomeRegion端點會在其變為作用中時接收它。對於處於 Disabled 模式的端點,請更新其修訂權重來轉移流量。新修訂版本使用 Lambda 管理的公有輸出,不再具有私有 VPC IPv4 存取權。

注意

刪除輸出網路連接器之前,請將端點流量移離參考連接器任何版本的每個 Web 函數修訂,然後刪除這些修訂。在作用中修訂仍然參考時刪除連接器,它會中斷現有和新執行環境的網路連線,以提供該修訂。

IPv6 支援

預設傳出路徑和 IPv4 連接器IPv4僅支援 。若要使用 IPv6,請將 連接器設定為 NetworkProtocol DualStack。

對於雙堆疊連線:

  • VPC 和連接器子網路必須具有 IPv6 CIDR 區塊。

  • 路由表必須包含所需IPv6目的地的路由。

  • 安全群組和網路 ACLs 必須允許IPv6流量。

  • 公有IPv6存取需要 ::/0 路由至輸出限定網際網路閘道。

  • 參考將連接器更新為 時建立的連接器版本DualStack。

不要透過檢查執行環境中的界面來判斷IPv6可用性。透過從應用程式碼進行IPv6連線並檢查 VPC 流程日誌來驗證。