交互 TLS 驗證 - Amazon Managed Streaming for Apache Kafka

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

交互 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 叢集進行身分驗證。

  1. 使用下列內容建立名為 clientauthinfo.json 的檔案。將 Private-CA-ARN 取代為您 PCA 的 ARN。

    { "Tls": { "CertificateAuthorityArnList": ["Private-CA-ARN"] } }
  2. 建立名為 brokernodegroupinfo.json 的檔案,如 使用建立叢集 AWS CLI 中所說明。

  3. 用戶端身分驗證要求您也啟用用戶端和代理程式之間的傳輸中加密。使用下列內容建立名為 encryptioninfo.json 的檔案。將 KMS-Key-ARN 取代為您 KMS 金鑰的 ARN。您可以設定 ClientBrokerTLSTLS_PLAINTEXT

    { "EncryptionAtRest": { "DataVolumeKMSKeyId": "KMS-Key-ARN" }, "EncryptionInTransit": { "InCluster": true, "ClientBroker": "TLS" } }

    如需加密的詳細資訊,請參閱 Amazon MSK 加密

  4. 在已 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

設定用戶端以使用身分驗證

  1. 建立用作用戶端機器的 Amazon EC2 執行個體。為求簡化,請在與叢集相同的 VPC 中建立此執行個體。如需如何建立這類用戶端機器的範例,請參閱 步驟 3:建立用戶端機器

  2. 建立主題。如需範例,請參閱 步驟 4:建立主題 下方的說明。

  3. 在已 AWS CLI 安裝的機器上,執行下列命令以取得叢集的啟動程式代理程式。將 Cluster-ARN 取代為您的叢集 ARN。

    aws kafka get-bootstrap-brokers --cluster-arn Cluster-ARN

    儲存回應中與 BootstrapBrokerStringTls 相關聯的字串。

  4. 在用戶端機器上,執行下列命令以使用 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
  5. 在用戶端機器上,執行下列命令以建立用戶端私有金鑰。將 Distinguished-NameExample-AliasYour-Store-PassYour-Key-Pass 取代為您選擇的字串。

    keytool -genkey -keystore kafka.client.keystore.jks -validity 300 -storepass Your-Store-Pass -keypass Your-Key-Pass -dname "CN=Distinguished-Name" -alias Example-Alias -storetype pkcs12
  6. 在用戶端機器上,執行下列命令,以使用您在上一個步驟中建立的私有金鑰來建立憑證要求。

    keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
  7. 打開 client-cert-sign-request 文件並確保以 -----BEGIN CERTIFICATE REQUEST----- 開始和以 -----END CERTIFICATE REQUEST----- 結束。如果開頭為 -----BEGIN NEW CERTIFICATE REQUEST-----,請從檔案的開頭和結尾刪除單字 NEW (以及其後的單一空格)。

  8. 在已 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

  9. 執行下列命令以取得為您 AWS 私有 CA 簽署的憑證。將 Certificate-ARN 取代為您從先前命令的回應中取得的 ARN。

    aws acm-pca get-certificate --certificate-authority-arn Private-CA-ARN --certificate-arn Certificate-ARN
  10. 從執行上一個命令的 JSON 結果中,複製與 CertificateCertificateChain 相關聯的字串。將這兩個字符串粘貼到名為的新文件中 signed-certificate-from-acm。首先貼上與 Certificate 相關連的字串,接著與 CertificateChain 相關聯的字串。將 \n 取代為新行字元。以下是您貼上憑證和憑證鏈結之後的檔案結構。

    -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----
  11. 在用戶端機器上執行以下命令以將此憑證新增到您的金鑰存放區,以便其在與 MSK 代理程式通話時顯示。

    keytool -keystore kafka.client.keystore.jks -import -file signed-certificate-from-acm -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
  12. 使用下列內容建立名為 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

使用身分驗證產生和使用訊息

  1. 執行下列命令以建立主題。

    <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --zookeeper ZooKeeper-Connection-String --replication-factor 3 --partitions 1 --topic ExampleTopic
  2. 執行下列命令以啟動主控台生產者。名為的檔案 client.properties 是您在上一個程序中建立的檔案。

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --broker-list BootstrapBroker-String --topic ExampleTopic --producer.config client.properties
  3. 在用戶端機器的新命令視窗中,執行下列命令以啟動主控台取用者。

    <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBroker-String --topic ExampleTopic --consumer.config client.properties
  4. 在生產者視窗中輸入訊息,並觀看訊息出現在取用者視窗中。