こんにちは。CData Software Japanリードエンジニアの杉本です。
V20 の少し前のビルドからなのですが、CData Driver・CDataSync で提供しているBigQuery Driver・コネクタがサービスアカウント認証を行う場合のファイルフォーマットとしてJSON形式を正式にサポートしました!
以前まではP12ファイルフォーマットを利用するか
もしくはちょっと遠回りな方法でJSONファイルによる認証はサポートしていたのですが
P12フォーマットが非推奨になったこともあり、今回正式に切り替わりまして、リリースとなりました。
特に使い方が難しいわけではありませんが、設定するための新しいプロパティも追加されたので、改めてこの記事でJSONファイルベースのサービスアカウント認証を解説したいと思います。
必要なもの
サービスアカウントの作成
それではサービスアカウントの作成を行います。なお、画面は2020年12月時点のものになります。GCPのUIは結構頻繁に変わるので注意しましょう。
まず、GCPコンソールにログインし「IAMと管理」から「サービスアカウント」へ移動します。
画面上部にある「+サービスアカウントを作成」をクリックし
サービスアカウントの名前、サービスアカウントメールアドレスを決定します。
次にこのサービスアカウントに付与するロールを決定します。
今回はBigQueryにアクセスするのでBigQuery用のロールが必要となります。下の画像では最上位のBigQuery管理者アカウントを指定していますが、ユースケースに合わせてロールを変更してください。
あとは、「完了」をクリックすれば、必要なサービスアカウントが作成できます。
秘密鍵の取得
続いて、サービスアカウントを用いた認証を行うためのキーを生成します。
サービスアカウントの一覧から先程作成したサービスアカウントのメニューを表示し「鍵を作成」をクリックします。
秘密鍵の生成画面が出てくるので、任意のキータイプを選択します。ここで今回は「JSON」のキータイプを選択します。
作成をクリックすると、秘密鍵が保存されます。
以上で、GCPサービスアカウント側の準備は完了です。
CData Driverでサービスアカウント認証を行う
それでは、サービスアカウントを用いて、CData Driverの認証を行ってみましょう。
今回は以下のPojectとDataSetにアクセスする想定で行います。
接続に使用するドライバーはCData ODBC Driverを例にしていますが、どのテクノロジーのドライバーでも同様の値で接続できます。
ODBCデータソースアドミニストレータツールを立ち上げて、BigQueryのDSNの編集画面を表示します。
接続構成画面が表示されるので、取得した情報を元に下記のように設定を行います。
なお以下の値は前の手順で作成したサービスアカウントを元にした設定例です。わかりやすいように実際の値を例として記載していますが、みなさんの環境に合わせてそれぞれ変更してください。
プロパティ名 | 値 | 備考 |
---|---|---|
Auth Scheme | OAuthJWT | サービスアカウントで認証するためOAuthJWTを指定します。 |
InitiateOAuth | GETANDREFRESH | GETANDREFRESH固定です。ODBCの場合は表示されませんので、入力不要です。 |
ProjectId | banded-shade-192211 | 接続先のProjectIdを指定します。 |
DatasetId | SampleDataset | 接続先のDatasetIdを指定します。 |
OAuthJWTCertType | GOOGLEJSON | 秘密鍵がJSONなので、GOOGLEJSONを指定します。 |
OAuthJWTCertSubject | * | 固定でアスタリスクを指定します。 |
OAuthJWTIssuer | sampleserviceaccount@banded-shade-192211.iam.gserviceaccount.com | 作成したサービスアカウントのメールアドレスを指定します。 |
OAuthJWTCert | C:\Work\GCP\banded-shade-192211-09d3e456b746.json; | 取得したJSONファイルのファイルパスを指定します。 |
これで、接続テストが通ればサービスアカウントによる認証は成功です。
あとは、Power BI などお好みなツールでアクセスできます。
おわりに
サービスアカウントははじめ作成するのがちょっと敷居を高く感じるかもしれませんが、そこまで手順は複雑ではありません。
是非試してみてください。