Điểm:0

Truy cập dữ liệu BigQuery từ các dự án khác nhau trong cùng một tổ chức bằng Tài khoản dịch vụ

lá cờ ng

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à đủ?

John Hanley avatar
lá cờ cn
Để truy vấn một bảng, bạn cần có quyền **bigquery.tables.getData**. Vai trò **Người dùng BigQuery** có **bigquery.tables.list**. Hãy thử thay đổi vai trò thành **Trình xem dữ liệu BigQuery** (roles/bigquery.dataViewer). https://cloud.google.com/bigquery/docs/access-control#bigquery
bandwagoner avatar
lá cờ ng
@JohnHanley Điều này đã giải quyết được vấn đề, cảm ơn bạn rất nhiều! Chỉ cần thêm một điểm khác không có trong câu hỏi ban đầu của tôi, để ghi vào bất kỳ bảng nào, tôi cũng cần cấp cho tài khoản dịch vụ vai trò Trình chỉnh sửa dữ liệu BigQuery. Nếu bạn không ngại thêm nhận xét của mình làm giải pháp, tôi rất sẵn lòng chấp nhận nhận xét đó.
Điểm:0
lá cờ cn

Để truy vấn một bảng, bạn cần có quyền bigquery.tables.getData. Vai trò Người dùng BigQuery có bigquery.tables.list. Thay đổi vai trò thành Trình xem dữ liệu BigQuery (vai trò/bigquery.dataViewer).

BigQuery Các vai trò và quyền được xác định trước

Để sửa đổi/ghi bảng, bạn cần có quyền bigquery.tables.updateData. Quyền đó nằm trong các vai trò:

  • Quản trị viên BigQuery (vai trò/bigquery.admin)
  • Chủ sở hữu dữ liệu BigQuery (vai trò/bigquery.dataOwner)
  • Trình chỉnh sửa dữ liệu BigQuery (vai trò/bigquery.dataEditor) <- vai trò được đề xuất.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.