google-github-actions / setup-gcloud

A GitHub Action for installing and configuring the gcloud CLI.

Home Page:https://cloud.google.com/sdk/docs

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

gsutil fails when using Workload Identity Federation through /autH

jvaesteves opened this issue · comments

TL;DR

I can't rsync a repo folder with GCS using gsutil because it tries to use the gh-runner-account@common-hub.iam.gserviceaccount.com SA instead of the one authenticated via Workload Identity Federation, but using gcloud storage works fine.

Expected behavior

No response

Observed behavior

No response

Action YAML

# TODO: Define a reusable workflow that can be used to deploy to DEV and PRD
name: Deploy DAGs to DEV

on:
  push:
    branches:
      - main

env:
  WIF_PROVIDER: ${{ secrets.WIF_PROVIDER }}
  GCP_SERVICE_ACCOUNT: ${{ secrets.GCP_SERVICE_ACCOUNT }}
  COMPOSER_ENV: ${{ secrets.COMPOSER_ENV }}
  COMPOSER_LOCATION: ${{ secrets.COMPOSER_LOCATION }}
  DAGS_DIRECTORY: dags

jobs:
  deploy-dags:
    name: Deploy DAGs to DEV
    runs-on: self-hosted
    permissions:
      contents: read
      id-token: write
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Authenticate to Google Cloud
        uses: google-github-actions/auth@v1
        with:
          workload_identity_provider: ${{ env.WIF_PROVIDER }}
          service_account: ${{ env.GCP_SERVICE_ACCOUNT }}

      - name: Set up Cloud SDK
        uses: google-github-actions/setup-gcloud@v1
        with:
          # Minimal version to use WIF to authenticate
          version: '>= 390.0.0'

      - name: Show gcloud version
        run: gcloud --version

      - name: Extract Cloud Composer DAG bucket prefix
        id: dags-gcs-prefix
        run: |
          dag_gcs_prefix=$(gcloud composer environments describe "$COMPOSER_ENV" --location "$COMPOSER_LOCATION" --format="get(config.dagGcsPrefix)")
          echo "dag_gcs_prefix=$dag_gcs_prefix" >> $GITHUB_OUTPUT

      - name: Run DAGs deployment script
        run: |
          gsutil -m rsync -r "$DAGS_DIRECTORY" "${{ steps.dags-gcs-prefix.outputs.dag_gcs_prefix }}"

Log output

