Доступ к данным BigQuery из разных проектов в одной организации с помощью учетной записи службы

Доступ к данным BigQuery из разных проектов в одной организации с помощью учетной записи службы

У меня возникли серьезные проблемы с установкой официального клиента BigQuery (на Python 3) в другом проекте в той же организации, авторизованном через сервис Cloud Run.

Служба Cloud Run находится в Project Main, а я пытаюсь получить доступ к таблице в Project Other — оба эти проекта находятся в одной организации.

Учетная запись службы была создана пользователем в Project Main (не по умолчанию) и имела все необходимые разрешения для запуска в качестве учетной записи службы в Project Main, а электронной почте учетной записи службы была предоставлена ​​только роль «Пользователь BigQuery» в Project Other.

В Python у меня есть такой фрагмент кода:

from google.cloud import bigquery

query_str = "SELECT * FROM `project_other.prod.table`"

bqclient = bigquery.Client()
df = bqclient.query(query_str).result().to_dataframe()

Он запускается внутри контейнера, развернутого в Cloud Run в основном проекте, и к развертыванию прикреплена правильная учетная запись службы.

При запуске скрипта возникает исключение вроде следующего:

raise self._exception google.api_core.exceptions.BadRequest: 400 Access Denied: Table
project_other:prod.table: User does not have permission to query table project_other:prod.table. at [4:13]

Насколько я понимаю, если учетная запись службы, прикрепленная к развертыванию Cloud Run, имеет необходимые разрешения, вам не придется выполнять какую-либо сложную аутентификацию в контейнере, поскольку все это «сделает за вас» управляемая служба.

Может кто-нибудь помочь мне разобраться, почему это происходит? Учетная запись службы есть iam.serviceAccounts.actAsв Project Main, но нужны ли ей эти разрешения и в Project Other, или достаточно роли BigQuery User?

решение1

Для запроса таблицы вам необходимо разрешениеbigquery.tables.getData. Роль пользователя BigQuerybigquery.tables.list. Изменить роль наПросмотрщик данных BigQuery(роли/bigquery.dataViewer).

Предопределенные роли и разрешения BigQuery

Для изменения/записи таблицы вам необходимо разрешениеbigquery.tables.updateData. Это разрешение есть в ролях:

  • Администратор BigQuery (roles/bigquery.admin)
  • Владелец данных BigQuery (roles/bigquery.dataOwner)
  • Редактор данных BigQuery (roles/bigquery.dataEditor) <- рекомендуемая роль.

Связанный контент