ロールベースアクセス制御のクイックスタート¶
ロールベースアクセス制御(RBAC)は、Confluent CLI を使用して スーパーユーザー が管理し、組織全体で使用されます。このクイックスタートでは、RBAC 環境でロールを作成して Kafka トピックを操作する方法を示します。
参考
まず最初に、 自動化された RBAC の例 をお試しください。Confluent Platform における RBAC の機能を紹介しています。
- 前提条件
- Confluent Platform。
- Confluent CLI (5.4.x 以降の Confluent Platform に付属しています)。
- Confluent Platform の商用コンポーネント
confluent-server
。詳細については、「Confluent Server への移行」を参照してください。 - 自分がスーパーユーザーのアクセス権限または SystemAdmin ロールを持っている RBAC 対応クラスター。詳細については、「ロールベースアクセス制御の事前定義されたロール」を参照してください。
クラスターへのログイン¶
RBAC Metadata Service (MDS) の URL(
<url>
)を指定して Confluent CLI にログインします。詳細については、「confluent login」を参照してください。confluent login --url <url>
指示に従って、スーパーユーザーの認証情報を指定します。
重要
グループロールバインディングに指定するユーザー 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 の指定と一致する必要があることにも注意してください。
Kafka クラスター(
<kafka-cluster-id>
)のユーザー(<my-user-name>
)に、SystemAdmin ロール (systemAdmin
)を付与します。詳細については、「confluent iam rolebinding create」を参照してください。ちなみに
- このユーザーも、実際にシステムにログインする前に LDAP で作成しておく必要がありますが、これはロールの定義に必須ではありません。
- クラスター ID を見つけるには、コマンド
./bin/zookeeper-shell <host> :2181 get /cluster/id
を実行します。
confluent iam rolebinding create \ --principal User:<my-user-name> \ --role SystemAdmin \ --kafka-cluster-id <kafka-cluster-id>
Confluent Platform コンポーネントの SystemAdmin ロール をユーザーに付与します。
ちなみに
クラスター ID の検出方法の詳細については、「クラスターの識別子について」を参照してください。
Confluent Control Center
confluent iam rolebinding create \ --principal User:<my-user-name> \ --role SystemAdmin \ --kafka-cluster-id <kafka-cluster-id>
Connect
confluent iam rolebinding create \ --principal User:<my-user-name> \ --role SystemAdmin \ --kafka-cluster-id <kafka-cluster-id> \ --connect-cluster-id <connect-cluster-id>
ksqlDB
confluent iam rolebinding create \ --principal User:<my-user-name> \ --role SystemAdmin \ --kafka-cluster-id <kafka-cluster-id> \ --ksql-cluster-id <ksql-cluster-id>
Schema Registry
confluent iam rolebinding 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 rolebinding create \ --principal User:<my-user-name> \ --role SystemAdmin \ --cluster-name <exampleConnect>
Kafka クラスターでの UserAdmin ロールの付与¶
UserAdmin ロール は、他のユーザーのアクセス許可を管理するためのアクセス許可をユーザーに付与します。以下のコマンドは、UserAdmin をユーザーに付与しています。
confluent iam rolebinding 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)など、サポートされているいずれかの認証方法を使用してください。詳細については、「認証方法の概要」を参照してください。
トピックへの書き込みアクセスを許可しているロールを特定するには、「事前定義されたロール」を参照してください。
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>";
トピック(
<topic-name>
)へのアクセス許可をユーザーに付与します。たとえば、トピックへのアクセス許可は、リソースレベルで ResourceOwner または DeveloperManage ロールに、クラスターレベルで SystemAdmin ロールに付与できます。トピックを作成するには、トピックリソースに対する DeveloperManage ロールが必要です。トピックの作成権限を付与する他の ロール には、トピックリソースに対する ResourceOwner やクラスターレベルの SystemAdmin があります。confluent iam rolebinding create \ --principal User:<my-user-name> \ --role ResourceOwner \ --resource Topic:test-topic- \ --prefix \ --kafka-cluster-id <kafka-cluster-id>
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 role describe <rolename>
トピックへのアクセス許可をユーザーに付与します。トピックリソースに対する DeveloperWrite ロールを使用します。
confluent iam rolebinding create \ --principal User:<my-producer-user> \ --role DeveloperWrite \ --resource Topic:test-topic- \ --prefix \ --kafka-cluster-id <kafka-cluster-id>
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
べき等性を持つプロデューサーによって使用されるすべてのプリンシパルは、クラスターに対する IdempotentWrite として認可される必要があります。Kafka クラスターに対する DeveloperWrite または ResourceOwner の RBAC ロールをバインドすると、IdempotentWrite のアクセス許可が付与されます。2 つのロールのうちアクセス許可が低いのは DeveloperWrite であり、こちらが第一に推奨されます。以下のロールバインディングにより、IdempotentWrite でクラスターにアクセスできるようになります。
confluent iam rolebinding create \
--principal $PRINCIPAL \
--role DeveloperWrite \
--resource Cluster:kafka-cluster \
--kafka-cluster-id $KAFKA_CLUSTER_ID
トピックからの消費¶
トピックから消費するには、トピックリソースとコンシューマーグループリソースの両方に対する DeveloperRead アクセスが必要です。ユーザーがコンシューマーグループを削除できるようにする必要がある場合は、コンシューマーグループのプレフィックスで ResourceOwner ロールも割り当てます。消費については、(プロデューサーとは異なり)べき等性を持つコンシューマーになるために Kafka の追加のアクセス許可は必要ありません。
各ロールに既に付与されている権限を確認するには、次のコマンドを実行します。
confluent iam role describe <rolename>
トピックリソースへのアクセス許可を付与します。
confluent iam rolebinding create \ --principal User:<my-consumer-user> \ --role DeveloperRead \ --resource Topic:test-topic- \ --prefix \ --kafka-cluster-id <kafka-cluster-id>
コンシューマーグループへのアクセス許可を付与します。
コンシューマーグループのメンバーとしてトピックから消費するには、トピックリソースおよびコンシューマーグループリソースに対するアクセス権限が必要です。トピックリソースとコンシューマーグループリソースに DeveloperRead ロールを付与します。前の手順で説明したように、ユーザーがコンシューマーグループを削除できるようにする必要がある場合にのみ、ResourceOwner ロールを割り当てます。
confluent iam rolebinding create \ --principal User:my-consumer-user \ --role DeveloperRead \ --resource Group:console-consumer- \ --prefix \ --kafka-cluster-id <kafka-cluster-id>
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