3.6 KiB
Google Cloud Storage usage in Chromium
This doc explains the components that help Chromium developer's and Chromium infrastructure interact with Google Cloud Storage.
When will I encounter Google Cloud Storage when developing Chromium
There may be different hooks run by gclient that pull necessary artifacts
from Google Cloud Storage. gclient runhooks or gclient sync command would
download the files, depending on your .gclient config.
In other cases the Chromium CI build recipes also read and write objects to Google Cloud Storage.
Components
These components should have the same effect whether they're run on a Swarming
bot or a developer's Chromium checkout. These components do not affect the
usage of the standard gsutil or gcloud storage binaries outside of Chromium
workflows. In those cases, you would need to use gsutil config or
gcloud auth login directly.
gsutil.py
gsutil.py wraps an unmodified version of gsutil which handles authentication support with LUCI Auth and pins the gsutil version.
All gsutil arguments, except for config, are passed through to the actual
gsutil binary. The config argument will redirect to a standard
luci-auth login interactive flow and generate a token with
https://www.googleapis.com/auth/devstorage.full_control
scope. This scope is necessary for the wide range of commands gsutil supports.
Every command sent through to the gsutil binary is wrapped with
luci-auth context. Context starts a local LUCI auth context server which
creates a temporary BOTO file which in turn fools gsutil into fetching its
access tokens from the context server. When the command is finished the BOTO
file is deleted and the local context server stopped so there's nothing to
persist and risk leaking. Note: The context server is always running on bots.
You can view this happening here:
root@8447532ea598:~/chromium$ inotifywait -m -r /tmp/ | grep .boto
Setting up watches.
Watches established.
/tmp/luci56666486/gsutil-luci-auth/ OPEN .boto
/tmp/luci56666486/gsutil-luci-auth/ ACCESS .boto
/tmp/luci56666486/gsutil-luci-auth/ CLOSE_NOWRITE,CLOSE .boto
/tmp/luci56666486/gsutil-luci-auth/ OPEN .boto
/tmp/luci56666486/gsutil-luci-auth/ ACCESS .boto
/tmp/luci56666486/gsutil-luci-auth/ CLOSE_NOWRITE,CLOSE .boto
/tmp/luci56666486/gsutil-luci-auth/ DELETE .boto
The code that actually performs this can be found below in the LUCI auth gsutil integration section.
Note: gsutil.py can use any .boto file provided in the home directory or via
the BOTO_CONFIG environment variable. You should not need either of these in
most cases, furthermore they will likely cause problems for you so we strongly
suggest removing them if already set.
download_from_google_storage.py
download_from_google_storage.py is a convenience wrapper library around gsutil.py. If you are not working in Python then it's probably best to use the gsutil.py command-line interface (CLI) described above.
LUCI Auth gsutil Integration
luci-auth gsutil integration
library is a shim library that's used to enable a 3-legged OAuth flow using LUCI
auth refresh tokens rather than the standard gcloud auth login refresh
tokens or gsutil config generated BOTO file.