Î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?