

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

# Amazon MSK 的相互 TLS 用戶端身分驗證
<a name="msk-authentication"></a>

您可以使用 TLS 啟用用戶端身分驗證，以便從應用程式連線至 Amazon MSK 代理程式。如要使用用戶端身分驗證，您需要一個 AWS 私有 CA。 AWS 私有 CA 可以與您的叢集 AWS 帳戶 位於相同的 中，也可以位於不同的 帳戶中。如需 AWS 私有 CA的相關資訊，請參閱[建立和管理 AWS 私有 CA](https://docs.aws.amazon.com/acm-pca/latest/userguide/create-CA.html)。

Amazon MSK 不支援憑證撤銷清單 (CRL)。若要控制對叢集主題的存取或封鎖遭到入侵ACLs 和 AWS 安全群組。如需有關使用 Apache Kafka ACL 的詳細資訊，請參閱 [Apache Kafka ACL](msk-acls.md)。

**Topics**
+ [建立支援用戶端身分驗證的 Amazon MSK 叢集](msk-authentication-cluster.md)
+ [設定用戶端以使用身分驗證](msk-authentication-client.md)
+ [使用身分驗證產生和使用訊息](msk-authentication-messages.md)

# 建立支援用戶端身分驗證的 Amazon MSK 叢集
<a name="msk-authentication-cluster"></a>

此程序說明如何使用 啟用用戶端身分驗證 AWS 私有 CA。
**注意**  
當您使用交互 AWS 私有 CA TLS 控制存取時，強烈建議為每個 MSK 叢集使用獨立 。這樣做可確保由 PCA 簽署的 TLS 憑證僅透過單一 MSK 叢集進行身分驗證。

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

   ```
   {
      "Tls": {
          "CertificateAuthorityArnList": ["Private-CA-ARN"]
       }
   }
   ```

1. 建立名為 `brokernodegroupinfo.json` 的檔案，如 [使用 建立佈建的 Amazon MSK 叢集 AWS CLI](create-cluster-cli.md) 中所說明。

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

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

   如需加密的詳細資訊，請參閱 [Amazon MSK 加密](msk-encryption.md)。

1. 在 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
   ```

# 設定用戶端以使用身分驗證
<a name="msk-authentication-client"></a>

此程序說明如何設定 Amazon EC2 執行個體做為用戶端使用身分驗證。

此程序說明如何透過建立用戶端機器、建立主題，以及設定必要的安全設定，來使用身分驗證產生和取用訊息。

1. 建立用作用戶端機器的 Amazon EC2 執行個體。為求簡化，請在與叢集相同的 VPC 中建立此執行個體。如需如何建立這類用戶端機器的範例，請參閱 [步驟 3：建立用戶端機器](create-client-machine.md)。

1. 建立主題。如需範例，請參閱 [步驟 4：在 Amazon MSK 叢集中建立主題](create-topic.md) 下方的說明。

1. 在 AWS CLI 已安裝 的機器上執行下列命令，以取得叢集的引導代理程式。將 *Cluster-ARN* 取代為您的叢集 ARN。

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

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

1. 在用戶端機器上，執行下列命令以使用 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
   ```

1. 在用戶端機器上，執行下列命令以建立用戶端私有金鑰。將 *Distinguished-Name*、*Example-Alias*、*Your-Store-Pass* 和 *Your-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 -keyalg rsa
   ```

1. 在用戶端機器上，執行下列命令，以使用您在上一個步驟中建立的私有金鑰來建立憑證要求。

   ```
   keytool -keystore kafka.client.keystore.jks -certreq -file client-cert-sign-request -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
   ```

1. 打開 `client-cert-sign-request` 文件並確保以 `-----BEGIN CERTIFICATE REQUEST-----` 開始和以 `-----END CERTIFICATE REQUEST-----` 結束。如果開頭為 `-----BEGIN NEW CERTIFICATE REQUEST-----`，請從檔案的開頭和結尾刪除單字 `NEW` (以及其後的單一空格)。

1. 在 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](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/acm-pca/get-certificate.html)。

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

   ```
   aws acm-pca get-certificate --certificate-authority-arn Private-CA-ARN --certificate-arn Certificate-ARN
   ```

1. 從執行上一個命令的 JSON 結果中，複製與 `Certificate` 和 `CertificateChain` 相關聯的字串。將這兩個字串貼到名為 signed-certificate-from-acm 的新文件中。首先貼上與 `Certificate` 相關連的字串，接著與 `CertificateChain` 相關聯的字串。將 `\n` 取代為新行字元。以下是您貼上憑證和憑證鏈結之後的檔案結構。

   ```
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----
   -----BEGIN CERTIFICATE-----
   ...
   -----END CERTIFICATE-----
   ```

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

   ```
   keytool -keystore kafka.client.keystore.jks -import -file signed-certificate-from-acm -alias Example-Alias -storepass Your-Store-Pass -keypass Your-Key-Pass
   ```

1. 使用下列內容建立名為 `client.properties` 的檔案。將信任庫和密鑰庫位置調整為您儲存 `kafka.client.truststore.jks` 的路徑。使用您的 Kafka 用戶端版本取代 *\$1YOUR KAFKA VERSION\$1* 預留位置。

   ```
   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
   ```

# 使用身分驗證產生和使用訊息
<a name="msk-authentication-messages"></a>

此程序說明如何使用身分驗證產生和取用訊息。

1. 執行下列命令以建立主題。名為的檔案 `client.properties` 是您在上一個程序中建立的檔案。

   ```
   <path-to-your-kafka-installation>/bin/kafka-topics.sh --create --bootstrap-server BootstrapBroker-String --replication-factor 3 --partitions 1 --topic ExampleTopic --command-config client.properties
   ```

1. 執行下列命令以啟動主控台生產者。名為的檔案 `client.properties` 是您在上一個程序中建立的檔案。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --bootstrap-server BootstrapBroker-String --topic ExampleTopic --producer.config client.properties
   ```

1. 在用戶端機器的新命令視窗中，執行下列命令以啟動主控台取用者。

   ```
   <path-to-your-kafka-installation>/bin/kafka-console-consumer.sh --bootstrap-server BootstrapBroker-String --topic ExampleTopic --consumer.config client.properties
   ```

1. 在生產者視窗中輸入訊息，並觀看訊息出現在取用者視窗中。