DockerコンテナとローカルでGCPの認証情報を共有する

ローカルマシンで認証をする

gcloud auth application-default login

ローカルマシンでgcloud auth application-default loginコマンドを実行してアカウント認証を行うと、下記の場所にクレデンシャルファイルが格納される。

Mac: $HOME/.config/gcloud/application_default_credentials.json

Windows: %APPDATA%\gcloud\application_default_credentials.json

How Application Default Credentials works

クレデンシャルファイルをバインドマウントする

上記のクレデンシャルファイルをdocker runのバインドマウント機能を使ってコンテナにバインドする。

docker run -v ~/.config/gcloud/application_default_credentials.json:/tmp/keys/adc.json:ro

上の書き方であれば、Dockerコンテナ内で /tmp/keys/adc.json というパスでローカルのGCPのApplication Defaultのクレデンシャルファイルを参照できるようになる。(Macの場合)

Docker Composeを使う場合は下記のように指定すればOK。

version: '3'
services:
  app:
    volumes:
      - ~/.config/gcloud/application_default_credentials.json:/tmp/keys/adc.json:ro

コンテナ内で参照するApplication Default認証のパスを指定する

GCPの各ライブラリは環境変数 GOOGLE_APPLICATION_CREDENTIALSで指定された場所にあるクレデンシャルファイルを使って認証を行う。Dockerコンテナにマウントしたクレデンシャルの保存先 /tmp/keys/adc.jsonGOOGLE_APPLICATION_CREDENTIALS にセットするように設定すれば、Dockerコンテナ内でローカル環境の認証情報を使ってGCPの各ライブラリを動かすことができるようになる。

version: '3'
services:
  app:
    environment:
      GOOGLE_APPLICATION_CREDENTIALS: /tmp/keys/adc.json
    volumes:
      - ~/.config/gcloud/application_default_credentials.json:/tmp/keys/adc.json:ro