ロールベースアクセス制御のクイックスタート

ロールベースアクセス制御(RBAC)は、Confluent CLI を使用して スーパーユーザー が管理し、組織全体で使用されます。このクイックスタートでは、RBAC 環境でロールを作成して Kafka トピックを操作する方法を示します。

参考

まず最初に、 自動化された RBAC の例 をお試しください。Confluent Platform における RBAC の機能を紹介しています。

前提条件

クラスターへのログイン

  1. RBAC Metadata Service (MDS) の URL(<url>)を指定して Confluent CLI にログインします。詳細については、「confluent login」を参照してください。

    confluent login --url <url>
    
  2. 指示に従って、スーパーユーザーの認証情報を指定します。

    重要

    グループロールバインディングに指定するユーザー ID では大文字と小文字が区別され、AD レコードでの指定と一致する必要があります。スーパーユーザーとしてログインするときは、ログイン ID の大文字と小文字も区別され、ロールバインディング内のユーザー ID の指定と一致する必要があることにも注意してください。

    Enter your Confluent credentials:
    Username:
    Password:
    

    出力は以下のようになります。

    Logged in as user
    

SystemAdmin ロールの付与

ロールバインディングを作成する対象のユーザー(my-user-name)は、このユーザーで実際にシステムにログインする前に、LDAP で作成しておく必要があります。

注釈

Confluent Platform cluster registry を使用すると、Kafka クラスター管理者は Kafka クラスターを Metadata Service(MDS)に一元的に登録し、さらに簡単に RBAC のロールバインディングに関する操作を行うことができます。詳細については、「クラスターレジストリ」を参照してください。

重要

グループロールバインディングに指定するユーザー ID では大文字と小文字が区別され、AD レコードでの指定と一致する必要があります。スーパーユーザーとしてログインするときは、ログイン ID の大文字と小文字も区別され、ロールバインディング内のユーザー ID の指定と一致する必要があることにも注意してください。

  1. Kafka クラスター(<kafka-cluster-id>)のユーザー(<my-user-name>)に、SystemAdmin ロールsystemAdmin)を付与します。詳細については、「confluent iam rbac role-binding create」を参照してください。

    ちなみに

    • このユーザーも、実際にシステムにログインする前に LDAP で作成しておく必要がありますが、これはロールの定義に必須ではありません。
    • クラスター ID を見つけるには、コマンド ./bin/zookeeper-shell <host> :2181 get /cluster/id を実行します。
    confluent iam rbac role-binding create \
    --principal User:<my-user-name> \
    --role SystemAdmin \
    --kafka-cluster-id <kafka-cluster-id>
    
  2. Confluent Platform コンポーネントの SystemAdmin ロール をユーザーに付与します。

    ちなみに

    クラスター ID の検出方法の詳細については、「クラスターの識別子について」を参照してください。

    • Confluent Control Center

      confluent iam rbac role-binding create \
      --principal User:<my-user-name> \
      --role SystemAdmin \
      --kafka-cluster-id <kafka-cluster-id>
      
    • Connect

      confluent iam rbac role-binding create \
      --principal User:<my-user-name> \
      --role SystemAdmin \
      --kafka-cluster-id <kafka-cluster-id> \
      --connect-cluster-id <connect-cluster-id>
      
    • ksqlDB

      confluent iam rbac role-binding create \
      --principal User:<my-user-name> \
      --role SystemAdmin \
      --kafka-cluster-id <kafka-cluster-id> \
      --ksql-cluster-id <ksql-cluster-id>
      
    • Schema Registry

      confluent iam rbac role-binding create \
      --principal User:<my-user-name> \
      --role SystemAdmin \
      --kafka-cluster-id <kafka-cluster-id> \
      --schema-registry-cluster-id <schema-registry-cluster-id>
      

    参照しているクラスターが クラスターレジストリ で定義されている場合は、次のように、クラスター名のみ(クラスター ID なし)を使用してロールバインディングを指定できます。

    confluent iam rbac role-binding create \
    --principal User:<my-user-name> \
    --role SystemAdmin \
    --cluster-name <exampleConnect>
    

Kafka クラスターでの UserAdmin ロールの付与

UserAdmin ロール は、他のユーザーのアクセス許可を管理するためのアクセス許可をユーザーに付与します。以下のコマンドは、UserAdmin をユーザーに付与しています。

confluent iam rbac role-binding create \
--principal User:<my-user-name> \
--role UserAdmin \
--kafka-cluster-id <kafka-cluster-id>

トピックのアクセス許可の付与

Kafka CLI ツール を使用してトピックを操作するには、ブローカーに対する Kafka CLI ツールの認証を可能にする JAAS 構成を指定する必要があります。JAAS 構成を指定するには、ファイル(--command-config )を使用するか、プロデューサーまたはコンシューマーのコマンドラインオプション(--producer-property または --consumer-property)を使用します。この構成は、トピックの作成、生成、消費などを行うために必要です。以下に例を示します。

kafka-console-producer --producer-property sasl.mechanism=OAUTHBEARER

sasl.mechanism で指定する値は、ポートに対するブローカーのセキュリティ構成によって異なります。この場合は、自動化された RBAC デモのデフォルト構成であるため、OAUTHBEARER が使用されます。ただし、ブローカーによって公開されている認証メカニズムであればどれでも使用できます。

重要

