mTLSの構成

Mutual TLS (mTLS)は、標準のTransport Layer Security (TLS)プロトコルの拡張であり、双方向認証を保証し、標準のTLSを超えて別のセキュリティ・レイヤーを追加します。Apache Kafkaを使用したストリーミングでクラスタのmTLS認証を構成するために必要なタスクを完了します。

  1. 証明書を生成
  2. 作成された証明書でKafkaクラスタを更新します
  3. Kafkaクライアントの構成

証明書を生成中

mTLSでは、KafkaクライアントとKafkaブローカの両方が、デジタル証明書を使用して互いのアイデンティティを検証します。Kafkaクライアントとブローカの両方に独自の証明書があり、証明書は証明書保険(CA)によって署名されている必要があります。CAは、デジタル証明書を発行、署名および格納する信頼できるエンティティです。

mTLSでは、様々なタイプのデジタル証明書が使用されます。

  • クライアント証明書: クライアント(Kafkaクライアント)に発行され、クライアントをサーバー(Kafkaブローカ)に対して認証し、通常はCAによって署名されます。
  • サーバー証明書: サーバー(Kafkaブローカ)に発行され、クライアント(Kafkaクライアント)に対して認証され、通常はCAによって署名されます。
  • 中間証明書: ルートCAとリーフ証明書(クライアント証明書またはサーバー証明書)の間に配置します。中間証明書はCAによって発行され、リーフ証明書を発行できます。中間証明書は、ルートCAへのアクセスを制限することでセキュリティを強化します。
  • ルート証明書: 信頼階層内の最上位レベルの証明書で、中間証明書の署名に使用されます。ルート証明書は自己署名されています。これらは信頼できる証明書ストアにインストールされます。

デフォルトでは、Apache Kafkaブローカ証明書を使用したストリーミングは、DigiCert Global Root G2という名前のDigicertパブリック・ルートCAによって署名されます。DigiCertは信頼できるCAで、そのルート証明書はほとんどのJDKおよびクライアント・ツールのデフォルトのトラストストアにすでに含まれている可能性があり、これを使用してセキュアな接続を確立できます。

これは、テスト・クラスタに使用できるカスタム・トラストストアを使用して証明書を作成する例です。本番クラスタの場合は、信頼できるCAによって署名された証明書を使用します。

  1. opensslがインストールされていることを確認します。
    openssl version
  2. ルート証明書に使用する秘密キーを生成します。次のコマンドは、RSAアルゴリズムを使用して4096ビット秘密キーを生成し、指定されたパスワードを使用してAES-256アルゴリズムで暗号化し、rootCA.keyという名前のファイルに保存します。
    openssl genpkey -algorithm RSA -out rootCA.key -aes256 -pass pass:<yourpassword> -pkeyopt rsa_keygen_bits:4096
  3. ステップ2で生成された秘密キーを使用して、自己署名ルート証明書を作成します。次のコマンドは、rootCA.keyに格納されている秘密キーを使用して、新しい自己署名付きX.509証明書を作成します。証明書はSHA-256で署名された10年間有効であり、出力はrootCA.pemに保存されます。
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem -passin pass:<yourpassword>
  4. リーフ証明書に使用する秘密キーを生成します。次のコマンドは、RSAアルゴリズムを使用して2048ビットの秘密キーを生成し、leaf.keyという名前のファイルに保存します。
    openssl genpkey -algorithm RSA -out leaf.key -pkeyopt rsa_keygen_bits:2048
  5. ステップ4で生成された秘密キーを使用して、リーフ証明書の証明書署名リクエスト(CSR)を作成します。次のコマンドは、leaf.keyに格納されている秘密キーを使用して新しいCSRを生成し、CSRをleaf.csrという名前のファイルに保存します。このCSRは、署名付き証明書を取得するために認証局(CA)に送信できます。
    openssl req -new -key leaf.key -out leaf.csr
  6. ステップ5で生成されたCSRを使用して、署名付き証明書を作成します。次のコマンドは、CSRをleaf.csrから取得し、ルートCA rootCA.pemおよびrootCA.keyに格納されている秘密キーを使用して署名し、leaf.crtとして保存された署名付き証明書を作成します。証明書は825日間有効で、SHA-256を使用して署名します。このコマンドは、証明書を追跡するためのシリアル番号も生成します。
    openssl x509 -req -in leaf.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out leaf.crt -days 825 -sha256 -passin pass:<yourpassword>

Kafkaクラスタの更新

作成された証明書でKafkaクラスタを更新します。

  1. 「Kafkaクラスタ」リスト・ページで、操作するクラスタを検索します。リスト・ページまたはクラスタの検索に関するヘルプが必要な場合は、クラスタのリストを参照してください。
  2. クラスタの「アクション」メニュー(3つのドット)から、「クラスタの編集」を選択します。
  3. 「クラスタの編集」パネルの「セキュリティ設定」セクションで、証明書の内容を入力します。
  4. 「更新」を選択します。

Kafkaクライアントの構成

mTLSを使用してKafkaクラスタに接続するには、Kafkaトラストストアを設定した後で、Kafkaクライアント・プロパティ・ファイルを更新します。

  1. 次のコマンドを実行して、リーフ証明書とその秘密キーをkafka-keystore.p12という名前の単一のファイルにパッケージ化します。
    openssl pkcs12 -export -in <leaf.crt> -inkey <leaf.key> -out kafka-keystore.p12 -name <kafka-key>
  2. kafka-keystore.p12ファイルのパスワードを入力するように求められます。次のステップに必要なパスワードとファイルの場所を覚えておいてください。
  3. 次の情報を使用してclient.propertiesファイルを作成します。
    security.protocol=SSL
    ssl.certificate.location=<path/to/leaf.cert>
    ssl.key.location=<path/to/leaf.key>
    ssl.keystore.password=<password-created-in-previous-step>
    ssl.keystore.location=<path/to/kafka-keystore.p12>
  4. client.propertiesファイルの権限を変更します。
    chmod 600 </path/to/client.properties>