Puncte:0

Accesarea datelor BigQuery din diferite proiecte din aceeași organizație cu un cont de serviciu

drapel ng

Întâmpin probleme serioase pentru a obține clientul oficial BigQuery (în Python 3) la un alt proiect din aceeași organizație, autorizat de la un serviciu Cloud Run.

Serviciul Cloud Run este în Project Main și încerc să accesez un tabel în Project Other -- ambele proiecte sunt în aceeași organizație.

Contul de serviciu a fost un cont de serviciu creat de utilizator creat în Project Main (nu cel implicit) și are toate permisiunile necesare pentru a fi rulat ca cont de serviciu în Project Main, iar e-mailul contului de serviciu a primit doar rolul „Utilizator BigQuery”. în Proiect Altul.

În Python, am un fragment de cod ca acesta:

din google.cloud import bigquery

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

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

Acesta rulează în interiorul containerului implementat în Cloud Run în principalul proiect, iar implementarea are atașat contul de serviciu corect.

Când declanșez scriptul, ajung cu o excepție ca următoarea:

raise self._exception google.api_core.exceptions.BadRequest: 400 Acces refuzat: tabel
project_other:prod.table: Utilizatorul nu are permisiunea de a interoga tabelul project_other:prod.table. la [4:13]

Din câte am înțeles, dacă contul de serviciu atașat implementării Cloud Run are permisiunile necesare, nu trebuie să faceți nicio autentificare elegantă în container, deoarece totul este „realizat pentru dvs.” de către serviciul gestionat.

Poate cineva să mă ajute, vă rog, să aflu de ce se întâmplă asta? Contul de serviciu are iam.serviceAccounts.actAs în Project Main, dar are nevoie de acele permisiuni și în Project Other sau este suficient rolul de utilizator BigQuery?

John Hanley avatar
drapel cn
Pentru a interoga un tabel, aveți nevoie de permisiunea **bigquery.tables.getData**. Rolul **Utilizator BigQuery** are **bigquery.tables.list**. Încercați să schimbați rolul în **BigQuery Data Viewer** (roles/bigquery.dataViewer). https://cloud.google.com/bigquery/docs/access-control#bigquery
bandwagoner avatar
drapel ng
@JohnHanley Acest lucru a rezolvat problema, mulțumesc foarte mult! Doar pentru a adăuga un alt punct care nu era în întrebarea mea inițială, pentru a scrie în orice tabel, trebuia să acord și contului de serviciu rolul BigQuery Data Editor. Dacă nu te deranjează să adaugi comentariul tău ca soluție, mă bucur să-l accept.
Puncte:0
drapel cn

Pentru a interoga un tabel, aveți nevoie de permisiunea bigquery.tables.getData. Rolul pe care îl are utilizatorul BigQuery bigquery.tables.list. Schimbați rolul în Vizualizator de date BigQuery (roles/bigquery.dataViewer).

BigQuery Roluri și permisiuni predefinite

Pentru a modifica/scrie un tabel, aveți nevoie de permisiunea bigquery.tables.updateData. Această permisiune este în rolurile:

  • Administrator BigQuery (roles/bigquery.admin)
  • Proprietar de date BigQuery (roles/bigquery.dataOwner)
  • Editor de date BigQuery (roles/bigquery.dataEditor) <- rol recomandat.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.