本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
交互 TLS 驗證
您可以使用 TLS 啟用用戶端身份驗證,以便從應用程式到 Amazon MSK 代理程式和 ZooKeeper 節點的連線。如要使用用戶端身分驗證,您需要一個 AWS 私有 CA。 AWS 私有 CA 可以位於與您的叢集相 AWS 帳戶 同,也可以位於不同的帳戶中。如需有關 AWS 私有 CA的資訊,請參閱建立和管理 AWS 私有 CA.
注意
北京和寧夏區域目前無法使用 TLS 身分驗證。
Amazon MSK 不支援憑證撤銷清單 (CRL)。若要控制對叢集主題的存取或封鎖遭到入侵的憑證,請使用 Apache Kafka ACL 和 AWS 安全性群組。如需有關使用 Apache Kafka ACL 的詳細資訊,請參閱 Apache Kafka ACL。
若要建立支援用戶端身分驗證的叢集
此程序說明如何使用 AWS 私有 CA.
注意
當您使用相互 TLS 來控制存取時,強烈建議您 AWS 私有 CA 為每個 MSK 叢集使用獨立的。這樣做可確保由 PCA 簽署的 TLS 憑證僅透過單一 MSK 叢集進行身分驗證。
-
使用下列內容建立名為
clientauthinfo.json
的檔案。將Private-CA-ARN
取代為您 PCA 的 ARN。{ "Tls": { "CertificateAuthorityArnList": ["
Private-CA-ARN
"] } } -
建立名為
brokernodegroupinfo.json
的檔案,如 使用建立叢集 AWS CLI 中所說明。 -
用戶端身分驗證要求您也啟用用戶端和代理程式之間的傳輸中加密。使用下列內容建立名為
encryptioninfo.json
的檔案。將KMS-Key-ARN
取代為您 KMS 金鑰的 ARN。您可以設定ClientBroker
為TLS
或TLS_PLAINTEXT
。{ "EncryptionAtRest": { "DataVolumeKMSKeyId": "
KMS-Key-ARN
" }, "EncryptionInTransit": { "InCluster": true, "ClientBroker": "TLS" } }如需加密的詳細資訊,請參閱 Amazon MSK 加密。
-
在已 AWS CLI 安裝的機器上,執行下列命令以建立啟用驗證和傳輸中加密的叢集。儲存回應中提供的叢集 ARN。
aws kafka create-cluster --cluster-name "AuthenticationTest" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file://encryptioninfo.json --client-authentication file://clientauthinfo.json --kafka-version "
{YOUR KAFKA VERSION}
" --number-of-broker-nodes 3
設定用戶端以使用身分驗證
-
建立用作用戶端機器的 Amazon EC2 執行個體。為求簡化,請在與叢集相同的 VPC 中建立此執行個體。如需如何建立這類用戶端機器的範例,請參閱 步驟 3:建立用戶端機器。
-
建立主題。如需範例,請參閱 步驟 4:建立主題 下方的說明。
-
在已 AWS CLI 安裝的機器上,執行下列命令以取得叢集的啟動程式代理程式。將
Cluster-ARN
取代為您的叢集 ARN。aws kafka get-bootstrap-brokers --cluster-arn
Cluster-ARN
儲存回應中與
BootstrapBrokerStringTls
相關聯的字串。 -
在用戶端機器上,執行下列命令以使用 JVM 信任存放區來建立用戶端信任存放區。如果您的 JVM 路徑不同,請相應地調整命令。
cp /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-0.amzn2.x86_64/jre/lib/security/cacerts kafka.client.truststore.jks
-
在用戶端機器上,執行下列命令以建立用戶端私有金鑰。將
Distinguished-Name
、Example-Alias
、Your-Store-Pass
和Your-Key-Pass
取代為您選擇的字串。keytool -genkey -keystore kafka.client.keystore.jks -validity 300 -storepass
Your-Store-Pass
-keypassYour-Key-Pass
-dname "CN=Distinguished-Name
" -aliasExample-Alias
-storetype pkcs12 -
在用戶端機器上,執行下列命令,以使用您在上一個步驟中建立的私有金鑰來建立憑證要求。
keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -alias
Example-Alias
-storepassYour-Store-Pass
-keypassYour-Key-Pass
-
打開
client-cert-sign-request
文件並確保以-----BEGIN CERTIFICATE REQUEST-----
開始和以-----END CERTIFICATE REQUEST-----
結束。如果開頭為-----BEGIN NEW CERTIFICATE REQUEST-----
,請從檔案的開頭和結尾刪除單字NEW
(以及其後的單一空格)。 -
在已 AWS CLI 安裝的機器上,執行下列命令來簽署憑證要求。將
Private-CA-ARN
取代為您 PCA 的 ARN。如果想要,您可以變更有效性值。在這裡,我們使用 300 做為範例。aws acm-pca issue-certificate --certificate-authority-arn
Private-CA-ARN
--csr fileb://client-cert-sign-request --signing-algorithm "SHA256WITHRSA" --validity Value=300,Type="DAYS"儲存回應中提供的憑證 ARN。
注意
若要擷取用戶端憑證,請使用
acm-pca get-certificate
指令並指定憑證 ARN。如需詳細資訊,請參閱 AWS CLI Command Reference 中的 get-certificate。 -
執行下列命令以取得為您 AWS 私有 CA 簽署的憑證。將
Certificate-ARN
取代為您從先前命令的回應中取得的 ARN。aws acm-pca get-certificate --certificate-authority-arn
Private-CA-ARN
--certificate-arnCertificate-ARN
-
從執行上一個命令的 JSON 結果中,複製與
Certificate
和CertificateChain
相關聯的字串。將這兩個字符串粘貼到名為的新文件中 signed-certificate-from-acm。首先貼上與Certificate
相關連的字串,接著與CertificateChain
相關聯的字串。將\n
取代為新行字元。以下是您貼上憑證和憑證鏈結之後的檔案結構。-----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
-
在用戶端機器上執行以下命令以將此憑證新增到您的金鑰存放區,以便其在與 MSK 代理程式通話時顯示。
keytool -keystore kafka.client.keystore.jks -import -file signed-certificate-from-acm -alias
Example-Alias
-storepassYour-Store-Pass
-keypassYour-Key-Pass
-
使用下列內容建立名為
client.properties
的檔案。將信任庫和密鑰庫位置調整為您儲存kafka.client.truststore.jks
的路徑。使用您的 Kafka 用戶端版本取代{YOUR KAFKA VERSION}
預留位置。security.protocol=SSL ssl.truststore.location=/tmp/kafka_2.12-
{YOUR KAFKA VERSION}
/kafka.client.truststore.jks ssl.keystore.location=/tmp/kafka_2.12-{YOUR KAFKA VERSION}
/kafka.client.keystore.jks ssl.keystore.password=Your-Store-Pass
ssl.key.password=Your-Key-Pass
使用身分驗證產生和使用訊息
-
執行下列命令以建立主題。
<path-to-your-kafka-installation>
/bin/kafka-topics.sh --create --zookeeperZooKeeper-Connection-String
--replication-factor 3 --partitions 1 --topic ExampleTopic -
執行下列命令以啟動主控台生產者。名為的檔案
client.properties
是您在上一個程序中建立的檔案。<path-to-your-kafka-installation>
/bin/kafka-console-producer.sh --broker-listBootstrapBroker-String
--topic ExampleTopic --producer.config client.properties -
在用戶端機器的新命令視窗中,執行下列命令以啟動主控台取用者。
<path-to-your-kafka-installation>
/bin/kafka-console-consumer.sh --bootstrap-serverBootstrapBroker-String
--topic ExampleTopic --consumer.config client.properties -
在生產者視窗中輸入訊息,並觀看訊息出現在取用者視窗中。