Ansible Playbook を使用した Confluent Platform での認可の構成

ロールベースアクセス制御

Ansible Playbooks for Confluent Platform を使用して、ロールベースアクセス制御(RBAC)を構成できます。Metadata Service (MDS) ホストとして Kafka ブローカーホストが構成されます。

RBAC による認可を有効にすると、以下の Kafka リスナーが各認証オプションを使用して構成できます。

  • ブローカー間リスナー: SASL PLAIN、SASL SCRAM、SASL GSSAPI、mTLS
  • Confluent Platform コンポーネントリスナー: SASL OAUTHBEARER
  • 外部クライアントリスナー: SASL PLAIN、SASL SCRAM、SASL GSSAPI、mTLS

デフォルトでは、ブローカー間通信用と Confluent Platform コンポーネント用の 2 つの Kafka リスナーがあります。ただし、コンポーネントリスナーは外部クライアントがサポートしていない認証モードを使用するため、Kafka クライアント用に最低 1 つのリスナーを追加で構成することをお勧めします。詳しくは、「リスナーの構成」を参照してください。

RBAC の構成時に、internal という名前のリスナーは変更しないでください。

要件

  • Kafka ブローカーホストが LDAP サーバーと通信できる。
  • Kafka ブローカーのポート 8090 がオープンであり、すべてのホストからアクセスできる。
  • LDAP の 1 つのプリンシパルで、ブートストラップロールと Confluent Platform コンポーネントのプリンシパルに関する権限が MDS 管理ユーザーとしてセットアップされている。このプリンシパルには、LDAP サーバーのユーザーおよびグループを読み出したりクエリを発行したりするために、検索の権限が必要です。mds という名前のユーザーを作成することをお勧めします。
  • LDAP サーバーの各 Confluent Platform コンポーネントに 1 つのプリンシパルがセットアップされている。これらのユーザーは、Confluent Platform コンポーネントが MDS に対して認証し、それぞれのリソースにアクセスするために使用されます。以降の例では、以下のコンポーネントユーザーが使用されています。
    • Confluent Server: kafka_broker
    • Schema Registry: schema_registry
    • Connect: connect_worker
    • ksqlDB: ksql
    • REST Proxy: rest_proxy
    • Confluent Server REST API: kafka_broker
    • Control Center: control_center
  • (省略可)「PEM キーペアの作成」の説明に従って、OAuth が有効なリスナーで使用されるキーペアを生成します。

注釈

ブローカー間認証に mTLS または Kerberos を使用している場合は、Kafka ブローカー用に LDAP ユーザーをセットアップする必要はありません。

RBAC の必須設定

RBAC 構成用のサンプルインベントリファイルが、Ansible Playbooks for Confluent Platform のホームディレクトリの sample_inventories ディレクトリに用意されています。

RBAC を有効にして構成する際は、必要な変数を hosts.yml に追加します。

Ansible 使用時の RBAC の有効化

all:
  vars:
    rbac_enabled: true

RBAC のユーザー検索および検証に関連する LDAP サーバーの詳細設定

設定が必要な カスタムプロパティ については、LDAP 管理者に相談し、「MDS に対する LDAP グループベースの認可の設定」および「LDAP 認証の設定」を参照してください。

以下は、ldap_config での LDAP プロパティの設定例です。

kafka_broker:
  vars:
    kafka_broker_custom_properties:
      ldap.java.naming.factory.initial: com.sun.jndi.ldap.LdapCtxFactory
      ldap.com.sun.jndi.ldap.read.timeout: 3000
      ldap.java.naming.provider.url: ldap://ldap1:389
      ldap.java.naming.security.principal: uid=mds,OU=rbac,DC=example,DC=com
      ldap.java.naming.security.credentials: password
      ldap.java.naming.security.authentication: simple
      ldap.user.search.base: OU=rbac,DC=example,DC=com
      ldap.group.search.base: OU=rbac,DC=example,DC=com
      ldap.user.name.attribute: uid
      ldap.user.memberof.attribute.pattern: CN=(.*),OU=rbac,DC=example,DC=com
      ldap.group.name.attribute: cn
      ldap.group.member.attribute.pattern: CN=(.*),OU=rbac,DC=example,DC=com
      ldap.user.object.class: account

