Home > Software design >  Authenticate Google Cloud Storage Python client with gsutil-generated boto file
Authenticate Google Cloud Storage Python client with gsutil-generated boto file

Time:06-11

I'm trying to automate report downloading from Google Play (thru Cloud Storage) using GC Python client library. From the docs, I found that it's possible to do it using gsutil. I found this question has been answered here, but I also found that Client infers credentials from environment and I plan to do this on automation platform with (assumed) no gcloud credentials set.

I've found that you can generate gsutil boto file then use it as credential, but how can I load this into the client library?

CodePudding user response:

This is not exactly a direct answer to your question, but the best way would be to create a service account in GCP, and then use the service account's JSON keyfile to interact with GCS. See this documentation on how to generate said keyfile.
NOTE: You should treat this keyfile as a password as it will have the access you give it in the step below. So no uploading to public github repos for example.

You'll also have to give the serviceaccount the permission Storage Object Viewer, or one with more permissions.
NOTE: Always use the least needed to due to security considerations.

The code for this is extremely simple. Note that this is extremely similar to the methods mentioned in the link for generating the keyfile, the exception being the way the client is instantiated.

requirements.txt

google-cloud-storage

code

from google.cloud import storage
cred_json_file_path = 'path/to/file/credentials.json'
client = storage.Client.from_service_account_json(cred_json_file_path)

If you want to use the general Google API Python client library you can use this library to do a similar instantiation of a credentials object using the JSON keyfile, but for GCS the google-cloud-storage library is very much preferred as it does some magic behind the scenes, as the API python client library is a very generic one that (theoretically) be useable with all Google API's.

CodePudding user response:

gsutil will look for a .boto file in the home directory of the user invoking it, so ~/.boto, for Linux and macOS, and in %HOMEDRIVE%%HOMEPATH% for Windows.

Alternately, you can set the BOTO_CONFIG environment variable to the path of the .boto file you want to use. Here's an example:

BOTO_CONFIG=/path/to/your_generated_boto_file.boto gsutil -m cp files gs://bucket

You can generate a .boto file with a service account by using the "-e" flag with the config command: gsutil config -e.

Also note that if gsutil is installed with the gcloud command, gcloud will share its authentication config with gsutil unless you disable that behavior with this command: gcloud config set pass_credentials_to_gsutil false.

https://cloud.google.com/storage/docs/boto-gsutil

  • Related