Zugriff auf BigQuery-Daten aus verschiedenen Projekten in derselben Organisation mit einem Servicekonto

Zugriff auf BigQuery-Daten aus verschiedenen Projekten in derselben Organisation mit einem Servicekonto

Ich habe ernsthafte Probleme, den offiziellen BigQuery-Client (in Python 3) von einem Cloud Run-Dienst autorisiert zu einem anderen Projekt in derselben Organisation zu bekommen.

Der Cloud Run-Dienst befindet sich im Hauptprojekt und ich versuche, auf eine Tabelle im anderen Projekt zuzugreifen. Beide Projekte befinden sich in derselben Organisation.

Bei dem Dienstkonto handelte es sich um ein vom Benutzer erstelltes Dienstkonto, das in Project Main erstellt wurde (nicht das Standardkonto), und es verfügt über alle erforderlichen Berechtigungen, um als Dienstkonto in Project Main ausgeführt zu werden. Der E-Mail-Adresse des Dienstkontos wurde in Project Other nur die Rolle „BigQuery-Benutzer“ zugewiesen.

In Python habe ich einen Codeausschnitt wie diesen:

from google.cloud import bigquery

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

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

Dies wird innerhalb des Containers ausgeführt, der in Cloud Run im Hauptprojekt bereitgestellt wird, und der Bereitstellung ist das richtige Dienstkonto zugeordnet.

Beim Auslösen des Skripts erhalte ich eine Ausnahme wie die folgende:

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]

So wie ich es verstehe, müssen Sie, wenn das an die Cloud Run-Bereitstellung angehängte Dienstkonto über die erforderlichen Berechtigungen verfügt, keine aufwändige Authentifizierung im Container durchführen, da dies alles vom verwalteten Dienst „für Sie erledigt“ wird.

Kann mir bitte jemand helfen, herauszufinden, warum das passiert? Das Servicekonto ist iam.serviceAccounts.actAsin Project Main vorhanden, aber benötigt es diese Berechtigungen auch in Project Other oder reicht die BigQuery-Benutzerrolle aus?

Antwort1

Um eine Tabelle abzufragen, benötigen Sie die Berechtigungbigquery.tables.getDataDie Rolle BigQuery-Benutzer hatbigquery.tables.listÄndern Sie die Rolle inBigQuery-Datenbetrachter(Rollen/BigQuery.DataViewer).

Vordefinierte Rollen und Berechtigungen in BigQuery

Um eine Tabelle zu ändern/schreiben, benötigen Sie die Berechtigungbigquery.tables.updateDataDiese Berechtigung ist in den Rollen enthalten:

  • BigQuery-Administrator (roles/bigquery.admin)
  • BigQuery-Dateneigentümer (roles/bigquery.dataOwner)
  • BigQuery-Dateneditor (roles/bigquery.dataEditor) <- empfohlene Rolle.

verwandte Informationen