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
- Confluent Server:
- (省略可)「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_enabled
をtrue
に設定します。[2] リモート MDS で mTLS が使用される場合は、
ssl_mutual_auth_enabled
をtrue
に設定します。[3]
sasl_protocol
にリモート MDS の SASL プロトコルを設定します。指定できる選択肢は、none
、kerberos
、sasl_plain
、sasl_scram
です。MDS リスナーは、mTLS、Kerberos、SASL Plain、SASL Scram のいずれかの認証モードにする必要があります。
ssl_enabled
([1])とssl_mutual_auth_enabled
([2])にtrue
を設定して、リスナーに mTLS 認証モードを指定した場合のみ、sasl_protocol
にnone
を設定できます。
以下は、一元的 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: