Dockerfileなどのスクリプトで gsutil
を実行したい時があったので。
環境変数 GOOGLE_APPLICATION_CREDENTIALS
にサービスアカウントキーファイルをセットすればいいかと思いきや、それだけでは
ServiceException: 401 Anonymous caller
does not havestorage.objects.list access to bucket
のようなエラーが出てしまう。
結論
https://cloud.google.com/storage/docs/gsutil_install?hl=ja#deb を参考にする。
$ export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | \
sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | \
sudo apt-key add - && \
sudo apt-get -y update && \
sudo apt-get -y install google-cloud-sdk && \
gcloud auth activate-service-account \
--key-file=/path/to/service_account/key_file.json
最後の
gcloud auth activate-service-account \
--key-file=/path/to/service_account/key_file.json
がミソ。 ドキュメントの通りに gcloud init
とすると、ログイン操作が必要になってしまいスクリプトでは実行できない。