SASL 認証を構成する

クライアントは、オープンソースの Apache Kafka API を使用して Managed Service for Apache Kafka クラスタに接続できます。すべての接続は TLS を使用して暗号化する必要があります。プレーンテキスト通信はサポートされていません。認証は、サポートされている 2 つのメカニズムのいずれかを使用して処理されます。各メカニズムには、SASL または mTLS という異なる認証情報タイプがあります。

このドキュメントでは、SASL メソッドを使用して認証する方法について説明します。クライアントは、サービス アカウントなど、認可された Identity and Access Management プリンシパルの認証情報を使用して認証します。Managed Service for Apache Kafka は、すべての接続のサーバーサイド ブローカー証明書を管理します。

始める前に

以下の説明をご覧ください。

サービス アカウントにマネージド Kafka クライアント ロールを付与する

クラスタに接続するために使用するサービス アカウントに、クラスタを含むプロジェクトの roles/managedkafka.client IAM ロールを付与する必要があります。

マネージド Kafka クライアント ロールには、すべての接続に必要な権限 managedkafka.clusters.connect が含まれています。 サービス アカウントにマネージド Kafka クライアント ロールを付与する手順は、次のとおりです。

コンソール

  1. コンソールで、[IAM] ページに移動します。 Google Cloud
    IAM に移動
  2. プロジェクトが、Managed Service for Apache Kafka クライアントがアクセスするコンシューマー プロジェクトに設定されていることを確認します。
  3. [アクセス権を付与] をクリックします。
  4. 新しいページで、[プリンシパルを追加] に、使用するサービス アカウントのメールアドレスを入力します。
  5. [**ロールを割り当てる**] で、**マネージド Kafka クライアント** ロールを選択します。
  6. [保存] をクリックします。

gcloud CLI

  1. コンソールで Cloud Shell をアクティブにします。 Google Cloud

    Cloud Shell をアクティブにする

    コンソールの下部にある Google Cloud Cloud Shell セッションが開始し、コマンドライン プロンプトが表示されます。Cloud Shell はシェル環境です 。Google Cloud CLI がすでにインストールされており、現在のプロジェクトの値もすでに設定されています 。セッションが初期化されるまで数秒かかることがあります。

  2. gcloud projects add-iam-policy-binding コマンドを実行します。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member serviceAccount:SERVICE_ACCOUNT_EMAIL \
      --role roles/managedkafka.client

    次のように置き換えます。

    • PROJECT_ID は、プロジェクト ID です。

    • SERVICE_ACCOUNT_EMAIL は サービス アカウントのメールアドレスです。

に対する認証を行うように Kafka クライアントを構成する Google Cloud

次のいずれかのメカニズムを使用して、Kafka クライアントを認証できます。 Google Cloud

OAUTHBEARER(推奨): このメカニズムでは、 アプリケーションのデフォルト認証情報(ADC)を使用する必要があります。ADC は、アプリケーション環境に基づいて認証情報を自動的に検索するために認証ライブラリが使用するストラテジです。ADC が認証情報を探す場所と順序については、 アプリケーションのデフォルト認証情報の仕組みをご覧ください。

SASL/PLAIN: このメカニズムでは、サービス アカウント キーの JSON ファイルまたはアクセス トークンから派生できるユーザー名とパスワード を使用する必要があります。

一般に、OAUTHBEARER を使用することをおすすめします。ただし、SASL/PLAIN はテストに便利なメカニズムです。

OAuthBearer 認証

オープンソースの Kafka API に対する認証方法については、 GitHub のドキュメントをご覧ください。

SASL/PLAIN 認証

Managed Service for Apache Kafka は、サービス アカウント キーの JSON ファイルまたはアクセス トークンを使用した SASL/PLAIN 認証をサポートしています。

サービス アカウント キーの JSON ファイル

