LoginSignup
13
11

More than 5 years have passed since last update.

fluent-plugin-bigquery の認証に JSON key を使う

Last updated at Posted at 2015-11-03

結論

fluent-plugin-bigquery を GCE 以外で使う場合、認証情報が必要だが、

  • p12キーファイルはディスコンなので、JSON key の利用を推奨する
  • JSON key 形式なら、fluentd の設定ファイルに秘密鍵を埋め込めて便利

設定サンプル

<match dummy>
  type bigquery
  auth_method json_key
  json_key {
    "private_key": "-----BEGIN PRIVATE KEY-----\n...",
    "client_email": "xxx@developer.gserviceaccount.com"
  }
</match>

解説

先日、fluent-plugin-bigquery に以下の Pull Request を出してマージしてもらった。

Support JSON key file and application default credentials authentication #50

この変更は fluent-plugin-bigquery の v2.1.12 に含まれていて、既に使える状態。

なぜ JSON key を利用することを推奨するのか

これは単純に Google が推奨しているから。現在、Developer Console で service account を作成すると以下の様な文言がでる。JSON が推奨、P12 形式は後方互換性のために残されていると。

d292d7b0-76b9-11e5-9303-d64d91aa8538.png

JSON key にすると何が便利になるのか

P12 形式が非推奨とはいえ、しばらくは使える現状で、JSON key に切り替えるメリットはあるのかというと、あると思っている。

それは、JSON 形式にすると、秘密鍵の情報を fluentd の設定ファイル中に埋め込めるようになることである。

<match dummy>
  type bigquery
  auth_method json_key
  json_key {
    "private_key": "-----BEGIN PRIVATE KEY-----\n...",
    "client_email": "xxx@developer.gserviceaccount.com"
  }
</match>

この方式のメリットとしては、以下の2点があげられる。

  • 秘密鍵ファイルの配置(どこのパスに配置するか、権限はどうするかなどに)悩まなくてすむ。
  • 文字列として埋め込めるので、Ansible などの Provisioning ツールと相性が良い。以下のように変数にしておくことで、本番とステージングの切り替えが簡単にできたりする。実行時に変数の値を指定すれば、秘密鍵の内容をリポジトリにコミットしておく必要もなくなる。
<match dummy>
  type bigquery
  auth_method json_key
  json_key {
    "private_key": "{{ bq_private_key }}",
    "client_email": "{{ bq_client_email }}"
  }
</match>
13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11