相互 TLS 認証 - Amazon Managed Streaming for Apache Kafka

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

相互 TLS 認証

アプリケーションから Amazon MSK ブローカーへの接続に対して TLS によるクライアント認証を有効にできます。クライアント認証を使用するには、 AWS Private CAが必要です。は、クラスター AWS アカウント と同じ にあるか、別のアカウントにあるか AWS Private CA のいずれかです。の詳細については、 AWS Private CA「 の作成と管理 AWS Private CA」を参照してください。

注記

TLS 認証は現在、北京および寧夏回族自治区では利用できません。

Amazon MSK は、証明書失効リスト (CRL) をサポートしていません。クラスタートピックへのアクセスを制御したり、侵害された証明書をブロックしたりするには、Apache Kafka ACLs と AWS セキュリティグループを使用します。Apache Kafka ACL の使用については、「Apache Kafka ACL」を参照してください。

クライアント認証をサポートするクラスターを作成するには

この手順では、 を使用してクライアント認証を有効にする方法を示します AWS Private CA。

注記

相互 TLS を使用してアクセスを制御する場合は、MSK クラスター AWS Private CA ごとに独立した を使用することを強くお勧めします。そうすることで、PCA によって署名された TLS 証明書が単一の MSK クラスターでのみ認証されるようになります。

  1. 次の内容で、clientauthinfo.json という名前のファイルを作成します。Private-CA-ARN を PCA の ARN に置き換えます。

    { "Tls": { "CertificateAuthorityArnList": ["Private-CA-ARN"] } }
  2. を使用したクラスターの作成 AWS CLI の説明に従って、brokernodegroupinfo.json という名前のファイルを作成します。

  3. クライアント認証では、クライアントとブローカー間の転送中に暗号化を有効にする必要があります。次の内容で、encryptioninfo.json という名前のファイルを作成します。KMS-Key-ARN を KMS キーの ARN と置き換えます。ClientBrokerTLS または TLS_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. [Create a topic](トピックの作成) 例については、「ステップ 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-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
  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 コマンドリファレンス」の「get-certificate」を参照してください。

  9. 次のコマンドを実行して、 AWS Private CA 署名された証明書を取得します。Certificate-ARN を、前のコマンドに対するレスポンスから取得した ARN に置き換えます。

    aws acm-pca get-certificate --certificate-authority-arn Private-CA-ARN --certificate-arn Certificate-ARN
  10. 前のコマンドを実行した JSON 結果から、Certificate および CertificateChain に関連付けられた文字列をコピーします。これら 2 つの文字列を という名前の新しいファイルに貼り付けます 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 を保存したパスに調整します。{YOUR KAFKA VERSION} プレースホルダーは、ご使用の Kafka クライアントバージョンに置き換えてください。

    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. 次のコマンドを実行して、トピックを作成します。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
  2. 次のコマンドを実行して、コンソールプロデューサーを起動します。client.properties という名前のファイルは、前の手順で作成したファイルです。

    <path-to-your-kafka-installation>/bin/kafka-console-producer.sh --bootstrap-server 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. プロデューサーウィンドウにメッセージを入力し、コンシューマーウィンドウに表示されるようにします。