在 Lambda 中設定叢集身分驗證方法
Lambda 支持多種方法來進行您自我管理 Apache Kafka 叢集的身分驗證。請確保您已設定 Kafka 叢集使用其中一種支援的身分驗證方法。如需有關 Kafka 安全性的詳細資訊,請參閱 Kafka 文件的「安全性
SASL/SCRAM 身分驗證
Lambda 支援 Simple Authentication and Security Layer/Salted Challenge Response Authentication Mechanism (SASL/SCRAM) 身分驗證與 Transport Layer Security (TLS) 加密 (SASL_SSL)。Lambda 會傳送加密的憑證,以便向叢集進行身分驗證。Lambda 不支援含純文字的 SASL/SCRAM (SASL_PLAINTEXT)。如需 SASL/SCRAM 身分驗證的詳細資訊,請參閱 RFC 5802
Lambda 也支援 SASL/PLAIN 身分驗證。由於這套機制使用純文字憑證,與伺服器的連線必須使用 TLS 加密,以確保憑證受到保護。
若使用 SASL 身分驗證,您需將登入憑證儲存為 AWS Secrets Manager 中的秘密。如需有關使用 Secrets Manager 的詳細資訊,請參閱 AWS Secrets Manager User Guide 中的 Create an AWS Secrets Manager secret。
重要
若要使用 Secrets Manager 進行驗證,密碼必須儲存在與 Lambda 函數相同的 AWS 區域中。
交互 TLS 驗證
相互 TLS (mTLS) 可提供用戶端與伺服器之間的雙向身分驗證。用戶端會將憑證傳送至伺服器以供伺服器驗證用戶端,而伺服器會將憑證傳送至用戶端以供用戶端驗證伺服器。
在自我管理 Apache Kafka 中,Lambda 會以用戶端的身分運作。您可以設定用戶端憑證 (做為 Secrets Manager 中的機密) 來驗證 Lambda 與 Kafka 代理程式。用戶端憑證必須由伺服器信任存放區中的憑證授權機構簽署。
Kafka 叢集會傳送伺服器憑證到 Lambda 來驗證 Kafka 代理程式與 Lambda。伺服器憑證可以是公有憑證授權機構憑證或私有憑證授權機構/自行簽署的憑證。公有憑證授權機構憑證必須由 Lambda 信任存放區中的憑證授權機構 (CA) 簽署。若為私有憑證授權機構/自行簽署的憑證,您可以設定伺服器根憑證授權機構憑證 (做為 Secrets Manager 中的機密)。Lambda 使用根憑證來驗證 Kafka 代理程式。
如需有關 mTLS 的詳細資訊,請參閱將 Amazon MSK 的相互 TLS 身分驗證作為事件來源
設定用戶端憑證機密
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-----"
}
設定伺服器根憑證授權機構憑證機密
如果您的 Kafka 代理程式使用 TLS 加密與私有憑證授權機構簽署的憑證,則建立此機密。您可以使用 TLS 加密以供 VPC、SASL/SCRAM、SASL/PLAIN 或 mTLS 身分驗證之用。
伺服器根憑證授權機構憑證機密必須有包含 Kafka 代理程式根憑證授權機構憑證 (格式為 PEM) 的欄位。下列範例說明機密的結構。
{"certificate":"-----BEGIN CERTIFICATE-----
MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx
EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT
HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs
ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dG...
-----END CERTIFICATE-----"
}