接続の確立
JDBC データソースの作成
Java アプリケーションから接続するJDBC データソースを作成できます。CData JDBC Driver for Apache Kafka に基づくJDBC データソースの作成は、3つの基本ステップで構成されます。
- ドライバーのJAR ファイルをクラスパスに追加します。JAR ファイルはインストールディレクトリの[lib]サブフォルダ内にあります。.lic ファイルはJAR ファイルと同じフォルダ内に配置される必要があることに注意してください。
- ドライバークラスを入力します。次に例を示します。
cdata.jdbc.apachekafka.ApacheKafkaDriver
- JDBC URL を入力します。次に例を示します。
jdbc:apachekafka:User=admin;Password=pass;BootStrapServers=localhost:9091 or jdbc:cdata:apachekafka:User=admin;Password=pass;BootStrapServers=localhost:9091
上記の2つ目の形式は、同じURL 形式を使用しているドライバー間でアプリケーションに競合がある場合は、CData ドライバーを使用していることを確認するために常に使用できます。URL は "jdbc:apachekafka:" または"jdbc:cdata:apachekafka:" のいずれかから始まり、任意の接続プロパティの名前と値のペアをセミコロン区切りで入力します。
Apache Kafka への接続
.NET ベースのエディションは、Confluent.Kafka およびlibrdkafka ライブラリに依存して機能します。 これらのアセンブリはインストーラーにバンドルされ、自動的に本製品 と一緒にインストールされます。 別のインストール方法を利用する場合は、NuGet から依存関係のあるConfluent.Kafka 2.6.1 をインストールしてください。Apache Kafka サーバーのアドレスを指定するには、BootstrapServers パラメータを使用します。
デフォルトでは、本製品 はデータソースとPLAINTEXT で通信し、これはすべてのデータが暗号化なしで送信されることを意味します。 通信を暗号化するには:
- UseSSL をtrue に設定し、本製品 がSSL 暗号化を使用するように構成します。
- SSLServerCert およびSSLServerCertType を設定して、サーバー証明書をロードします。
JKS およびPEM ファイルがサポートされる証明書ストアです。
Note: ProxyServer のようなプロキシ設定やFirewallServer のようなファイアウォール設定は、Apache Kafka ブローカーへの接続には影響しません。 なぜなら、本製品 はプロキシをサポートしていない公式ライブラリを使用してApache Kafka に相互接続するからです。 これらのオプションは、本製品 がスキーマレジストリに接続する場合にのみ使用されます。詳細は、トピックからのメタデータの抽出 を参照してください。
Apache Kafka への認証
Apache Kafka データソースは、次の認証メソッドをサポートしています:- Anonymous
- Plain
- SCRAM ログインモジュール
- SSL クライアント証明書
- Kerberos
Anonymous
Apache Kafka の特定のオンプレミスデプロイメントでは、認証接続プロパティを設定することなくApache Kafka に接続できます。 こうした接続はanonymous(匿名)と呼ばれます。匿名認証を行うには、このプロパティを設定します。
- AuthScheme:None。
SASL Plain
Plain 認証では、認証にプレーンテキストのログインモジュールを使用します。次のプロパティを設定します。
- AuthScheme:Plain。
- User:認証を行うユーザー。
- Password:認証するユーザーのパスワード。
SCRAM ログインモジュール
SCRAM ログインモジュールを使用して認証するには、以下のプロパティを設定します。- AuthScheme:SHA-256 ハッシュでSCRAM ログインモジュールを使用する場合はSCRAM を、SHA-512 ハッシュでSCRAM ログインモジュールを使用する場合はSCRAM-SHA-512 を指定します。
- User:認証を行うユーザー。
- Password:認証するユーザーのパスワード。
SSL クライアント証明書
SSL クライアント証明書を私用して認証するには、次のプロパティを設定します。- AuthScheme:SSLCertificate。
- SSLClientCert:CData JDBC Driver for Apache Kafka ブローカーへの接続に使用されるSSL クライアント証明書。
- SSLClientCertType:CData JDBC Driver for Apache Kafka ブローカーへの接続に使用されるSSL クライアント証明書の形式:PEMKEY_FILE(デフォルト)、JKSFILE、またはPMKEY_BLOB。
JKS 証明書形式を推奨しますが、PEM およびJKS の両方をサポートしています。 PEM を使用する場合、Java はOpenSSL などのツールがサポートするエンコーディングや暗号化手法のサブセットしかサポートしていないため、多くの場合、いくつかの変換手順が必要となります。
Kerberos
Kerberos で認証するには、システムのKerberos 設定ファイルを指定する必要があります。 次のプロパティを設定します。- AuthScheme:KERBEROS。
- KerberosServiceName:Kafka ブローカーのプリンシパル名。例えば、プリンシパルがkafka/[email protected] の場合、KerberosServiceName はkkafka です。
- KerberosKeytabFile:Kerberos のプリンシパルと暗号化されたキーのペアを含むKeytab ファイルの絶対パス。
- KerberosSPN:Apache Kafka のKerberos プリンシパルのサービスとホスト。この値は、principal value の'@' 記号の前にあります。 例えば、プリンシパルがkafka/[email protected] の場合、サービスとホストはkafka/kafka1.hostname.com です。
Note: keytab ファイルよりもチケットキャッシュを指定したい場合は、UseKerberosTicketCache をtrue に設定します。 この場合、KerberosKeytabFile が指定されていても無視されます。
Azure Event Hubs への接続
本製品 は、OAuth および共有アクセス署名を使用したAzure Event Hubs への接続をサポートします。 開始する前に、Event Hubs のネームスペースがKafka プロトコルを使用した接続をサポートしていることを確認してください。 本製品 ではこの機能を必須としており、価格体系によってはご利用いただけない場合があります。Azure への接続はすべて、以下で説明するスキーム固有のプロパティに加えて、これらのプロパティを設定する必要があります。
- BootstrapServers:mynamespace.servicebus.windows.net:9093。
- UseSSL:True。
Azure AD
Azure AD は、Microsoft のマルチテナント、クラウドベースのディレクトリおよびID 管理サービスです。これはユーザーベースの認証で、AuthScheme をAzureAD に設定する必要があります。Web アプリケーションを介したAzure AD への認証には、 常にカスタムOAuth アプリケーションの作成が必要です。
カスタムOAuthアプリケーションの作成の詳細については、Azure AD アプリケーションの作成 を参照してください。
デスクトップアプリケーション
CData は、デスクトップアプリケーションからAzure AD への接続を簡略化する埋め込みOAuth アプリケーションを提供します。カスタムOAuth アプリケーションを使用して、デスクトップアプリケーションで認証することもできます。(詳しくは、Azure AD アプリケーションの作成 を参照してください。) Azure AD 経由で認証するには、以下のパラメータを設定します。
- AuthScheme:AzureAD。
-
カスタムアプリケーションのみ:
- OAuthClientId:カスタムOAuth アプリケーションの登録時に割り当てられたクライアントId。
- OAuthClientSecret:カスタムOAuth アプリケーションの登録時に割り当てられたクライアントシークレット。
- CallbackURL:カスタムOAuth アプリケーションの登録時に定義したリダイレクトURI。
接続すると、本製品 はデフォルトブラウザでApache Kafka のOAuth エンドポイントを開きます。ログインして、アプリケーションにアクセス許可を与えます。
本製品 はOAuth プロセスを完了し、Apache Kafka からアクセストークンを取得してそれを使ってデータをリクエストします。 OAuth 値はOAuthSettingsLocation で指定されたパスに保存されます。これらの値は接続間で永続化されます。
アクセストークンの期限が切れたときは、本製品 は自動でアクセストークンをリフレッシュします。
Web アプリケーション
Web アプリケーションを使用してAzure AD 経由で認証する場合は、Apache Kafka にカスタムOAuth アプリケーションを登録する必要があります(Azure AD アプリケーションの作成 を参照)。 それから本製品 を使用してOAuth トークンの値を取得および管理します。Azure AD OAuth アクセストークンの取得
はじめに、以下の接続プロパティを設定してOAuthAccessToken を取得します。
- AuthScheme:AzureAD。
- OAuthClientId:アプリケーション設定のクライアントId。
- OAuthClientSecret:アプリケーション設定のクライアントシークレット。
次に、ストアドプロシージャを呼び出してOAuth 交換を完了します。
- GetOAuthAuthorizationURL ストアドプロシージャを呼び出します。AuthMode インプットをWEB に、CallbackURL インプットをアプリケーション設定で指定したリダイレクトURI に設定します。必要に応じて、Permissions パラメータを設定してカスタム権限をリクエストします。
ストアドプロシージャがOAuth エンドポイントのURL を返します。 - URL を開き、ログインして、アプリケーションを認可します。コールバックURL にリダイレクトされます。
- GetOAuthAccessToken ストアドプロシージャを呼び出します。AuthMode インプットをWEB に設定します。Verifier インプットを、コールバックURL のクエリ文字列の"code" パラメータに設定します。必要に応じて、Permissions パラメータを設定してカスタム権限をリクエストします。
アクセストークンとリフレッシュトークンを取得すると、データに接続し、Azure AD アクセストークンを自動または手動でリフレッシュすることができるようになります。
Azure AD OAuth アクセストークンの自動リフレッシュ
本製品 がAzure AD OAuth アクセストークンを自動的にリフレッシュするようにするには、データへの初回接続時に以下のパラメータを設定します。
- AuthScheme:AzureAD。
- InitiateOAuth:REFRESH。
- OAuthClientId:アプリケーション設定のクライアントId。
- OAuthClientSecret:アプリケーション設定のクライアントシークレット。
- OAuthAccessToken:GetOAuthAccessToken によって返されたアクセストークン。
- OAuthRefreshToken:GetOAuthAccessToken によって返されたリフレッシュトークン。
- OAuthSettingsLocation:ドライバーがOAuth トークン値を保存する場所。これは接続間で維持されます。
それ以降のデータ接続では、OAuthAccessToken とOAuthRefreshToken の値はOAuthSettingsLocation から取得され、接続時に設定する必要はありません。
Azure AD OAuth アクセストークンの手動リフレッシュ
データ接続時に手動でAzure AD OAuth アクセストークンをリフレッシュするために必要な値は、OAuth リフレッシュトークンのみです。
GetOAuthAccessToken が返すExpiresIn パラメータ値が経過した後に、RefreshOAuthAccessToken ストアドプロシージャを使用して手動でOAuthAccessToken をリフレッシュし、次の接続プロパティを設定します。
- OAuthClientId:アプリケーション設定のクライアントId。
- OAuthClientSecret:アプリケーション設定のクライアントシークレット。
ここでRefreshOAuthAccessToken を呼び出し、OAuthRefreshToken にGetOAuthAccessToken によって返されたOAuth リフレッシュトークンを指定します。新しいトークンが取得できたら、OAuthAccessToken をRefreshOAuthAccessToken が返す値に設定し、新しい接続をオープンします。
最後に、OAuth リフレッシュトークンを保存し、OAuth アクセストークンの有効期限が切れた後に手動でリフレッシュできるようにします。
ヘッドレスマシン
ヘッドレスマシンのユーザーアカウントでドライバーを設定するには、インターネットブラウザに対応した別の端末で認証する必要があります。
以下のいずれかの方法で行います。
- 後述のオプション1:Verifier code を取得および交換に従い、OAuthVerifier 値を取得します。
- 後述のオプション2:OAuth 設定を転送で説明するように、本製品 を別のマシンにインストールします。通常のブラウザベースのフローで認証した後、OAuth 認証値を転送します。
オプション1:Verifier コードを取得および交換
-
認可エンドポイントを見つけます。
カスタムアプリケーションのみ: 次のプロパティを設定して、Authorization URL を作成します。
- InitiateOAuth:OFF。
- OAuthClientId:アプリケーションの登録時に割り当てられたクライアントId。
- OAuthClientSecret:アプリケーションの登録時に割り当てられたクライアントシークレット。
カスタムアプリケーションおよび埋め込みアプリケーション:GetOAuthAuthorizationURL ストアドプロシージャを呼び出します。
- ストアドプロシージャによって返されたURL をブラウザで開きます。
- ログインして、本製品 にアクセス許可を与えます。verifier code を含むコールバックURL にリダイレクトされます。
- verifier code の値を保存します。この値は後でOAuthVerifier 接続プロパティを設定する際に使用します。
-
OAuth verifier code をOAuth リフレッシュトークンおよびアクセストークンと交換します。
ヘッドレスマシンでは、次のプロパティを設定します。
- AuthScheme:AzureAD。
- InitiateOAuth:REFRESH。
- OAuthVerifier:verifier コード。
- OAuthSettingsLocation:接続間で維持されるOAuth トークンの値を保存するファイルの場所。
-
カスタムアプリケーションのみ:
- OAuthClientId:カスタムOAuth アプリケーション設定のクライアントId。
- OAuthClientSecret:カスタムOAuth アプリケーション設定のクライアントシークレット。
-
OAuth 設定ファイルが生成されたら、以下のように接続プロパティをリセットします。
- InitiateOAuth:REFRESH。
- OAuthSettingsLocation:暗号化されたOAuth 認証値が保存される場所。アクセストークンの自動リフレッシュを有効にするために、この場所が本製品 に読み書きのアクセス許可を与えることを確認してください。
-
カスタムアプリケーションのみ:
- OAuthClientId:アプリケーションの登録時に割り当てられたクライアントId。
- OAuthClientSecret:アプリケーションの登録時に割り当てられたクライアントシークレット。
オプション2:OAuth 設定を転送
ヘッドレスマシン経由の接続に先立ち、インターネットブラウザに対応したデバイスでドライバーとの接続を作成し、インストールする必要があります。上述の「デスクトップアプリケーション」の説明に従って、接続プロパティを設定します。
「デスクトップアプリケーション」の手順を完了すると、生成された認証値は、OAuthSettingsLocation で指定された場所に暗号化されて書き込まれます。デフォルトのファイル名はOAuthSettings.txt です。
接続が正常にテストされたら、OAuth 設定ファイルをヘッドレスマシンにコピーします。
ヘッドレスマシンでは、次のプロパティを設定します。
- AuthScheme:AzureAD。
- InitiateOAuth:REFRESH。
- OAuthSettingsLocation:OAuth 設定ファイルの場所。アクセストークンの自動リフレッシュを有効にするために、この場所が本製品 に読み書きのアクセス許可を与えることを確認してください。
-
カスタムアプリケーションのみ:
- OAuthClientId:アプリケーションの登録時に割り当てられたクライアントId。
- OAuthClientSecret:アプリケーションの登録時に割り当てられたクライアントシークレット。
Azure サービスプリンシパル
Azure サービスプリンシパルは、ロールに基づいたアプリケーションベースの認証です。これは、認証がユーザーごとではなく、アプリケーションごとに行われることを意味します。 アプリケーションで実行されるすべてのタスクは、デフォルトユーザーコンテキストなしで、割り当てられたロールに基づいて実行されます。 リソースへのアプリケーションのアクセスは、割り当てられたロールの権限によって制御されます。
Azure サービスプリンシパル認証の設定方法については、サービスプリンシパルによるAzure AD アプリの作成 を参照してください。
Managed Service Identity (MSI)
Azure VM 上でApache Kafka を実行しており、マネージドID(MSI)認証情報を自動的に取得して接続したい場合は、AuthScheme を AzureMSI に設定します。
User-Managed Identities
マネージドID のトークンを取得するには、OAuthClientId プロパティを使用してマネージドID のclient_id を指定します。VM に複数のユーザーが割り当てられたマネージドID がある場合は、OAuthClientId も指定する必要があります。
共有アクセス署名
本製品 は、共有アクセス署名を使用したパスワードベースの認証をサポートします。 共有シークレットを作成したら、以下のプロパティを設定します。
- AuthScheme:Plain。
- User:$ConnectionString。
- Password:Shared Access Policies 画面にあるEvent Hubs 接続文字列。
GCP Kafka への接続
本製品 は、Google Managed Service for Apache Kafka(GCP Kafka)への接続をサポートします。 GCP Kafka はOAuth 認証を使用し、サービスアカウント、GCP インスタンスアカウント、Workload Identity Federation をサポートしています。
GCP Kafka への接続はすべて、以下のプロパティを設定する必要があります。
- BootstrapServers:bootstrap.myclustername.myregion.managedkafka.mygcpproject.cloud.goog:9092。 この値は、Cluster Configuration ページのConfigurations タブに表示されます。
- UseSSL:True。
以下に説明する適切なスキーム固有のプロパティを設定すると、接続の準備が整います。
GCP Kafka への認証
GCP Kafka には、Google サービスアカウント、GCP インスタンスアカウント、またはWorkload Identity Federation 認証情報を使用して認証できます。
サービスアカウント
GCP Kafka はGoogle サービスアカウントでの認証をサポートしています。 このサービスアカウントには、Managed Kafka Client ロールが必要です。
サービスアカウント認証情報を、以下のプロパティとともに本製品 に入力します。
- AuthScheme:OAuthJWT。
- OAuthJWTCertType:GOOGLEJSON。
- OAuthJWTCert:サービスアカウント認証情報を含むJSON ファイルのパス。
GCP インスタンスアカウント
GCP Kafka は、GCP インスタンスアカウントを使用した接続をサポートします。 このためには、Compute Engine インスタンスにManaged Kafka Client ロールを持つサービスアカウントが必要です。 インスタンスは、Cloud API Access Scopes 内のCloud Platform スコープを有効にする必要もあります。GCP インスタンスアカウントを使用して接続するには、このプロパティを設定します。
- AuthScheme:GCPInstanceAccount。
Workload Identity Federation 認証情報
GCP Kafka は、Workload Identity Federation 認証情報を使用した接続をサポートします。 ただし、RequestingServiceAccount プロパティによる委任によってのみ、これらのアカウントをサポートします。 通常のサービスアカウントと同様に、委任されたサービスアカウントには、Managed Kafka Client ロールが必要です。Workload Identity Federation 認証情報を使用して接続するには、以下のプロパティを設定します。
- AuthScheme:AWSWorkloadIdentity。
- AWSWorkloadIdentityConfig:これは、AWS への認証方法に依存します。
- RequestingServiceAccount:AWS プリンシパルが委任できるサービスアカウントのE メールアドレス。