Google Cloud CLI - проблемы аутентификации в многопроектной среде - PullRequest
0 голосов
/ 24 октября 2018

ОТВЕТ:

В основном, решение настраивает конфигурации ONCE, а затем перед запуском bq установите переменную CLOUDSDK_ACTIVE_CONFIG_NAME в нужную вам конфигурацию.НЕ используйте gcloud в процессах ETL, чтобы не касаться каталога конфигурации.

Запустите это ОДИН РАЗ вручную на сервере:

gcloud config configurations create GCP_PROJECT_CONFIG_NAME
gcloud config set project GCP_PROJECT
gcloud auth activate-service-account --key-file=key.json --project=GCP_PROJECT
gcloud config configurations activate GCP_PROJECT_CONFIG_NAME

И затем перед выполнением bq экспортируйте эту переменную:

export CLOUDSDK_ACTIVE_CONFIG_NAME=GCP_PROJECT_CONFIG
bq query 'select "this will work!"'

ОРИГИНАЛЬНЫЙ ВОПРОС:

Я использую bq команду CLI в процессах ETL и хотел бы проходить аутентификацию без использования gcloud.Я понимаю, что для аутентификации рекомендуется использовать команду gcloud, однако она вызывает проблемы в сценарии, в котором:

  • Существует несколько процессов ETL-GCP, работающих под одним и тем же пользователем ОС
  • Эти процессы аутентифицируются одновременно с использованием разных учетных записей служб и записи в разные проекты

Конфигурация учетных данных хранится в домашнем каталоге пользователя в ~ / .config / gcloud.gcloud изменяет его при аутентификации (например, устанавливает файл учетной записи проекта и службы).Когда несколько процессов аутентифицируются одновременно, они перезаписывают конфигурации друг друга или просто повреждают файлы.Конечным результатом является то, что мы не можем использовать команду bq, пока не исправим вручную конфигурацию

Я попытался передать параметр bigqueryrc, чтобы указать bq на правый ключ и проект, но bq, похоже, полностью его игнорирует.

export BIGQUERYRC=my_config_path && bq query...

export BIGQUERYRC=my_config_path && bq --bigqueryrc $BIGQUERYRC query ...

Также попытался указать эти параметры внутри команды:

bq --service_account_credential_file $PATH --project_id $PROJECT query ...

Myconfig выглядит следующим образом:

credential_file = path/file.json
project_id = project_id
location = EU

Когда я запускаю выше, команда bq просто принимает значения по умолчанию, установленные gcloud.Ошибка говорит о том, что учетная запись службы не аутентифицирована для запроса проекта - эта учетная запись службы была установлена ​​другим процессом, который выполнялся параллельно / незадолго до моей команды.Я попытался установить несколько конфигураций gcloud, но они, к сожалению, сохраняют состояние в домашнем каталоге пользователя, а не сохраняют состояние для сеанса оболочки.Поэтому, когда я устанавливаю учетную запись службы проекта / идентификатора для своего процесса, она распространяется на все сеансы оболочки, когда мы разделяем состояние.

Есть идеи, как решить эту проблему?

Ссылки: Команда BQ

...