2023-11-09T14:52:52.7735464Z Requested labels: self-hosted
2023-11-09T14:52:52.7735703Z Job defined at: foobar/foobar/.github/workflows/deploy_to_dev.yml@refs/heads/minor/CONGRUENCE-3203
2023-11-09T14:52:52.7735820Z Waiting for a runner to pick up this job...
2023-11-09T14:52:53.3409066Z Job is about to start running on the runner: gh-runner-highmem-4ls4 (organization)
2023-11-09T14:52:56.9549975Z Current runner version: '2.311.0'
2023-11-09T14:52:56.9558840Z Runner name: 'gh-runner-highmem-4ls4'
2023-11-09T14:52:56.9559837Z Runner group name: 'default-private'
2023-11-09T14:52:56.9561112Z Machine name: 'gh-runner-highmem-4ls4'
2023-11-09T14:52:56.9564130Z ##[group]GITHUB_TOKEN Permissions
2023-11-09T14:52:56.9566816Z Contents: read
2023-11-09T14:52:56.9567351Z Metadata: read
2023-11-09T14:52:56.9568048Z ##[endgroup]
2023-11-09T14:52:56.9572695Z Secret source: Actions
2023-11-09T14:52:56.9573516Z Prepare workflow directory
2023-11-09T14:52:57.1099524Z Prepare all required actions
2023-11-09T14:52:57.1371458Z Getting action download info
2023-11-09T14:52:57.5816263Z Download action repository 'actions/checkout@v4' (SHA:b4ffde65f46336ab88eb53be808477a3936bae11)
2023-11-09T14:52:58.0270064Z Download action repository 'google-github-actions/auth@v1' (SHA:35b0e87d162680511bf346c299f71c9c5c379033)
2023-11-09T14:52:58.4261305Z Download action repository 'google-github-actions/setup-gcloud@v1' (SHA:e30db14379863a8c79331b04a9969f4c1e225e0b)
2023-11-09T14:52:58.9039590Z Complete job name: Deploy DAGs to DEV
2023-11-09T14:52:59.0499804Z ##[group]Run actions/checkout@v4
2023-11-09T14:52:59.0500420Z with:
2023-11-09T14:52:59.0501038Z   repository: foobar/foobar
2023-11-09T14:52:59.0502830Z   token: ***
2023-11-09T14:52:59.0503625Z   ssh-strict: true
2023-11-09T14:52:59.0504354Z   persist-credentials: true
2023-11-09T14:52:59.0505159Z   clean: true
2023-11-09T14:52:59.0505835Z   sparse-checkout-cone-mode: true
2023-11-09T14:52:59.0506742Z   fetch-depth: 1
2023-11-09T14:52:59.0507430Z   fetch-tags: false
2023-11-09T14:52:59.0508218Z   show-progress: true
2023-11-09T14:52:59.0508905Z   lfs: false
2023-11-09T14:52:59.0509542Z   submodules: false
2023-11-09T14:52:59.0510253Z   set-safe-directory: true
2023-11-09T14:52:59.0511033Z env:
2023-11-09T14:52:59.0513294Z   WIF_PROVIDER: ***
2023-11-09T14:52:59.0514885Z   GCP_SERVICE_ACCOUNT: ***
2023-11-09T14:52:59.0515717Z   COMPOSER_ENV: ***
2023-11-09T14:52:59.0516609Z   COMPOSER_LOCATION: ***
2023-11-09T14:52:59.0517583Z   DAGS_DIRECTORY: dags
2023-11-09T14:52:59.0518289Z ##[endgroup]
2023-11-09T14:52:59.2149905Z Syncing repository: foobar/foobar
2023-11-09T14:52:59.2152728Z ##[group]Getting Git version info
2023-11-09T14:52:59.2154067Z Working directory is '/runner-tmp/foobar/foobar'
2023-11-09T14:52:59.2155686Z [command]/usr/bin/git version
2023-11-09T14:52:59.2156163Z git version 2.34.1
2023-11-09T14:52:59.2158877Z ##[endgroup]
2023-11-09T14:52:59.2179885Z Temporarily overriding HOME='/runner-tmp/_temp/a8ce2e97-999e-4291-b9fb-ce3e79e88e67' before making global git config changes
2023-11-09T14:52:59.2183102Z Adding repository directory to the temporary git global config as a safe directory
2023-11-09T14:52:59.2186237Z [command]/usr/bin/git config --global --add safe.directory /runner-tmp/foobar/foobar
2023-11-09T14:52:59.2218769Z Deleting the contents of '/runner-tmp/foobar/foobar'
2023-11-09T14:52:59.2229157Z ##[group]Initializing the repository
2023-11-09T14:52:59.2234325Z [command]/usr/bin/git init /runner-tmp/foobar/foobar
2023-11-09T14:52:59.2276568Z hint: Using 'master' as the name for the initial branch. This default branch name
2023-11-09T14:52:59.2278498Z hint: is subject to change. To configure the initial branch name to use in all
2023-11-09T14:52:59.2280123Z hint: of your new repositories, which will suppress this warning, call:
2023-11-09T14:52:59.2280897Z hint: 
2023-11-09T14:52:59.2281505Z hint: 	git config --global init.defaultBranch <name>
2023-11-09T14:52:59.2282127Z hint: 
2023-11-09T14:52:59.2282906Z hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
2023-11-09T14:52:59.2284186Z hint: 'development'. The just-created branch can be renamed via this command:
2023-11-09T14:52:59.2286065Z hint: 
2023-11-09T14:52:59.2286797Z hint: 	git branch -m <name>
2023-11-09T14:52:59.2293169Z Initialized empty Git repository in /runner-tmp/foobar/foobar/.git/
2023-11-09T14:52:59.2308466Z [command]/usr/bin/git remote add origin https://github.com/foobar/foobar
2023-11-09T14:52:59.2353797Z ##[endgroup]
2023-11-09T14:52:59.2354583Z ##[group]Disabling automatic garbage collection
2023-11-09T14:52:59.2357348Z [command]/usr/bin/git config --local gc.auto 0
2023-11-09T14:52:59.2398484Z ##[endgroup]
2023-11-09T14:52:59.2399212Z ##[group]Setting up auth
2023-11-09T14:52:59.2406754Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2023-11-09T14:52:59.2449346Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2023-11-09T14:52:59.2796901Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2023-11-09T14:52:59.2839295Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2023-11-09T14:52:59.3168434Z [command]/usr/bin/git config --local http.https://github.com/.extraheader AUTHORIZATION: basic ***
2023-11-09T14:52:59.3217432Z ##[endgroup]
2023-11-09T14:52:59.3218850Z ##[group]Fetching the repository
2023-11-09T14:52:59.3233999Z [command]/usr/bin/git -c protocol.version=2 fetch --no-tags --prune --no-recurse-submodules --depth=1 origin +278a8a6797be6beea952644d5028c0c87cbaa108:refs/remotes/origin/minor/CONGRUENCE-3203
2023-11-09T14:52:59.8747011Z From https://github.com/foobar/foobar
2023-11-09T14:52:59.8749639Z  * [new ref]         278a8a6797be6beea952644d5028c0c87cbaa108 -> origin/minor/CONGRUENCE-3203
2023-11-09T14:52:59.8788812Z ##[endgroup]
2023-11-09T14:52:59.8797397Z ##[group]Determining the checkout info
2023-11-09T14:52:59.8799142Z ##[endgroup]
2023-11-09T14:52:59.8800486Z ##[group]Checking out the ref
2023-11-09T14:52:59.8803361Z [command]/usr/bin/git checkout --progress --force -B minor/CONGRUENCE-3203 refs/remotes/origin/minor/CONGRUENCE-3203
2023-11-09T14:52:59.8950482Z Switched to a new branch 'minor/CONGRUENCE-3203'
2023-11-09T14:52:59.8951814Z Branch 'minor/CONGRUENCE-3203' set up to track remote branch 'minor/CONGRUENCE-3203' from 'origin'.
2023-11-09T14:52:59.8959366Z ##[endgroup]
2023-11-09T14:52:59.9011577Z [command]/usr/bin/git log -1 --format='%H'
2023-11-09T14:52:59.9052610Z '278a8a6797be6beea952644d5028c0c87cbaa108'
2023-11-09T14:52:59.9535073Z ##[group]Run google-github-actions/auth@v1
2023-11-09T14:52:59.9535667Z with:
2023-11-09T14:52:59.9537215Z   workload_identity_provider: ***
2023-11-09T14:52:59.9538194Z   service_account: ***
2023-11-09T14:52:59.9538637Z   create_credentials_file: true
2023-11-09T14:52:59.9539175Z   export_environment_variables: true
2023-11-09T14:52:59.9539708Z   cleanup_credentials: true
2023-11-09T14:52:59.9540175Z   access_token_lifetime: 3600s
2023-11-09T14:52:59.9540952Z   access_token_scopes: https://www.googleapis.com/auth/cloud-platform
2023-11-09T14:52:59.9542207Z   retries: 3
2023-11-09T14:52:59.9542563Z   backoff: 250
2023-11-09T14:52:59.9542953Z   id_token_include_email: false
2023-11-09T14:52:59.9543404Z env:
2023-11-09T14:52:59.9544578Z   WIF_PROVIDER: ***
2023-11-09T14:52:59.9545457Z   GCP_SERVICE_ACCOUNT: ***
2023-11-09T14:52:59.9545914Z   COMPOSER_ENV: ***
2023-11-09T14:52:59.9546410Z   COMPOSER_LOCATION: ***
2023-11-09T14:52:59.9547022Z   DAGS_DIRECTORY: dags
2023-11-09T14:52:59.9547439Z ##[endgroup]
2023-11-09T14:53:00.4876659Z Created credentials file at "/runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json"
2023-11-09T14:53:00.5034963Z ##[group]Run google-github-actions/setup-gcloud@v1
2023-11-09T14:53:00.5035859Z with:
2023-11-09T14:53:00.5036208Z   version: >= 390.0.0
2023-11-09T14:53:00.5036727Z   skip_install: false
2023-11-09T14:53:00.5037360Z env:
2023-11-09T14:53:00.5039287Z   WIF_PROVIDER: ***
2023-11-09T14:53:00.5040604Z   GCP_SERVICE_ACCOUNT: ***
2023-11-09T14:53:00.5041279Z   COMPOSER_ENV: ***
2023-11-09T14:53:00.5042111Z   COMPOSER_LOCATION: ***
2023-11-09T14:53:00.5043055Z   DAGS_DIRECTORY: dags
2023-11-09T14:53:00.5044851Z   CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:00.5048412Z   GOOGLE_APPLICATION_CREDENTIALS: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:00.5050383Z   GOOGLE_GHA_CREDS_PATH: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:00.5051637Z   CLOUDSDK_CORE_PROJECT: foobar
2023-11-09T14:53:00.5052286Z   CLOUDSDK_PROJECT: foobar
2023-11-09T14:53:00.5052862Z   GCLOUD_PROJECT: foobar
2023-11-09T14:53:00.5053421Z   GCP_PROJECT: foobar
2023-11-09T14:53:00.5053989Z   GOOGLE_CLOUD_PROJECT: foobar
2023-11-09T14:53:00.5054545Z ##[endgroup]
2023-11-09T14:53:01.6683341Z Successfully authenticated
2023-11-09T14:53:01.6837609Z ##[group]Run gcloud --version
2023-11-09T14:53:01.6838282Z �[36;1mgcloud --version�[0m
2023-11-09T14:53:01.6885175Z shell: /usr/bin/bash -e {0}
2023-11-09T14:53:01.6885712Z env:
2023-11-09T14:53:01.6887443Z   WIF_PROVIDER: ***
2023-11-09T14:53:01.6888341Z   GCP_SERVICE_ACCOUNT: ***
2023-11-09T14:53:01.6888814Z   COMPOSER_ENV: ***
2023-11-09T14:53:01.6889310Z   COMPOSER_LOCATION: ***
2023-11-09T14:53:01.6889808Z   DAGS_DIRECTORY: dags
2023-11-09T14:53:01.6891008Z   CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:01.6893104Z   GOOGLE_APPLICATION_CREDENTIALS: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:01.6894972Z   GOOGLE_GHA_CREDS_PATH: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:01.6896292Z   CLOUDSDK_CORE_PROJECT: foobar
2023-11-09T14:53:01.6896928Z   CLOUDSDK_PROJECT: foobar
2023-11-09T14:53:01.6897531Z   GCLOUD_PROJECT: foobar
2023-11-09T14:53:01.6898091Z   GCP_PROJECT: foobar
2023-11-09T14:53:01.6898656Z   GOOGLE_CLOUD_PROJECT: foobar
2023-11-09T14:53:01.6899402Z   CLOUDSDK_METRICS_ENVIRONMENT: github-actions-setup-gcloud
2023-11-09T14:53:01.6900151Z   CLOUDSDK_METRICS_ENVIRONMENT_VERSION: 1.1.1
2023-11-09T14:53:01.6900721Z ##[endgroup]
2023-11-09T14:53:02.4364838Z Google Cloud SDK 454.0.0
2023-11-09T14:53:02.4366437Z bq 2.0.98
2023-11-09T14:53:02.4368163Z bundled-python3-unix 3.9.17
2023-11-09T14:53:02.4368751Z core 2023.11.03
2023-11-09T14:53:02.4369189Z gcloud-crc32c 1.0.0
2023-11-09T14:53:02.4369586Z gsutil 5.27
2023-11-09T14:53:02.6517651Z ##[group]Run dag_gcs_prefix=$(gcloud composer environments describe "$COMPOSER_ENV" --location "$COMPOSER_LOCATION" --format="get(config.dagGcsPrefix)")
2023-11-09T14:53:02.6519836Z �[36;1mdag_gcs_prefix=$(gcloud composer environments describe "$COMPOSER_ENV" --location "$COMPOSER_LOCATION" --format="get(config.dagGcsPrefix)")�[0m
2023-11-09T14:53:02.6521321Z �[36;1mecho "dag_gcs_prefix=$dag_gcs_prefix" >> $GITHUB_OUTPUT�[0m
2023-11-09T14:53:02.6543272Z shell: /usr/bin/bash -e {0}
2023-11-09T14:53:02.6543776Z env:
2023-11-09T14:53:02.6545054Z   WIF_PROVIDER: ***
2023-11-09T14:53:02.6545942Z   GCP_SERVICE_ACCOUNT: ***
2023-11-09T14:53:02.6546419Z   COMPOSER_ENV: ***
2023-11-09T14:53:02.6546908Z   COMPOSER_LOCATION: ***
2023-11-09T14:53:02.6547477Z   DAGS_DIRECTORY: dags
2023-11-09T14:53:02.6548675Z   CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:02.6550977Z   GOOGLE_APPLICATION_CREDENTIALS: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:02.6552890Z   GOOGLE_GHA_CREDS_PATH: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:02.6554131Z   CLOUDSDK_CORE_PROJECT: foobar
2023-11-09T14:53:02.6554758Z   CLOUDSDK_PROJECT: foobar
2023-11-09T14:53:02.6555560Z   GCLOUD_PROJECT: foobar
2023-11-09T14:53:02.6556106Z   GCP_PROJECT: foobar
2023-11-09T14:53:02.6556674Z   GOOGLE_CLOUD_PROJECT: foobar
2023-11-09T14:53:02.6557458Z   CLOUDSDK_METRICS_ENVIRONMENT: github-actions-setup-gcloud
2023-11-09T14:53:02.6558222Z   CLOUDSDK_METRICS_ENVIRONMENT_VERSION: 1.1.1
2023-11-09T14:53:02.6558791Z ##[endgroup]
2023-11-09T14:53:04.5175078Z ##[group]Run gsutil -m rsync -r "$DAGS_DIRECTORY" "gs://***-foobar-7e0fa486-bucket/dags"
2023-11-09T14:53:04.5176655Z �[36;1mgsutil -m rsync -r "$DAGS_DIRECTORY" "gs://***-foobar-7e0fa486-bucket/dags"�[0m
2023-11-09T14:53:04.5200000Z shell: /usr/bin/bash -e {0}
2023-11-09T14:53:04.5200591Z env:
2023-11-09T14:53:04.5201892Z   WIF_PROVIDER: ***
2023-11-09T14:53:04.5202790Z   GCP_SERVICE_ACCOUNT: ***
2023-11-09T14:53:04.5203265Z   COMPOSER_ENV: ***
2023-11-09T14:53:04.5203769Z   COMPOSER_LOCATION: ***
2023-11-09T14:53:04.5204274Z   DAGS_DIRECTORY: dags
2023-11-09T14:53:04.5205502Z   CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:04.5207622Z   GOOGLE_APPLICATION_CREDENTIALS: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:04.5209574Z   GOOGLE_GHA_CREDS_PATH: /runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json
2023-11-09T14:53:04.5210873Z   CLOUDSDK_CORE_PROJECT: foobar
2023-11-09T14:53:04.5211505Z   CLOUDSDK_PROJECT: foobar
2023-11-09T14:53:04.5212078Z   GCLOUD_PROJECT: foobar
2023-11-09T14:53:04.5212638Z   GCP_PROJECT: foobar
2023-11-09T14:53:04.5213204Z   GOOGLE_CLOUD_PROJECT: foobar
2023-11-09T14:53:04.5213936Z   CLOUDSDK_METRICS_ENVIRONMENT: github-actions-setup-gcloud
2023-11-09T14:53:04.5214688Z   CLOUDSDK_METRICS_ENVIRONMENT_VERSION: 1.1.1
2023-11-09T14:53:04.5215280Z ##[endgroup]
2023-11-09T14:53:07.5374564Z AccessDeniedException: 403 gh-runner-account@common-hub.iam.gserviceaccount.com does not have storage.objects.list access to the Google Cloud Storage bucket. Permission 'storage.objects.list' denied on resource (or it may not exist).
2023-11-09T14:53:07.8569673Z ##[error]Process completed with exit code 1.
2023-11-09T14:53:07.8692811Z Post job cleanup.
2023-11-09T14:53:07.9622828Z Removed exported credentials at "/runner-tmp/foobar/foobar/gha-creds-d5b89336a6efb7b3.json".
2023-11-09T14:53:07.9779518Z Post job cleanup.
2023-11-09T14:53:08.0960542Z [command]/usr/bin/git version
2023-11-09T14:53:08.1019322Z git version 2.34.1
2023-11-09T14:53:08.1093262Z Temporarily overriding HOME='/runner-tmp/_temp/1f49a0b0-65ea-490b-9363-c4e767c00a23' before making global git config changes
2023-11-09T14:53:08.1097787Z Adding repository directory to the temporary git global config as a safe directory
2023-11-09T14:53:08.1103493Z [command]/usr/bin/git config --global --add safe.directory /runner-tmp/foobar/foobar
2023-11-09T14:53:08.1159687Z [command]/usr/bin/git config --local --name-only --get-regexp core\.sshCommand
2023-11-09T14:53:08.1209649Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'core\.sshCommand' && git config --local --unset-all 'core.sshCommand' || :"
2023-11-09T14:53:08.1586507Z [command]/usr/bin/git config --local --name-only --get-regexp http\.https\:\/\/github\.com\/\.extraheader
2023-11-09T14:53:08.1606261Z http.https://github.com/.extraheader
2023-11-09T14:53:08.1634079Z [command]/usr/bin/git config --local --unset-all http.https://github.com/.extraheader
2023-11-09T14:53:08.1687822Z [command]/usr/bin/git submodule foreach --recursive sh -c "git config --local --name-only --get-regexp 'http\.https\:\/\/github\.com\/\.extraheader' && git config --local --unset-all 'http.https://github.com/.extraheader' || :"
2023-11-09T14:53:08.2402940Z Cleaning up orphan processes

Additional information

Google Cloud SDK 454.0.0
bq 2.0.98
bundled-python3-unix 3.9.17
core 2023.11.03
gcloud-crc32c 1.0.0
gsutil 5.27

Hi @jvaesteves - this appears to be a bug in the Google Cloud SDK. Can you please file a bug following the instructions here: https://cloud.google.com/sdk/docs/getting-support#file_bugs_or_feature_requests. Our team does not control the gcloud / gsutil CLIs.

FYI @thomasmaclean