LDAPS を使用していて、認証機関が Kafka のトラストストアにある場合は、kafka_broker_custom_propertiesdictionary に以下のプロパティを追加します。

kafka_broker:
vars:
  kafka_broker_custom_properties:
    ldap.java.naming.provider.url: ldaps://<ldap-host>:636
    ldap.java.naming.security.protocol: SSL
    ldap.ssl.truststore.location: "{{kafka_broker_truststore_path}}"
    ldap.ssl.truststore.password: "{{kafka_broker_truststore_storepass}}"

LDAPS を使用していて、認証機関が Kafka のトラストストアにない場合は、ファイルコピー機能を使用できます。

kafka_broker:
  vars:
    kafka_broker_copy_files:
      - source_path: /path/to/truststore.jks
        destination_path: /var/ssl/private/ldaps.truststore.jks
    kafka_broker_custom_properties:
      ldap.java.naming.provider.url: ldaps://<ldap-host>:636
      ldap.java.naming.security.protocol: SSL
      ldap.ssl.truststore.location: /var/ssl/private/ldaps.truststore.jks
      ldap.ssl.truststore.password: <password>

Confluent Platform 内で RBAC をブートストラップするための、スーパーユーザーの認証情報の指定

前記の sample_inventories ディレクトリのインベントリファイルでは、mds ユーザーが使用されています。

all:
  vars:
    mds_super_user: mds
    mds_super_user_password: password

Confluent Platform コンポーネントの LDAP ユーザーの指定

前記の sample_inventories ディレクトリのインベントリファイルには、以下のユーザーが構成されています。

all:
  vars:
    kafka_broker_ldap_user: kafka_broker
    kafka_broker_ldap_password: password
    schema_registry_ldap_user: schema_registry
    schema_registry_ldap_password: password
    kafka_connect_ldap_user: connect_worker
    kafka_connect_ldap_password: password
    ksql_ldap_user: ksql
    ksql_ldap_password: password
    kafka_rest_ldap_user: rest_proxy
    kafka_rest_ldap_password: password
    control_center_ldap_user: control_center
    control_center_ldap_password: password

RBAC のオプション設定

RBAC を有効にして構成する際に、オプション設定を hosts.yml に追加できます。

独自の MDS サーバー証明書およびキーペアの指定(OAuth 用)

all:
  vars:
    create_mds_certs: false

    token_services_public_pem_file: # Path to public.pem
    token_services_private_pem_file: # Path to tokenKeypair.pem

MDS ベース ACL の無効化

all:
  vars:
    mds_acls_enabled: false

デフォルトでは、RBAC が有効になると MDS ベース ACL が有効になります。

RBAC が TLS と連携するための相互認証の有効化

all:
  vars:
    mds_ssl_mutual_auth_enabled: true

デフォルトは ssl_mutual_auth_enabled 設定の値になります。

RBAC スーパーユーザーの追加構成

この例では user1 を使用しています。

all:
  vars:
    rbac_component_additional_system_admins:
      - user1

その他の考慮事項

Kerberos

sasl_protocol: kerberos を設定するには、ZooKeeper、Kafka、および外部クライアントのキータブとプリンシパルが必要です。「SASL GSSAPI(Kerberos)認証の構成」を参照してください。

ただし、Confluent Platform の他のコンポーネントでは独自のリスナーが使用されるため、これらのコンポーネントに Kerberos のプリンシパルとキータブを作成する必要はありません。各コンポーネントは LDAP のユーザー名とパスワードを使用して Kafka に認証します。

一元的 MDS によるロールベースアクセス制御

Confluent Platform 6.0.0 以降では、Ansible Playbooks for Confluent Platform を使用して、リモート Confluent Platform クラスター上で一元的な Metadata Service (MDS) を使用してロールベースアクセス制御(RBAC)を構成できます。

