Tôi đang gặp một số sự cố nghiêm trọng khi tải ứng dụng khách BigQuery chính thức (bằng Python 3) cho một dự án khác trong cùng một tổ chức được ủy quyền từ dịch vụ Cloud Run.
Dịch vụ Cloud Run nằm trong Dự án chính và tôi đang cố truy cập vào một bảng trong Dự án khác -- cả hai dự án này đều thuộc cùng một tổ chức.
Tài khoản dịch vụ là tài khoản dịch vụ do người dùng tạo trong Project Main (không phải tài khoản mặc định) và có tất cả các quyền bắt buộc để chạy dưới dạng tài khoản dịch vụ trong Project Main và email của tài khoản dịch vụ chỉ được cung cấp vai trò "Người dùng BigQuery" trong dự án khác.
Trong Python, tôi có một đoạn mã như thế này:
từ google.cloud nhập bigquery
query_str = "CHỌN * TỪ `project_other.prod.table`"
bqclient = bigquery.Client()
df = bqclient.query(query_str).result().to_dataframe()
Điều này chạy bên trong vùng chứa được triển khai cho Cloud Run trong dự án chính và việc triển khai có tài khoản dịch vụ chính xác được đính kèm.
Khi kích hoạt tập lệnh, tôi kết thúc với một ngoại lệ như sau:
nâng cao self._exception google.api_core.Exceptions.BadRequest: 400 Truy cập bị Từ chối: Bảng
project_other:prod.table: Người dùng không có quyền truy vấn bảng project_other:prod.table. lúc [4:13]
Theo những gì tôi hiểu, nếu tài khoản dịch vụ được đính kèm với triển khai Cloud Run có các quyền cần thiết, thì bạn không phải thực hiện bất kỳ xác thực ưa thích nào trong vùng chứa vì dịch vụ được quản lý đã "làm cho bạn" tất cả.
Ai đó có thể vui lòng giúp tôi tìm ra lý do tại sao điều này đang xảy ra? Tài khoản dịch vụ có iam.serviceAccounts.actAs
trong Dự án chính, nhưng nó cũng cần những quyền đó trong Dự án khác hay vai trò Người dùng BigQuery là đủ?