У меня возникли серьезные проблемы с подключением официального клиента BigQuery (на Python 3) к другому проекту в той же организации, авторизованному сервисом Cloud Run.
Служба Cloud Run находится в Project Main, и я пытаюсь получить доступ к таблице в Project Other — оба этих проекта находятся в одной организации.
Учетная запись службы была созданной пользователем учетной записью службы, созданной в Project Main (а не по умолчанию), и имеет все необходимые разрешения для запуска в качестве учетной записи службы в Project Main, а электронной почте учетной записи службы была предоставлена только роль «Пользователь BigQuery». в Проекте Другое.
В Python у меня есть такой фрагмент кода:
из google.cloud импортировать bigquery
query_str = "ВЫБЕРИТЕ * ИЗ `project_other.prod.table`"
bqclient = bigquery.Client()
df = bqclient.query(query_str).result().to_dataframe()
Это выполняется внутри контейнера, развернутого в Cloud Run в основном проекте, и к развертыванию привязана правильная учетная запись службы.
При запуске сценария я получаю исключение, подобное следующему:
поднять self._exception google.api_core.exceptions.BadRequest: 400 Отказано в доступе: Таблица
project_other:prod.table: у пользователя нет разрешения запрашивать таблицу project_other:prod.table. в [4:13]
Насколько я понимаю, если учетная запись службы, подключенная к развертыванию Cloud Run, имеет необходимые разрешения, вам не нужно выполнять какую-либо причудливую аутентификацию в контейнере, поскольку все это «сделано за вас» управляемой службой.
Может кто-нибудь, пожалуйста, помогите мне понять, почему это происходит? Сервисный аккаунт имеет iam.serviceAccounts.actAs
в Project Main, но нужны ли эти разрешения и в Project Other, или достаточно роли пользователя BigQuery?