CData Software Blog

クラウド連携のCData Software の技術ブログです。

CData BigQuery Driver でサービスアカウント認証を利用する方法

こんにちは。CData Software Japan リードエンジニアの杉本です。

今日はCData Google BigQuery Driverに関するTipsをお届けします。

https://www.cdata.com/jp/drivers/bigquery/

f:id:sugimomoto:20200617104306p:plain

CData Google BigQuery Driverはデフォルトで OAuthの認証プロセスを利用しますが、ケースによってはブラウザログインを使用したく無い場合があります。

その際にはサービスアカウントを用いた認証がオススメです。サービスアカウントを用いた認証ではサイレントな認証となり、ブラウザが立ち上がるなどの挙動が発生しないので、バッチ処理などで扱いやすいアプローチになります。

ただ、慣れていないとこのサービスアカウントの準備はちょっと面倒です。そこで今回の記事ではGCP管理画面でのサービスアカウントの作成方法からCData Driverで接続するまでの手順を紹介したいと思います。

なお、以下のリファレンスでも詳しい内容が書かれています。

http://cdn.cdata.com/help/DBE/jp/jdbc/pg_oauthcustomappcreate.htm

必要なもの

  • GCPアカウント
  • CData BigQuery Driver(ODBCを例にしていますが、JDBCADO.NETでも大丈夫です。)

サービスアカウントの作成

それではサービスアカウントの作成を行います。なお、画面は2020年6月時点のものになります。GCPのUIは結構頻繁に変わるので注意しましょう。

まず、GCPコンソールにログインし「IAMと管理」から「サービスアカウント」へ移動します。

f:id:sugimomoto:20200617104316p:plain

画面上部にある「+サービスアカウントを作成」をクリックし

f:id:sugimomoto:20200617104321p:plain

サービスアカウントの名前、サービスアカウントメールアドレスを決定します。

f:id:sugimomoto:20200617104328p:plain

次にこのサービスアカウントに付与するロールを決定します。

今回はBigQueryにアクセスするのでBigQuery用のロールが必要となります。下の画像では最上位のBigQuery管理者アカウントを指定していますが、ユースケースに合わせてロールを変更してください。

f:id:sugimomoto:20200617104335p:plain

あとは、「完了」をクリックすれば、必要なサービスアカウントが作成できます。

f:id:sugimomoto:20200617104340p:plain

秘密鍵の取得

続いて、サービスアカウントを用いた認証を行うためのキーを生成します。

サービスアカウントの一覧から先程作成したサービスアカウントのメニューを表示し「鍵を作成」をクリックします。

f:id:sugimomoto:20200617104346p:plain

秘密鍵の生成画面が出てくるので、任意のキータイプを選択します。JSONでも使用できますが、今回はファイルそのままでアクセスが可能なP12を選択します。

f:id:sugimomoto:20200617104351p:plain

作成をクリックすると、P12ファイルがダウンロードされます。このファイルを任意のフォルダに配置しておきます。

f:id:sugimomoto:20200617104357p:plain

また、秘密鍵作成後、秘密鍵のパスワードが表示されるので、忘れずに控えておきましょう。

f:id:sugimomoto:20200617104402p:plain

以上で、GCPサービスアカウント側の準備は完了です。

CData Driverでサービスアカウント認証を行う

それでは、サービスアカウントを用いて、CData Driverの認証を行ってみましょう。

今回は以下のPojectとDataSetにアクセスする想定で行います。

f:id:sugimomoto:20200617104407p:plain

接続に使用するドライバーはCData ODBC Driverを例にしていますが、どのテクノロジーのドライバーでも同様の値で接続できます。

ODBCデータソースアドミニストレータツールを立ち上げて、BigQueryのDSNの編集画面を表示します。

f:id:sugimomoto:20200617104413p:plain

接続構成画面が表示されるので、取得した情報を元に下記のように設定を行います。

なお以下の値は前の手順で作成したサービスアカウントを元にした設定例です。わかりやすいように実際の値を例として記載していますが、みなさんの環境に合わせてそれぞれ変更してください。

  • InitiateOAuth=GETANDREFRESH;:GETANDREFRESH固定です。
  • ProjectId=meta-coyote-270802;:接続先のProjectIdを指定します。
  • DatasetId=sample;:接続先のDatasetIdを指定します。
  • OAuthJWTCertType=PFXFILE;:P12ファイルの場合はPFXFILEを指定します。
  • OAuthJWTCertPassword=notasecret;:予め取得した秘密鍵パスワードを指定します。
  • OAuthJWTCertSubject=*;:固定でアスタリスクを指定します。
  • OAuthJWTIssuer=cdatabigquery@meta-coyote-270802.iam.gserviceaccount.com;:作成したサービスアカウントのメールアドレスを指定します。
  • OAuthJWTCert=C:\Work\GCP\meta-coyote-270802-624e630ed310.p12;:取得したP12ファイルのファイルパスを指定します。

f:id:sugimomoto:20200617104419p:plain

これで、接続テストが通ればサービスアカウントによる認証は成功です。

あとは、PowerBIなどお好みなツールでアクセスできます。

CDataSyncやAPI Serverで使用する場合

このサービスアカウントによる認証は CDataSyncAPI Server でも同様に行えます。

以下のようにBigQueryの接続設定画面に移動し、まずDataSetIdとProjectIdを指定します。その後、Advancedタブに移動し

f:id:sugimomoto:20200617104448p:plain

先程のODBCと同様にJWT OAuthの必要な情報をそれぞれ入力します。

f:id:sugimomoto:20200617104455p:plain

あとは「接続」ボタンをクリックして、成功すればOKです。

f:id:sugimomoto:20200617104529p:plain

おわりに

サービスアカウントははじめ作成するのがちょっと敷居を高く感じるかもしれませんが、そこまで手順は複雑ではありません。

是非試してみてください。