在 Lambda 中設定 Amazon MSK 叢集身分驗證方法
Lambda 需要許可才能存取 Amazon MSK 叢集、擷取記錄和執行其他任務。Amazon MSK 支援多種方法向 MSK 叢集進行身分驗證。
未驗證的存取
如果沒有用戶端透過網際網路存取叢集,您可以使用未驗證存取。
SASL/SCRAM 身分驗證
Lambda 支援 Simple Authentication and Security Layer/Salted Challenge Response Authentication Mechanism (SASL/SCRAM) 身分驗證,並使用 SHA-512 雜湊函式和 Transport Layer Security (TLS) 加密。若要讓 Lambda 連線至叢集,請將身分驗證憑證 (使用者名稱與密碼) 儲存在 Secrets Manager 秘密中,並在設定事件來源映射時參考此秘密。
如需有關使用 Secrets Manager 的詳細資訊,請參閱 Amazon Managed Streaming for Apache Kafka Developer Guide 中的 Sign-in credentials authentication with Secrets Manager。
注意
Amazon MSK 不支援 SASL/PLAIN 身分驗證。
交互 TLS 驗證
交互 TLS (mTLS) 可提供用戶端與伺服器之間的雙向身分驗證。用戶端會將憑證傳送至伺服器,供伺服器驗證用戶端。伺服器也會將憑證傳送至用戶端,供用戶端驗證伺服器。
針對 Amazon MSK 與 Lambda 的整合,MSK 叢集充當伺服器,而 Lambda 充當用戶端。
-
若要讓 Lambda 驗證 MSK 叢集,可以將用戶端憑證設定為 Secrets Manager 中的秘密,並在事件來源映射組態中參考此憑證。客户憑證必須由伺服器信任存放區中的憑證授權機構 (CA) 簽署。
-
MSK 叢集也會將伺服器憑證傳送至 Lambda。伺服器憑證必須由 AWS 信任存放區中的憑證認證機構 (CA) 簽署。
Amazon MSK 不支援自行簽署的伺服器憑證,因為 Amazon MSK 中的所有代理程式都使用由 Amazon Trust Services CA
CLIENT_CERTIFICATE_TLS_AUTH 機密必須有憑證欄位和私有金鑰欄位。若為加密的私有金鑰,機密需要私有金鑰密碼。憑證與私有金鑰均必須為 PEM 格式。
注意
Lambda 支援 PBES1
憑證欄位必須包含憑證清單,以用戶端憑證開頭,隨後則是任何中繼憑證,並以根憑證結尾。每個憑證均必須以新的一行開始,結構如下:
-----BEGIN CERTIFICATE----- <certificate contents> -----END CERTIFICATE-----
Secrets Manager 支援高達 65,536 個位元組的機密,此空間足以容納長憑證鏈。
私有金鑰必須為 PKCS #8
-----BEGIN PRIVATE KEY----- <private key contents> -----END PRIVATE KEY-----
對於已加密的私有金鑰,請使用下列結構:
-----BEGIN ENCRYPTED PRIVATE KEY----- <private key contents> -----END ENCRYPTED PRIVATE KEY-----
下列範例顯示的是使用了已加密私有金鑰之 mTLS 身分驗證的機密內容。若為加密的私有金鑰,您可以在機密中包含私有金鑰密碼。
{ "privateKeyPassword": "testpassword", "certificate": "-----BEGIN CERTIFICATE----- MIIE5DCCAsygAwIBAgIRAPJdwaFaNRrytHBto0j5BA0wDQYJKoZIhvcNAQELBQAw ... j0Lh4/+1HfgyE2KlmII36dg4IMzNjAFEBZiCRoPimO40s1cRqtFHXoal0QQbIlxk cmUuiAii9R0= -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- MIIFgjCCA2qgAwIBAgIQdjNZd6uFf9hbNC5RdfmHrzANBgkqhkiG9w0BAQsFADBb ... rQoiowbbk5wXCheYSANQIfTZ6weQTgiCHCCbuuMKNVS95FkXm0vqVD/YpXKwA/no c8PH3PSoAaRwMMgOSA2ALJvbRz8mpg== -----END CERTIFICATE-----", "privateKey": "-----BEGIN ENCRYPTED PRIVATE KEY----- MIIFKzBVBgkqhkiG9w0BBQ0wSDAnBgkqhkiG9w0BBQwwGgQUiAFcK5hT/X7Kjmgp ... QrSekqF+kWzmB6nAfSzgO9IaoAaytLvNgGTckWeUkWn/V0Ck+LdGUXzAC4RxZnoQ zp2mwJn2NYB7AZ7+imp0azDZb+8YG2aUCiyqb6PnnA== -----END ENCRYPTED PRIVATE KEY-----" }
如需有關適用於 Amazon MSK 的 mTLS 詳細資訊,以及如何產生用戶端憑證的說明,請參閱 Amazon Managed Streaming for Apache Kafka Developer Guide 中的 Mutual TLS client authentication for Amazon MSK。
IAM 身分驗證
您可以使用 AWS Identity and Access Management (IAM) 來驗證連至 MSK 叢集之用戶端的身分。透過 IAM 身分驗證,Lambda 憑藉函式執行角色中的許可連線至叢集、擷取記錄,以及執行其他必要動作。如需包含必要許可的政策範例,請參閱 Amazon Managed Streaming for Apache Kafka Developer Guide 中的 Create authorization policies for the IAM role。
若 MSK 叢集上的 IAM 身分驗證為作用中,且您未提供秘密,則 Lambda 會自動預設使用 IAM 身分驗證。
如需有關 Amazon MSK 中 IAM 身分驗證的詳細資訊,請參閱 IAM access control。
Lambda 選擇引導代理程式的方法
Lambda 會依據叢集上可用的身分驗證方法,以及您是否提供了身分驗證密碼,以此選擇引導代理程式。若您提供了 MTL 或 SASL/SCRAM 的密碼,則 Lambda 會自動選擇該身分驗證方法。若您未提供密碼,Lambda 會選取叢集上作用中的安全強度最高的身分驗證方法。以下是 Lambda 選擇代理程式的優先順序,身分驗證安全強度依次遞減:
mTLS (已提供 mTLS 密碼)
SASL/SCRAM (已提供 SASL /SCROM 密碼)
SASL IAM (未提供任何密碼,且 IAM 身分驗證在作用中)
未驗證的 TLS (未提供任何密碼,且 IAM 身分驗證未在作用中)
純文字 (未提供任何密碼,且 IAM 身分驗證和未經身分驗證的 TLS 皆未在作用中)
注意
若 Lambda 無法連線至最安全的代理程式類型,Lambda 便不會嘗試連線至其他 (安全強度較弱) 的代理程式類型。若您要讓 Lambda 選擇安全強度較弱較弱的代理程式類型,請停用叢集上所有安全強度較弱更高的身分驗證方法。