ฉันมีปัญหาร้ายแรงในการรับไคลเอนต์ BigQuery อย่างเป็นทางการ (ใน Python 3) ไปยังโครงการอื่นในองค์กรเดียวกันที่ได้รับอนุญาตจากบริการ Cloud Run
บริการ Cloud Run อยู่ใน Project Main และฉันกำลังพยายามเข้าถึงตารางใน Project อื่นๆ ทั้งสองโปรเจ็กต์นี้อยู่ในองค์กรเดียวกัน
บัญชีบริการเป็นบัญชีบริการที่ผู้ใช้สร้างขึ้นซึ่งสร้างขึ้นใน 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 เพียงพอหรือไม่