Per-project gsutil service accounts
When using any library for Google Cloud you can specify a service account with GOOGLE_APPLICATION_CREDENTIALS, but
unfortunately that doesn’t work when using gsutil in shell scripts. The documentation suggests to use
gcloud auth activate-service-account, but that “activates” the service account for all gsutil invocations, and
doesn’t work if you installed a standalone version of gsutil —without gcloud.
I wanted to have one service account per project so that each project has access to the relevant resources only. The
solution I found is to use a Boto file: this is a ini-like file format used for AWS configuration, but gsutil also
supports it. You can tell gsutil to find such file with BOTO_CONFIG or give it a list of paths to look in with
BOTO_PATH.
In a simple project where the main code is a shell script, the setup would look like this:
$ ls -a
.boto
script.sh
service-account.json
In .boto:
[Credentials]
gs_service_key_file=/app/service-account.json
In script.sh:
#!/bin/env bash -e
export BOTO_CONFIG=/app/.boto
gsutil ...
This is a bit cumbersome compared to GOOGLE_APPLICATION_CREDENTIALS but it works well.