GCP CLOUDSDK_ACTIVE_CONFIG_NAME игнорировать аккаунт - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь настроить несколько конфигураций в GCP, как показано ниже

NAME        IS_ACTIVE  ACCOUNT              PROJECT   COMPUTE_DEFAULT_ZONE  COMPUTE_DEFAULT_REGION
default     False      mail_a@mail.com       prj_a
test        True       mail_b@mail.com       prj_b

Когда я выполняю команды из CLI, все работает правильно, но если я провожу тест из Python, кажется, неправильная учетная запись

import os
os.environ['CLOUDSDK_ACTIVE_CONFIG_NAME'] = 'test'
from google.cloud import storage
storage_client = storage.Client()
buckets = storage_client.list_buckets()

Я получаю следующую ошибку, например, клиент пытается правильно получить доступ в тестовой конфигурации, но с учетной записью по умолчанию mail_a@mail.com вместо mail_b@mail.com

google.api_core.exceptions.Forbidden: 403 GET https://storage.googleapis.com/storage/v1/b?project=prj_b&projection=noAcl: mail_a@mail.com does not have storage.buckets.list access to the Google Cloud project.

Я также пытался принудительно запустить учетную запись с помощью

os.environ['CLOUDSDK_CORE_ACCOUNT'] = 'mail_b@mail.com'

, но, похоже, игнорируется

Есть идеи?

ОБНОВЛЕНИЕ

Проблема, похоже, связана с приложением - по умолчанию не поддерживает множественную конфигурацию. Нужно каждый раз запускать gcloud auth application-default login для каждого аккаунта.

1 Ответ

0 голосов
/ 08 августа 2020

Паоло,

По поводу ошибки:

«google.api_core.exceptions.Forbidden: 403»

«mail_a@mail.com не имеет storage.buckets .list доступ к проекту Google Cloud ».

Проблема связана с разрешениями IAM, похоже, что учетная запись« mail_a@mail.com »не имеет нужной роли в проекте« prj_b ».

Итак, убедитесь, что указанная выше учетная запись имеет предопределенную роль link1 Storage Admin, которая содержит все разрешения storage.buckets. * Или любую из примитивных ролей link2 : Наблюдатель, редактор и владелец; в проекте 'prj_b'.

После того, как вы получите контроль над ролями IAM, вы должны автоматизировать аутентификацию в коде python, чтобы избежать ручных задач аутентификации.

Я заметил вас ' вы используете в своем коде 'os.environ', который является 'переменной среды', и он работает, когда вы запускаете все из интерфейса командной строки, но по какой-то причине не работает должным образом.

Поскольку вы используете 'Клиентские библиотеки облачного хранилища' и код python, предлагаю вам ознакомиться с этой публикацией c документацией link3 , методы аутентификации описаны в этом руководстве link4 :

1.- Автоматический поиск учетных данных 2.- Передача учетных данных вручную

Там вы найдете python примеры кода.

Вот документация Storage Client link5

Надеюсь Вы найдете вышеуказанную информацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...