外部クライアント通信には、トークンサービスまたは OAUTHBEARER の SASL メカニズム(listener.name.rbac.sasl.enabled.mechanisms=OAUTHBEARER)を使用しないでください。RBAC が有効になっている場合、トークンサービスの対象は Confluent Platform コンポーネント間の内部通信のみとなり(たとえば、Schema Registry ライセンスクライアントには有効)、長時間実行されるサービスプリンシパルやクライアント認証は対象になりません。OAUTHBEARER 設定は内部用であり、変更される可能性があります。また、フル機能の OAuth プロトコルは実装されていません。このため、長期またはクライアントのユースケースには、SASL や mTLS(相互 TLS)など、サポートされているいずれかの認証方法を使用してください。詳細については、「認証方法の概要」を参照してください。

トピックへの書き込みアクセスを許可しているロールを特定するには、「事前定義されたロール」を参照してください。

  1. my-user-name.properties という名前の構成ファイルを作成し、MDS サービス( <metadata_server_urls>)、ユーザー名(<my-user-name>)、およびパスワード(<my-password>)を指定します。これらのプロパティは、コマンドラインを使用して指定することもできます。

    sasl.mechanism=OAUTHBEARER
    # Use SASL_SSL for production environments
    security.protocol=SASL_PLAINTEXT
    sasl.login.callback.handler.class=io.confluent.kafka.clients.plugins.auth.token.TokenUserLoginCallbackHandler
    sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required \
    username="<my-user-name>" \
    password="<my-password>" \
    metadataServerUrls="<metadata_server_urls>";
    
  2. トピック(<topic-name>)へのアクセス許可をユーザーに付与します。たとえば、トピックへのアクセス許可は、リソースレベルで ResourceOwner または DeveloperManage ロールに、クラスターレベルで SystemAdmin ロールに付与できます。トピックを作成するには、トピックリソースに対する DeveloperManage ロールが必要です。トピックの作成権限を付与する他の ロール には、トピックリソースに対する ResourceOwner やクラスターレベルの SystemAdmin があります。

    confluent iam rbac role-binding create \
    --principal User:<my-user-name> \
    --role ResourceOwner \
    --resource Topic:test-topic- \
    --prefix \
    --kafka-cluster-id <kafka-cluster-id>
    
  3. Kafka の kafka-topics ツールを使用し、my-user-name.properties を指定してトピックを作成します。

    <path-to-confluent>/kafka-topics \
    --bootstrap-server <kafka-hostname>:9092 \
    --command-config ~/my-user-name.properties \
    --topic test-topic-1 \
    --create \
    --replication-factor 1 \
    --partitions 3
    

トピックへの生成

トピックに対する生成を行うには、そのトピックに対する DeveloperWrite ロールが(最低限でも)必要です。トピックに対する生成を行うために、トピックの所有者である必要はありません。

各ロールに既に付与されている権限を確認するには、次のコマンドを実行します。

confluent iam rbac role describe <rolename>
  1. トピックへのアクセス許可をユーザーに付与します。トピックリソースに対する DeveloperWrite ロールを使用します。

    confluent iam rbac role-binding create \
    --principal User:<my-producer-user> \
    --role DeveloperWrite \
    --resource Topic:test-topic- \
    --prefix \
    --kafka-cluster-id <kafka-cluster-id>
    
  2. kafka-console-producer ツールを使用して、トピックへの生成を行います。

    echo "test_message" | ./kafka-console-producer \
    --broker-list <kafka-hostname>:9092 \
    --topic test-topic-1 \
    --producer.config ~/my-producer-user.properties \
    --property parse.key=false
    

べき等性を持つプロデューサーによって使用されるすべてのプリンシパルは、クラスターに対する Write として認可される必要があります。Kafka クラスターに対する DeveloperWrite または ResourceOwner の RBAC ロールをバインドすると、Write のアクセス許可が付与されます。2 つのロールのうちアクセス許可が低いのは DeveloperWrite であり、こちらが第一に推奨されます。以下のロールバインディングにより、Write でクラスターにアクセスできるようになります。

confluent iam rbac role-binding create \
   --principal $PRINCIPAL \
   --role DeveloperWrite \
   --resource Cluster:kafka-cluster \
   --kafka-cluster-id $KAFKA_CLUSTER_ID

トピックからの消費

トピックから消費するには、トピックリソースとコンシューマーグループリソースの両方に対する DeveloperRead アクセスが必要です。ユーザーがコンシューマーグループを削除できるようにする必要がある場合は、コンシューマーグループのプレフィックスで ResourceOwner ロールも割り当てます。消費については、(プロデューサーとは異なり)べき等性を持つコンシューマーになるために Kafka の追加のアクセス許可は必要ありません。

各ロールに既に付与されている権限を確認するには、次のコマンドを実行します。

confluent iam rbac role describe <rolename>
  1. トピックリソースへのアクセス許可を付与します。

    confluent iam rbac role-binding create \
    --principal User:<my-consumer-user> \
    --role DeveloperRead \
    --resource Topic:test-topic- \
    --prefix \
    --kafka-cluster-id <kafka-cluster-id>
    
  2. コンシューマーグループへのアクセス許可を付与します。

    コンシューマーグループのメンバーとしてトピックから消費するには、トピックリソースおよびコンシューマーグループリソースに対するアクセス権限が必要です。トピックリソースとコンシューマーグループリソースに DeveloperRead ロールを付与します。前の手順で説明したように、ユーザーがコンシューマーグループを削除できるようにする必要がある場合にのみ、ResourceOwner ロールを割り当てます。

    confluent iam rbac role-binding create \
    --principal User:my-consumer-user \
    --role DeveloperRead \
    --resource Group:console-consumer- \
    --prefix \
    --kafka-cluster-id <kafka-cluster-id>
    
  3. kafka-console-consumer ツールを使用して消費します。

    ./kafka-console-consumer \
    --bootstrap-server <kafka-hostname>:9092 \
    --topic test-topic-1 \
    --consumer.config ~/my-consumer-user.properties \
    --from-beginning \
    --property parse.key=false