📘
gsutilコマンド使用時のサービスアカウントを環境変数で切り替える方法
GCPのCloud SDK (gsutil) で使われるサービスアカウントを環境変数で切り替えて利用しようと思ったところ、なかなか上手くいかなかったので備忘録として残します。
やりたかったこと
gsutil
コマンドでGCSを操作するにあたって、実行するスクリプトごとにサービスアカウントを切り替える必要があった。
gcloud auth activate-service-account
コマンドでサービスアカウントを切り替えることはもちろん可能だが、これは他のスクリプトにも影響を与えてしまうため避けたかった。
解決策
gcloud named configurationを複数作成しておき、環境変数 CLOUDSDK_ACTIVE_CONFIG_NAME
でconfigurationを指定すればよかった。
詳細
-
configurationを作成する
$ gcloud config configuration create <configuration_name>
-
サービスアカウントをactivateする
$ gcloud auth activate-service-account <account> --key_file=<path/to/key_file>
-
元々activeになっていたconfigurationをactivate (今回はdefaultと想定)
$ gcloud config configuration activate default
-
設定を確認する
# 元々のアカウントの設定になっていればOK $ gcloud config list # 今回設定したサービスアカウントになっていればOK $ CLOUDSDK_ACTIVE_CONFIG_NAME=<configuration_name> gcloud config list
-
サービスアカウントを指定してgsutilコマンドを実行する
# gsutilコマンドが指定のサービスアカウントで実行できているはず $ CLOUDSDK_ACTIVE_CONFIG_NAME=<configuration_name> gsutil ls
試したが上手くいかなかったこと
- 環境変数
GOOGLE_APPLICATION_CREDENTIALS
でサービスアカウントを指定する- これはクライアントライブラリ(Python APIなど)のサービスアカウントを指定するものらしく、Cloud SDKでは無視されてしまう
- 環境変数
CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE
でサービスアカウントを指定する-
gcloud
コマンドやbq
コマンドでは動くようだが、gsutil
コマンドでは無視されてしまう
-
Discussion