このセクションでは、構成に必要な要件および設定方法について説明します。

この構成には、「ロールベースアクセス制御」で説明されている要件と構成情報も適用されます。

要件

  • RBAC を設定している現在のクラスターに、OAuth が有効なリスナーの MDS で使用されるパブリックキーを入力する必要があります。
  • リモート MDS クラスターへの認証に使用するプリンシパルは、リモート MDS クラスターのスーパーユーザーでなければなりません。

一元的 MDS を使用する RBAC の必須設定

一元的 MDS を使用する RBAC を有効にして構成するには、以下の必須変数をインベントリファイルに追加します。

Ansible 使用時の RBAC 一元的 MDS の有効化

all:
  vars:
    external_mds_enabled: true

一元的 MDS のブートストラップ URL の指定

MDS をホストする Kafka クラスター上の MDS REST API の URL を指定します。

all:
  vars:
    mds_bootstrap_urls:

以下に例を示します。

all:
  vars:
    mds_bootstrap_urls: https://ip-172-31-34-246.us-east-1.compute.internal:8090,https://ip-172-31-34-246.us-east-2.compute.internal:8090

一元的 MDS のブートストラップサーバーの指定

MDS をホストする接続先リスナーのホスト名とポートのリストを、<mds-broker-hostname1> :<port>,<mds-broker-hostname2>:<port> のフォーマットで指定します。

all:
  vars:
    mds_broker_bootstrap_servers:

以下に例を示します。

all:
  vars:
    mds_broker_bootstrap_servers: ip-172-31-43-14.us-west-1.compute.internal:9093,ip-172-31-43-14.us-west-2.compute.internal:9093

一元的 MDS ブローカーリスナーのセキュリティ構成の指定

一元的 MDS が実行されているリモート Kafka ブローカー( mds_broker_bootstrap_servers )のセキュリティを設定します。

all:
  vars:
    mds_broker_listener:
      ssl_enabled:             ----- [1]
      ssl_mutual_auth_enabled: ----- [2]
      sasl_protocol:           ----- [3]
  • [1] リモート MDS で TLS が使用される場合は、ssl_enabledtrue に設定します。

  • [2] リモート MDS で mTLS が使用される場合は、ssl_mutual_auth_enabledtrue に設定します。

  • [3] sasl_protocol にリモート MDS の SASL プロトコルを設定します。指定できる選択肢は、nonekerberossasl_plainsasl_scram です。

    MDS リスナーは、mTLS、Kerberos、SASL Plain、SASL Scram のいずれかの認証モードにする必要があります。

    ssl_enabled ([1])と ssl_mutual_auth_enabled ([2])に true を設定して、リスナーに mTLS 認証モードを指定した場合のみ、sasl_protocolnone を設定できます。

以下は、一元的 MDS ブローカーに mTLS を指定した場合の例です。

all:
  vars:
    mds_broker_listener:
      ssl_enabled: true
      ssl_mutual_auth_enabled: true
      sasl_protocol: none

一元的 MDS サーバーの証明書とキーペアへのパスの指定(OAuth 用)

all:
  vars:
    create_mds_certs: false
    token_services_public_pem_file:
    token_services_private_pem_file:

クラスターレジストリ

Ansible Playbooks for Confluent Platform を使用すると、Confluent Platform の クラスターレジストリ 内でクラスターに名前を付けることができます。

クラスターレジストリは、Metadata Service(MDS)における Kafka クラスターの登録と識別を一元的に行う手段を備えているため、RBAC ロールバインディングプロセスが単純化され、監査ログの一元化が可能となります。

クラスターのインベントリファイルで次の変数を使用して、Kafka クラスターを MDS クラスターレジストリに登録します。

  • Kafka クラスターを MDS に登録するには:

    kafka_broker_cluster_name:
    
  • Schema Registry クラスターを MDS に登録するには:

    schema_registry_cluster_name:
    
  • Kafka Connect クラスターを MDS に登録するには:

    kafka_connect_cluster_name:
    
  • ksqlDB クラスターを MDS に登録するには:

    ksql_cluster_name: