4.7. 認可
Kafka ブローカーの認可は、authorizer プラグインを使用して実装されます。
本セクションでは、Kafka で提供される AclAuthorizer プラグインを使用する方法を説明します。
または、独自の認可プラグインを使用できます。たとえば、OAuth 2.0 トークンベースの認証 を使用している場合、OAuth 2.0 認可 を使用できます。
4.7.1. シンプルな ACL authorizer リンクのコピーリンクがクリップボードにコピーされました!
AclAuthorizer を含む authorizer プラグインは authorizer.class.name プロパティーを使用して有効にします。
authorizer.class.name=kafka.security.auth.AclAuthorizer
authorizer.class.name=kafka.security.auth.AclAuthorizer
選択した authorizer には完全修飾名が必要です。AclAuthorizer の場合、完全修飾名は kafka.security.auth.AclAuthorizer です。
4.7.1.1. ACL ルール リンクのコピーリンクがクリップボードにコピーされました!
AclAuthorizer は ACL ルールを使用して Kafka ブローカーへのアクセスを管理します。
ACL ルールは以下の形式で定義されます。
プリンシパル P は、ホスト H から Kafka リソース R で操作 O を許可または拒否されます。
たとえば、以下のようにルールを設定できます。
John は、ホスト 127.0.0.1 からトピック コメント を 表示 できます。
ホストは、John が接続しているマシンの IP アドレスです。
ほとんどの場合、ユーザーはプロデューサーまたはコンシューマーアプリケーションです。
Consumer01 は、ホスト 127.0.0.1 からコンシューマーグループ アカウント に 書き込み できます。
ACL ルールが存在しない場合
特定のリソースに ACL ルールが存在しない場合は、すべてのアクションが拒否されます。この動作は、Kafka 設定ファイル /opt/kafka/config/server.properties で allow.everyone.if.no.acl.found プロパティーを true に設定すると変更できます。
4.7.1.2. プリンシパル リンクのコピーリンクがクリップボードにコピーされました!
プリンシパル はユーザーのアイデンティティーを表します。ID の形式は、クライアントが Kafka に接続するために使用される認証メカニズムによって異なります。
-
User:ANONYMOUS: 認証なしで接続する場合 User:<username>: PLAIN や SCRAM などの単純な認証メカニズムを使用して接続する場合例:
User:adminまたはUser:user1User:<DistinguishedName>: TLS クライアント認証を使用して接続する場合例:
User:CN=user1,O=MyCompany,L=Prague,C=CZ-
User:<Kerberos username>: Kerberos を使用して接続する場合
DistinguishedName はクライアント証明書からの識別名です。
Kerberos ユーザー名 は、Kerberos プリンシパルの主要部分で、Kerberos を使用して接続する場合のデフォルトで使用されます。sasl.kerberos.principal.to.local.rules プロパティーを使用して、Kerberos プリンシパルから Kafka プリンシパルを構築する方法を設定できます。
4.7.1.3. ユーザーの認証 リンクのコピーリンクがクリップボードにコピーされました!
認可を使用するには、認証を有効にし、クライアントにより使用される必要があります。そうでないと、すべての接続のプリンシパルは User:ANONYMOUS になります。
認証方法の詳細は、暗号化と認証 を参照してください。
4.7.1.4. スーパーユーザー リンクのコピーリンクがクリップボードにコピーされました!
スーパーユーザーは、ACL ルールに関係なくすべてのアクションを実行できます。
スーパーユーザーは、super.users プロパティーを使用して Kafka 設定ファイルで定義されます。
以下に例を示します。
super.users=User:admin,User:operator
super.users=User:admin,User:operator
4.7.1.5. レプリカブローカーの認証 リンクのコピーリンクがクリップボードにコピーされました!
認可を有効にすると、これはすべてのリスナーおよびすべての接続に適用されます。これには、ブローカー間のデータのレプリケーションに使用される inter-broker の接続が含まれます。そのため、認可を有効にする場合は、inter-broker 接続に認証を使用し、ブローカーが使用するユーザーに十分な権限を付与してください。たとえば、ブローカー間の認証で kafka-broker ユーザーが使用される場合、スーパーユーザー設定にはユーザー名 super.users=User:kafka-broker が含まれている必要があります。
4.7.1.6. サポートされるリソース リンクのコピーリンクがクリップボードにコピーされました!
Kafka ACL は、以下のタイプのリソースに適用できます。
- Topics
- コンシューマーグループ
- クラスター
- TransactionId
- DelegationToken
4.7.1.7. サポートされる操作 リンクのコピーリンクがクリップボードにコピーされました!
AclAuthorizer はリソースでの操作を承認します。
以下の表で X の付いたフィールドは、各リソースでサポートされる操作を表します。
| Topics | コンシューマーグループ | クラスター | |
|---|---|---|---|
| Read | X | X | |
| Write | X | ||
| Create | X | ||
| Delete | X | ||
| Alter | X | ||
| Describe | X | X | X |
| ClusterAction | X | ||
| すべて | X | X | X |
4.7.1.8. ACL 管理オプション リンクのコピーリンクがクリップボードにコピーされました!
ACL ルールは、Kafka ディストリビューションパッケージの一部として提供される bin/kafka-acls.sh ユーティリティーを使用して管理されます。
kafka-acls.sh パラメーターオプションを使用して、ACL ルールを追加、リスト表示、および削除したり、その他の機能を実行したりします。
パラメーターには、--add など、二重ハイフンの標記が必要です。
| オプション | タイプ | 説明 | デフォルト |
|---|---|---|---|
|
| Action | ACL ルールを追加します。 | |
|
| Action | ACL ルールを削除します。 | |
|
| Action | ACL ルールをリスト表示します。 | |
|
| Action | authorizer の完全修飾クラス名。 |
|
|
| Configuration | 初期化のために authorizer に渡されるキー/値のペア。
| |
|
| リソース | Kafka クラスターに接続するためのホスト/ポートのペア。 |
このオプションまたは |
|
| リソース |
管理クライアントに渡す設定プロパティーファイル。これは | |
|
| リソース | クラスターを ACL リソースとして指定します。 | |
|
| リソース | トピック名を ACL リソースとして指定します。
ワイルドカードとして使用されるアスタリスク (
1 つのコマンドに複数の | |
|
| リソース | コンシューマーグループ名を ACL リソースとして指定します。
1 つのコマンドに複数の | |
|
| リソース | トランザクション ID を ACL リソースとして指定します。 トランザクション配信は、プロデューサーによって複数のパーティションに送信されたすべてのメッセージが正常に配信されるか、いずれも配信されない必要があることを意味します。
ワイルドカードとして使用されるアスタリスク ( | |
|
| リソース | 委任トークンを ACL リソースとして指定します。
ワイルドカードとして使用されるアスタリスク ( | |
|
| Configuration |
|
|
|
| プリンシパル | allow ACL ルールに追加されるプリンシパル。
1 つのコマンドに複数の | |
|
| プリンシパル | 拒否 ACL ルールに追加されるプリンシパル。
1 つのコマンドに複数の | |
|
| プリンシパル |
プリンシパルの ACL のリストを返すために
1 つのコマンドに複数の | |
|
| ホスト |
ホスト名または CIDR 範囲はサポートされていません。 |
|
|
| ホスト |
ホスト名または CIDR 範囲はサポートされていません。 |
|
|
| 操作 | 操作を許可または拒否します。
1 つのコマンドに複数の | すべて |
|
| ショートカット | メッセージプロデューサーが必要とするすべての操作を許可または拒否するためのショートカット (トピックでは WRITE と DESCRIBE、クラスターでは CREATE)。 | |
|
| ショートカット | メッセージコンシューマーが必要とするすべての操作を許可または拒否するためのショートカット (トピックについては READ と DESCRIBE、コンシューマーグループについては READ)。 | |
|
| ショートカット |
プロデューサーが特定のトランザクション ID に基づいてメッセージを送信することを許可されている場合、Idepmotence は自動的に有効になります。 | |
|
| ショートカット | すべてのクエリーを受け入れ、プロンプトは表示されないショートカット。 |
4.7.2. 認可の有効化 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、Kafka ブローカーでの認可用に AclAuthorizer プラグインを有効にする方法を説明します。
前提条件
- ブローカーとして使用されるすべてのホストに AMQ Streams がインストールされている。
手順
AclAuthorizerを使用するように、Kafka 設定ファイル/opt/kafka/config/server.propertiesを編集します。authorizer.class.name=kafka.security.auth.AclAuthorizer
authorizer.class.name=kafka.security.auth.AclAuthorizerCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Kafka ブローカーを (再) 起動します。
関連情報
- AMQ Streams の設定に関する詳細は、「AMQ Streams の設定」 を参照してください。
- Kafka クラスターの実行に関する詳細は、「マルチノードの Kafka クラスターの実行」 を参照してください。
4.7.3. ACL ルールの追加 リンクのコピーリンクがクリップボードにコピーされました!
AclAuthorizer は、ユーザーが実行できる/できない操作を記述するルールのセットを定義するアクセス制御リスト (ACL) を使用します。
この手順では、Kafka ブローカーで AclAuthorizer プラグインを使用する場合に、ACL ルールを追加する方法を説明します。
ルールは kafka-acls.sh ユーティリティーを使用して追加され、ZooKeeper に保存されます。
前提条件
- ブローカーとして使用されるすべてのホストに AMQ Streams がインストールされている。
- Kafka ブローカーで承認が 有効 である。
手順
--addオプションを指定してkafka-acls.shを実行します。例:
MyConsumerGroupコンシューマーグループを使用して、user1およびuser2のmyTopicからの読み取りを許可します。bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2Copy to Clipboard Copied! Toggle word wrap Toggle overflow user1が IP アドレスホスト127.0.0.1からmyTopicを読むためのアクセスを拒否します。bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow MyConsumerGroupでmyTopicのコンシューマーとしてuser1を追加します。bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --add --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
-
kafka-acls.shオプションの全リストは、「シンプルな ACL authorizer」 を参照してください。
4.7.4. ACL ルールのリスト表示 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、Kafka ブローカーで AclAuthorizer プラグインを使用する場合に、既存の ACL ルールをリスト表示する方法を説明します。
ルールは、kafka-acls.sh ユーティリティーを使用してリストされます。
前提条件
- ブローカーとして使用されるすべてのホストに AMQ Streams がインストールされている。
- Kafka ブローカーで承認が 有効 である。
- ACL が 追加されている。
手順
--listオプションを指定してkafka-acls.shを実行します。以下に例を示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
-
kafka-acls.shオプションの全リストは、「シンプルな ACL authorizer」 を参照してください。
4.7.5. ACL ルールの削除 リンクのコピーリンクがクリップボードにコピーされました!
この手順では、Kafka ブローカーで AclAuthorizer プラグインを使用する場合に、ACL ルールを削除する方法を説明します。
ルールは kafka-acls.sh ユーティリティーを使用して削除されます。
前提条件
- ブローカーとして使用されるすべてのホストに AMQ Streams がインストールされている。
- Kafka ブローカーで承認が 有効 である。
- ACL が 追加されている。
手順
--removeオプションを指定してkafka-acls.shを実行します。例:
MyConsumerGroupコンシューマーグループを使用して、user1およびuser2のmyTopicからの読み取りを許可する ACL を削除します。bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Read --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Describe --topic myTopic --allow-principal User:user1 --allow-principal User:user2 bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Read --operation Describe --group MyConsumerGroup --allow-principal User:user1 --allow-principal User:user2Copy to Clipboard Copied! Toggle word wrap Toggle overflow MyConsumerGroupでmyTopicのコンシューマーとしてuser1を追加する ACL を削除します。bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --consumer --topic myTopic --group MyConsumerGroup --allow-principal User:user1Copy to Clipboard Copied! Toggle word wrap Toggle overflow user1が IP アドレスホスト127.0.0.1からmyTopicを読むためのアクセスを拒否する ACL を削除します。bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1
bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zoo1.my-domain.com:2181 --remove --operation Describe --operation Read --topic myTopic --group MyConsumerGroup --deny-principal User:user1 --deny-host 127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
関連情報
-
kafka-acls.shオプションの全リストは、「シンプルな ACL authorizer」 を参照してください。 - 承認の有効化に関する詳細は、「認可の有効化」 を参照してください。