為 Lambda 設定 Amazon MSK 叢集與 Amazon VPC 網路
若要將 AWS Lambda 函式連線至 Amazon MSK 叢集,需要正確設定叢集及其所在的 Amazon Virtual Private Cloud (VPC)。本頁介紹了如何設定叢集與 VPC。如果叢集與 VPC 已正確設定,請參閱設定 Lambda 的 Amazon MSK 事件來源,設定事件來源映射。
Lambda 與 MSK 整合的網路組態需求概觀
Lambda 與 MSK 整合所需的聯網組態取決於應用程式的網路架構。此整合涉及三種主要資源:Amazon MSK 叢集、Lambda 函式、Lambda 事件來源映射。這些資源各自位於不同的 VPC 內:
-
Amazon MSK 叢集通常位於您管理的 VPC 的私有子網路內。
-
Lambda 函式位於 Lambda 擁有的 AWS 受管 VPC 內。
-
Lambda 事件來源映射位於另一個由 Lambda 擁有的 AWS 受管 VPC 內,該 VPC 與函式所在的 VPC 相互獨立。
事件來源映射是 MSK 叢集與 Lambda 函式之間的媒介資源。事件來源映射有兩個主要任務。首先,其會輪詢 MSK 叢集來取得新訊息。然後,其會使用這些訊息來調用 Lambda 函式。由於這三種資源位於不同的 VPC 內,輪詢與調用操作皆須跨 VPC 網路進行呼叫。
事件來源映射所需的網路組態取決於其是使用佈建模式還是隨需模式,如下圖所示:
在這兩種模式下,Lambda 事件來源映射輪詢 MSK 叢集取得新訊息的方式一致。為了在事件來源映射與 MSK 叢集之間建立連線,Lambda 會在私有子網路內建立 Hyperplane ENI (或在可用時重複使用現有介面),以此建立安全連線。如圖所示,此 Hyperplane ENI 會使用 MSK 叢集的子網路和安全群組組態,而不是 Lambda 函式。
從叢集輪詢訊息之後,Lambda 調用函式的方式在每種模式下有所不同:
-
在佈建模式下,Lambda 會自動處理事件來源映射 VPC 與函式 VPC 之間的連線。因此,無需任何其他聯網元件,即能成功調用函式。
-
在隨需模式下,Lambda 事件來源映射會透過客戶自管 VPC 的路徑來調用函式。因此,您需要在 VPC 的公有子網路內設定 NAT 閘道,或者在 VPC 的私有子網路內設定 AWS PrivateLink 端點,這些端點需提供對 Lambda、AWS Security Token Service (STS) 的存取權,並可選擇性提供對 AWS Secrets Manager 的存取權。正確設定其中一個選項,即可在 VPC 與 Lambda 受管執行時期 VPC 之間建立連線,這是調用函式的必要條件。
NAT 閘道允許私有子網路內的資源存取公有網際網路。使用此組態意味著流量在調用 Lambda 函式之前會經過網際網路。AWS PrivateLink 端點允許私有子網路安全地連線至 AWS 服務或其他私有 VPC 資源,而無需經過公有網際網路。有關如何設定這些資源的詳細資訊,請參閱為 MSK 事件來源設定 NAT 閘道或為 MSK 事件來源設定 AWS PrivateLink 端點。
截至目前,我們皆假設 MSK 叢集位於 VPC 的私有子網路內,這也是常見情況。不過,即使 MSK 叢集位於 VPC 的公有子網路內,您仍需設定 AWS PrivateLink 端點,才能啟用安全連線。下表根據設定 MSK 叢集和 Lambda 事件來源映射的方式,摘要說明了聯網組態要求:
| MSK 叢集位置 (位於客戶自管 VPC 內) | Lambda 事件來源映射擴展模式 | 必要的聯網組態 |
|---|---|---|
|
私有子網路 |
隨需模式 |
NAT 閘道 (位於 VPC 的公有子網路內),或 AWS PrivateLink 端點 (位於 VPC 的私有子網路內),用於啟用 Lambda、AWS STS 的存取權,以及選擇性地啟用 Secrets Manager 的存取權。 |
|
公有子網路 |
隨需模式 |
AWS PrivateLink 端點 (位於 VPC 的公有子網路內),用於啟用 Lambda、AWS STS 的存取權,以及選擇性地啟用 Secrets Manager 的存取權。 |
|
私有子網路 |
佈建模式 |
無 |
|
公有子網路 |
佈建模式 |
無 |
此外,與 MSK 叢集相關聯的安全群組必須允許正確連接埠的流量。確保您已設定下列安全群組規則:
-
傳入規則:允許預設代理程式連接埠上的所有流量。MSK 使用的連接埠取決於叢集上的身分驗證類型:
9098用於 IAM 身分驗證、9096用於 SASL/SCRAM,9094用於 TLS。或者,您可使用自我參照安全群組規則,允許來自同一安全群組內其他執行個體的存取。 -
傳出規則:如果函式需要與其他 AWS 服務通訊,則允許外部目的地連接埠
443上的所有流量。或者,如果不需要與其他 AWS 服務通訊,您可以使用自我參照安全群組規則來限制代理程式的存取權。 -
Amazon VPC 端點傳入規則:若您使用 Amazon VPC 端點,與該端點相關聯的安全群組必須允許來自叢集安全群組
443連接埠的傳入流量。
為 MSK 事件來源設定 NAT 閘道
您可以設定 NAT 閘道,允許事件來源映射從叢集輪詢訊息,並透過 VPC 的路徑調用函式。僅在事件來源映射使用隨需模式,且叢集位於 VPC 的私有子網路內時才需要此操作。如果叢集位於 VPC 的公有子網路內,或者事件來源映射使用佈建模式,則無需設定 NAT 閘道。
NAT 閘道允許私有子網路內的資源存取公有網際網路。如需與 Lambda 建立私有連線,請改為參閱為 MSK 事件來源設定 AWS PrivateLink 端點。
設定 NAT 閘道之後,必須設定正確的路由表。這將允許來自私有子網路的流量透過 NAT 閘道路由至公有網際網路。
下列步驟將引導您使用主控台設定 NAT 閘道。視需要針對每個可用區域 (AZ) 重複這些步驟。
設定 NAT 閘道和正確路由 (主控台)
-
請遵循建立 NAT 閘道中的步驟,同時注意下列事項:
-
NAT 閘道應始終位於公有子網路內。建立具有公有連線的 NAT 閘道。
-
如果 MSK 叢集跨多個可用區域複寫,請為每個可用區域建立一個 NAT 閘道。例如,在每個可用區域中,VPC 應該有一個包含叢集的私有子網路,以及一個包含 NAT 閘道的公有子網路。對於具有三個可用區域的設定,您將擁有三個私有子網路、三個公有子網路及三個 NAT 閘道。
-
-
建立 NAT 閘道之後,開啟 Amazon VPC 主控台
,然後在左側功能表中選擇路由表。 -
選擇 Create route table (建立路由表)。
-
將此路由表與包含 MSK 叢集的 VPC 建立關聯。或者,輸入路由表的名稱。
-
選擇 Create route table (建立路由表)。
-
選擇剛剛建立的路由表。
-
在子網路關聯索引標籤中,選擇編輯子網路關聯。
-
將此路由表與包含 MSK 叢集的私有子網路建立關聯。
-
-
選擇 Edit routes (編輯路由)。
-
選擇新增路由:
-
對於 Destination (目的地),請選擇
0.0.0.0/0。 -
在目標欄位中,選擇 NAT 閘道。
-
在搜尋方塊中,選擇在步驟 1 中建立的 NAT 閘道。這應該是與包含 MSK 叢集的私有子網路 (您在步驟 6 中與此路由表相關聯的私有子網路) 位於同一可用區域中的 NAT 閘道。
-
-
選擇儲存變更。
為 MSK 事件來源設定 AWS PrivateLink 端點
您可以將 AWS PrivateLink 端點設定為從叢集輪詢訊息,並透過 VPC 的路徑調用函式。這些端點應允許 MSK 叢集存取下列服務:
-
Lambda 服務
-
(選用) AWS Secrets Manager 服務。若叢集身分驗證所需的秘密儲存在 Secrets Manager 中,則此為必要項目。
僅在事件來源映射使用隨需模式時,才需要設定 PrivateLink 端點。如果事件來源映射使用佈建模式,Lambda 會代為建立必要連線。
PrivateLink 端點允許透過 AWS PrivateLink 對 AWS 服務進行安全的私有存取。或者,若要設定 NAT 閘道以讓 MSK 叢集存取公有網際網路,請參閱為 MSK 事件來源設定 NAT 閘道。
設定 VPC 端點之後,MSK 叢集應可直接且透過私有方式存取 Lambda、STS,以及選擇性地存取 Secrets Manager。
下列步驟將引導您使用主控台設定 PrivateLink 端點。視需要針對每個端點 (Lambda、STS、Secrets Manager) 重複這些步驟。
設定 VPC PrivateLink 端點 (主控台)
-
開啟 Amazon VPC 主控台
,然後在左側功能表中選擇端點。 -
選擇建立端點。
-
或者,輸入端點的名稱。
-
在類型欄位中,選擇 AWS 服務。
-
在服務欄位中,開始輸入服務的名稱。例如,若要建立連線至 Lambda 的端點,請在搜尋方塊中輸入
lambda。 -
在結果中,您應能看到目前區域的服務端點。例如,在美國東部 (維吉尼亞北部) 區域,您應該會看到
com.amazonaws.us-east-2.lambda。選取該服務。 -
在網路設定欄位中,選取包含 MSK 叢集的 VPC。
-
在子網路欄位中,選取 MSK 叢集所在的可用區域。
-
對於每個可用區域,在子網路 ID 欄位中,選擇包含 MSK 叢集的私有子網路。
-
-
在安全群組欄位中,選取與 MSK 叢集相關聯的安全群組。
-
選擇建立端點。
根據預設,Amazon VPC 端點具有開放的 IAM 政策,允許廣泛存取資源。最佳實務是限制這些政策,以使用該端點執行所需的動作。例如,對於 Secrets Manager 端點,您可以修改其政策,使其僅允許函式的執行角色存取秘密。
範例 VPC 端點政策:Secrets Manager 端點
{ "Statement": [ { "Action": "secretsmanager:GetSecretValue", "Effect": "Allow", "Principal": { "AWS": ["arn:aws::iam::123456789012:role/my-role"] }, "Resource":"arn:aws::secretsmanager:us-west-2:123456789012:secret:my-secret"} ] }
對於 AWS STS 和 Lambda 端點,您可以將呼叫主體限制為 Lambda 服務主體。但是,請確定在這些政策使用 "Resource": "*"。
範例 VPC 端點政策:AWS STS 端點
{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }
範例 VPC 端點政策:Lambda 端點
{ "Statement": [ { "Action": "lambda:InvokeFunction", "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com" ] }, "Resource": "*" } ] }