この方法は、すべての Kafka クライアントに適用できます。

  1. クライアントに使用するサービス アカウントのサービス アカウント キーの JSON ファイル をダウンロードします。

  2. base64 エンコードを使用してサービス アカウント ファイルをエンコードし、認証文字列として使用します。ファイル名を my_service_account_key.json とします。

    Linux または macOS システムでは、base64 コマンド(通常はデフォルトでインストールされています)を次のように使用します。

    base64 -w 0 < my_service_account_key.json > password.txt
    

    このコマンドによって、次のアクションが実行されます。

    • base64 < my_service_account_key.json: ファイル my_service_account_key.jsonの内容を読み取ります。

    • base64 エンコードを使用してファイルの内容をエンコードします。Base64 エンコードは、バイナリデータ(サービス アカウント ファイルの JSON データなど)を ASCII テキストとして表す方法です。これは、テキスト用に設計されたチャネルでデータを送信する場合によく使用されます。

    • > password.txt: base64 コマンドの出力(サービス アカウント ファイルの base64 エンコード バージョン)を password.txt という名前の新しいファイルにリダイレクトします。

  3. パスワード ファイルの内容は、次のパラメータを使用して認証に使用できます。

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="SERVICE_ACCOUNT_EMAIL_ADDRESS" \
    password="CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE";
    

    次のように置き換えます。

    • SERVICE_ACCOUNT_EMAIL_ADDRESS: 認証に使用するサービス アカウントのメールアドレス。
    • CONTENTS_OF_BASE64_ENCODED_PASSWORD_FILE: 前のステップで取得した base64 エンコードされたパスワード ファイルの内容。これは 1 行にする必要があります。

クラスタへの受信接続を認証するときに、Managed Service for Apache Kafka は次のことを確認します。

  1. 指定されたユーザー名が、パスワードで使用されているキーのサービス アカウントと一致している。

  2. 指定されたサービス アカウント プリンシパルに、クラスタに対する権限 managedkafka.clusters.connectroles/managedkafka.client IAM ロールに含まれる)がある。

アクセス トークン

  1. 認証に使用するプリンシパルのアクセス トークンを取得します。 たとえば、現在の gcloud CLI プリンシパルのアクセス トークンを取得します。

    gcloud auth print-access-token
    
  2. アクセス トークンは、次のパラメータを使用して認証に使用できます。

    security.protocol=SASL_SSL
    sasl.mechanism=PLAIN
    sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required \
    username="PRINCIPAL_EMAIL_ADDRESS" \
    password="ACCESS_TOKEN_VALUE";
    
    

    次のように置き換えます。

    • PRINCIPAL_EMAIL_ADDRESS: アクセス トークンの取得に使用したプリンシパルのメールアドレス。
    • ACCESS_TOKEN_VALUE: 前のステップで取得したアクセス トークンの値。

クラスタへの受信接続を認証するときに、Managed Service for Apache Kafka は次のことを確認します。

  1. アクセス トークンが有効であり、期限切れになっていない。

  2. 指定されたユーザー名が、アクセス トークンに関連付けられているプリンシパルのメールアドレスと一致している。

  3. アクセス トークンのプリンシパルに、クラスタに対する権限 managedkafka.clusters.connectroles/managedkafka.client IAM ロールに含まれる)がある。

Workload Identity Federation for GKE

Managed Service for Apache Kafka は、オープンソースの Apache Kafka API に対する Workload Identity Federation for GKE を使用した認証をサポートしています。 認証は、SASL/PLAIN と SASL/OAUTHBEARER の両方でサポートされています。

Managed Service for Apache Kafka で Workload Identity Federation for GKE を使用するには、次の要件を満たす必要があります。

  1. GKE バージョン 1.31.1-gke.1241000 以降を使用します。
  2. iam.gke.io/return-principal-id-as-email: "true" を使用して Kubernetes サービス アカウントにアノテーションを付けます。 次に例を示します。

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: kafka-service-account
      annotations:
        iam.gke.io/return-principal-id-as-email: "true"
    
  3. ローカル認証サーバーを使用する場合は、google-auth パッケージのバージョン 2.40.3 以降も使用していることを確認してください。

GKE プリンシパルに権限 managedkafka.clusters.connectroles/managedkafka.client IAM ロールに含まれる)があることを確認します。

Managed Service for Apache Kafka は、オープンソースの Apache Kafka API に対する Fleet ワークロード ID を使用した認証をサポートしていません。 代わりに、Kubernetes サービス アカウントを IAM サービス アカウントにリンクできます

トラブルシューティング

SASL 認証の問題のトラブルシューティング方法については、 認証エラーをご覧ください。

次のステップ

Apache Kafka® は、Apache Software Foundation または米国その他の諸国における関連会社の商標です。