為 Lambda 設定自我管理的 Apache Kafka 叢集和網路 - AWS Lambda

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

為 Lambda 設定自我管理的 Apache Kafka 叢集和網路

若要將 Lambda 函數連線至自我管理的 Apache Kafka 叢集,您需要正確設定叢集及其所在的網路。此頁面說明如何設定您的叢集和網路。如果您的叢集和網路已正確設定,請參閱 為 Lambda 設定自我管理的 Apache Kafka 事件來源 來設定事件來源映射。

自我管理的 Apache Kafka 叢集設定

您可以使用 Confluent CloudRedpanda 等雲端供應商託管自我管理的 Apache Kafka 叢集,或在您自己的基礎設施上執行。確保您的叢集已正確設定,並可從 Lambda 事件來源映射將連線的網路存取。

設定網路安全

若要透過事件來源映射授予 Lambda 對自我管理的 Apache Kafka 的完整存取權,您的叢集必須使用公有端點 (公有 IP 位址),或者您必須提供建立叢集之 Amazon VPC 的存取權。

當您將自我管理的 Apache Kafka 與 Lambda 搭配使用時,請建立 AWS PrivateLink VPC 端點,為您的函數提供 Amazon VPC 中資源的存取權。

注意

AWS PrivateLink 具有使用事件輪詢器預設 (隨需) 模式之事件來源映射的函數需要 VPC 端點。如果您的事件來源映射使用佈建模式,則不需要設定 AWS PrivateLink VPC 端點。

建立端點以提供對下列資源的存取權:

  • Lambda:為 Lambda 服務主體建立端點。

  • AWS STS — 為 建立端點, AWS STS 以便服務主體代表您擔任角色。

  • Secrets Manager:如果您的叢集使用 Secrets Manager 來儲存憑證,則請為 Secrets Manager 建立端點。

或者,在 Amazon VPC 中的每個公有子網路上設定一個 NAT 閘道。如需詳細資訊,請參閱啟用 VPC 連線的 Lambda 函數的網際網路存取

當您為自我管理的 Apache Kafka 建立事件來源映射時,Lambda 會檢查是否已存在彈性網絡介面 (ENI),適用於為您的 Amazon VPC 設定的子網路和安全群組。如果 Lambda 找到現有的 ENI,它會嘗試重複使用它們。否則,Lambda 會建立新的 ENI 以連線至事件來源並調用您的函數。

注意

Lambda 函數一律會在 Lambda 服務所擁有的 VPC 內執行。函數的 VPC 組態不會影響事件來源映射。只有事件來源的聯網組態會決定 Lambda 如何連線至您的事件來源。

為包含叢集的 Amazon VPC 設定安全群組。根據預設,自我管理的 Apache Kafka 會使用下列連接埠:9092

  • 傳入規則:允許與事件來源相關聯之安全群組的預設代理程式連接埠上的所有流量。或者,您可以使用自我參考的安全群組規則,允許從相同安全群組內的執行個體進行存取。

  • 傳出規則 – 如果您的函數需要與服務通訊443,允許外部目的地連接埠上的所有流量 AWS 。或者,如果您不需要與其他 AWS 服務通訊,您也可以使用自我參考安全群組規則來限制對代理程式的存取。

  • Amazon VPC 端點傳入規則:如果您使用的是 Amazon VPC 端點,與您的 Amazon VPC 端點相關聯的安全群組必須允許來自叢集安全群組的連接埠 443 上的傳入流量。

如果您的叢集使用身分驗證,則您也可以限制 Secrets Manager 端點的端點政策。若要呼叫 Secrets Manager API,Lambda 會使用您的函數角色,而不是 Lambda 服務主體。

範例 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" } ] }

當您使用 Amazon VPC 端點時, 會使用端點的彈性網路界面 (ENI) AWS 路由您的 API 呼叫來叫用函數。Lambda 服務主體需要在使用這些 ENI 的任何角色和函數上呼叫 lambda:InvokeFunction

根據預設,Amazon VPC 端點具有開放的 IAM 政策,允許廣泛存取資源。最佳實務是限制這些政策,以使用該端點執行所需的動作。為了確保事件來源映射能夠調用 Lambda 函數,VPC 端點政策必須允許 Lambda 服務主體呼叫 sts:AssumeRolelambda:InvokeFunction。限制您的 VPC 端點政策以僅允許源自您組織內部的 API 呼叫,可阻止事件來源映射正常運作,因此在這些政策中需要 "Resource": "*"

下列範例 VPC 端點政策展示了如何授予 Lambda 服務主體對 AWS STS 和 Lambda 端點的必要存取權。

範例 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": "*" } ] }