HTTP 基本認証

HTTP 基本認証 を以下の Confluent Platform コンポーネントに追加することができます。

注釈

Confluent Control Center で HTTP 基本認証を有効にすると、Control Center REST API では、ユーザー名とパスワードを Kafka Connect REST API に渡す処理はサポートされません。すべてのコンポーネントのセキュリティをサポートするために、ロールベースアクセス制御(RBAC) を使用することができます。詳細については、「Kafka Connect と RBAC」を参照してください。

Control Center REST API

ユーザーログインは JAAS を使用してプラグ可能な HTTP 基本認証を使用して提供されています。すべての構成オプションの詳細については、「UI 認証設定」を参照してください。

Control Center 認証を構成するには、以下の手順に従います。

  1. control-center.properties 内に以下のオプションを指定します。

    confluent.controlcenter.rest.authentication.method=BASIC
    confluent.controlcenter.rest.authentication.realm=c3
    confluent.controlcenter.rest.authentication.roles=Administrators,Restricted
    confluent.controlcenter.auth.restricted.roles=Restricted
    confluent.controlcenter.auth.session.expiration.ms=600000
    

    重要

    confluent.controlcenter.rest.authentication.roles および confluent.controlcenter.auth.restricted.roles というプロパティはいずれも グループ に適用されます。

    confluent.controlcenter.rest.authentication.roles の値は <your_administrator_group>,<your_restricted_group>confluent.controlcenter.auth.restricted.roles の値は <your_restricted_group> です。

  2. 以下のような JAAS ファイル(propertyfile.jaas)を作成します。認証レルムは Control Center (c3)です。

    c3 {
        org.eclipse.jetty.jaas.spi.PropertyFileLoginModule required
        file="/password.properties";
    };
    

    password.properties にあるパスワードファイルは以下のような形式になっています。

    bob: <bob_password>,<your_administrator_group>
    alice: <alice_password>,<your_restricted_group>
    
  3. JAAS 構成を使用するために Control Center を起動します。

    CONTROL_CENTER_OPTS="-Djava.security.auth.login.config=/propertyfile.jaas" control-center-start /control-center.properties
    

Control Center へのアクセスを付与された後で、サインイン資格情報が要求されます。bob:<bob_password> としてログインすると、読み取りおよび書き込みのアクセス権限が提供されます。alice:<alice_password> としてログインすると、読み取り専用のアクセス権限が提供されます。

注釈

複数グループのメンバーシップを持つユーザーは、最も限定されたアクセス権限のみ許可されます。たとえば、ユーザーが adminreadonly の 2 つのグループのメンバーであり、readonly が限定されたロールである場合、ユーザーは readonly グループの権限のみ許可されます。

限定ロール(読み取り専用)のユーザーは、以下のユーザーインターフェイス(UI)の機能とオプションは使用できません(表示されません)。

  • コネクターの追加、削除、一時停止、再開
  • コネクターのブラウズ
  • コネクター設定の表示
  • コネクター構成のアップロード
  • アラート(トリガーまたはアクション)の作成、削除、編集
  • ライセンスの編集
  • ブローカーの編集
  • クラスター関連フォームでの送信の実行
  • スキーマの編集、作成、削除
  • データフロークエリの編集
  • トピックの検査
  • ksqlDB エディターへの入力
  • ksqlDB クエリの実行または停止
  • KSQL ストリームまたはテーブルの追加

参考

この構成の動作例については、Confluent Platform デモ を参照してください。構成リファレンスについては、デモの docker-compose.yml ファイル を参照してください。

REST Proxy

REST Proxy HTTP 基本認証」を参照してください。

Connect REST API

  1. 以下の構成を Connect ワーカープロパティファイル(etc/kafka/connect-distributed.propertes)に追加します。

    rest.extension.classes=org.apache.kafka.connect.rest.basic.auth.extension.BasicAuthSecurityRestExtension
    
  2. JAAS の構成ファイルを作成します。認証レルムは KafkaConnect にハードコーディングされているため、JAAS は次のように記述する必要があります。

    KafkaConnect {
        org.apache.kafka.connect.rest.basic.auth.extension.PropertyFileLoginModule required
        file="<path-to-confluent>/etc/kafka/connect.password";
    };
    
  3. JAAS の構成ファイルへのパスを使用して KAFKA_OPTS をエクスポートします。

    export KAFKA_OPTS="-Djava.security.auth.login.config=<path-to-jaas-file>"
    
  4. パスワードのプロパティファイル(<path-to-confluent>/etc/kafka/connect.password)を作成します。以下に例を示します。

    thisismyusername: thisismypass
    

