GCP Google Authのプラクティス
概要
- GCPでpythonやjsなどから他のシステムを参照するときにどのようなフローで認証するのがよいのかプラクティスがある
- 一般的に、サービスアカウントのクレデンシャル情報をdockerの中に入れたりするのはセキュリティ上よくない
- gcloud 認証ヘルパーという機能を用いてクレデンシャル情報を入れたり、特定のpythonライブラリを用いる
Application Default Credentials (ADC) の優先順位
GOOGLE_APPLICATION_CREDENTIALS
に設定された鍵フィアル- OAuth2時に出力された
~/.config/gcloud/applicstion_default_credentials.json
のファイル - GCP上のメタデータから得られた情報
OAuth2で認証ファイルを出力する
# デフォルのスコープで認証ファイルを出力
$ gcloud auth application-default login
# 特定のスコープで認証ファイルを出力
$ gcloud auth application-default login --scopes=https://www.googleapis.com/auth/cloud-platform,https://www.googleapis.com/auth/bigquery,https://www.googleapis.com/auth/drive
すると~/.config/gcloud/applicstion_default_credentials.json
が得られる
これをdocker等で使うときは以下のように認証ファイルを共有する
$ docker run -it -v ~/.config/:/root/.config <container-name>
これは一般的なGCPを用いたpythonスクリプトでも最初に参照される
pythonでADCからクレデンシャル情報を得る
google-authのインストール
$ python3 -m pip install google-auth
credentialsインスタンスを得る
import google.auth
credentials, project_id = google.auth.default()
- 環境変数の
GOOGLE_APPLICATION_CREDENTIALS
がセットされていると最初にそちらから読み取られる
GOOGLE_APPLICATION_CREDENTIALSを優先しないようにする
$ unset GOOGLE_APPLICATION_CREDENTIALS
dockerコンテナの内部で認証を通す
- ローカル開発などに限定したとき
- root部分は適宜変更
$ docker run -v ~/.config/gcloud/:/root/.config/gcloud -p 8080:8080 -it <image-name>