ksqlDB

  1. 以下の構成を ksqlDB プロパティファイル(etc/ksqldb/ksql-server.properties)に追加します。

    authentication.method=BASIC
    authentication.roles=admin,developer,user,ksq-user
    authentication.realm=KsqlServer-Props
    
  2. JAAS ファイル(jaas_config.conf)を作成します。

    KsqlServer-Props {
      org.eclipse.jetty.jaas.spi.PropertyFileLoginModule required
      file="/path/to/password-file"
      debug="false";
    };
    
  3. パスワードのプロパティファイル(<path-to-confluent>/etc/ksqldb/password-file)を作成します。file パラメーターは、パスワードファイルの場所です。フォーマットは以下のとおりです。

    <username>: <password-hash>,<role1>[,<role2>,...]
    

    以下に例を示します。

    fred: OBF:1w8t1tvf1w261w8v1w1c1tvn1w8x,user,admin
    harry: changeme,user,developer
    tom: MD5:164c88b302622e17050af52c89945d44,user
    dick: CRYPT:adpexzg3FUZAk,admin,ksq-user
    
  4. JAAS ファイルをエクスポートします。

    export KSQL_OPTS=-Djava.security.auth.login.config=/path/to/the/jaas_config.conf
    
  5. ksqlDB サーバーを起動します。

    <path-to-confluent>/bin/ksql-server-start <path-to-confluent>/etc/ksqldb/ksql-server.properties
    

詳細については、「ksqlDB を HTTP 基本認証用に構成する」を参照してください。

Schema Registry

Schema Registry を構成することにより、HTTP 基本認証メカニズムを介し、ユーザー名とパスワードを使用して認証するようユーザーに要求することができます。

注釈

基本認証を使用する場合、基本プロトコルでは資格情報がプレーンテキストで渡されるため、セキュアな通信用に HTTPS が使用されるようにスキーマレジストリを構成 することをお勧めします。

認証を要求するように Schema Registry を構成するには、次の設定を使用します。

authentication.method=BASIC
authentication.roles=<user-role1>,<user-role2>,...
authentication.realm=<section-in-jaas_config.conf>

authentication.roles 構成では、ユーザーロールのコンマ区切りリストを定義します。Schema Registry にアクセスするための認可を受けるには、認証されたユーザーがこれらのロールの 1 つ以上に属している必要があります。

たとえば、admindeveloperusersr-user の各ロールを定義する場合、次の構成でこれらのロールを認証用に割り当てます。

authentication.roles=admin,developer,user,sr-user

authentication.realm 構成は、jaas_config.conf 内のセクションと一致する必要があります。これは、サーバーによるユーザーの認証方法を定義し、サーバーの起動時に JVM オプションとして渡されます。

export SCHEMA_REGISTRY_OPTS=-Djava.security.auth.login.config=/path/to/the/jaas_config.conf
<path-to-confluent>/bin/schema-registry-start <path-to-confluent>/etc/schema-registry/schema-registry.properties

jaas_config.conf の例を以下に示します。

SchemaRegistry-Props {
  org.eclipse.jetty.jaas.spi.PropertyFileLoginModule required
  file="/path/to/password-file"
  debug="false";
};

SchemaRegistry-Props セクションを authentication.realm 構成設定に割り当てます。

authentication.realm=SchemaRegistry-Props

上の jaas_config.conf の例では、Jetty PropertyFileLoginModule を使用して、パスワードファイル内の認証情報を確認することでユーザーを認証しています。

データベースから認証情報を読み取るために、LdapLoginModuleJDBCLoginModule など、Java の標準 LoginModule インターフェイスの他の実装を使用することもできます。

file パラメーターは、パスワードファイルの場所です。フォーマットは以下のとおりです。

<username>: <password-hash>,<role1>[,<role2>,...]

以下に例を示します。

fred: OBF:1w8t1tvf1w261w8v1w1c1tvn1w8x,user,admin
barney: changeme,user,developer
betty: MD5:164c88b302622e17050af52c89945d44,user
wilma: CRYPT:adpexzg3FUZAk,admin,sr-user

org.eclipse.jetty.util.security.Password ユーティリティを使用して、ユーザーのパスワードハッシュを取得します。

bin/schema-registry-run-class org.eclipse.jetty.util.security.Password fred letmein

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

letmein
OBF:1w8t1tvf1w261w8v1w1c1tvn1w8x
MD5:0d107d09f5bbe40cade3de5c71e9e9b7
CRYPT:frd5btY/mvXo6

出力の各行は、プレーンテキストから始まり、さまざまなメカニズムを使用してパスワードを暗号化したものです。

基本認証が使用されるように Schema Registry を構成したら、適切かつ有効な資格情報を使用してクライアントを構成する必要があります。次に例を示します。

basic.auth.credentials.source=USER_INFO
basic.auth.user.info=fred:letmein

ちなみに

これらのプロパティの schema.registry プレフィックス付きバージョンは、Confluent Platform 5.0 で非推奨になりました。

  • schema.registry.basic.auth.credentials.source は非推奨となっています。
  • schema.registry.basic.auth.user.info は非推奨となっています。

詳細については、「Schema Registry のセキュリティの概要」を参照してください。