Как создать BigQuery Data Transfer с сервисным аккаунтом Python +? - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь создать новое задание передачи данных в BigQuery, используя Python и google-cloud-bigquery-datatransfer , но у меня возникает ошибка:

google.api_core.exceptions.PermissionDenied: 403 У пользователя недостаточно прав: bigquery.transfers.update требуется для проекта PROJECT_ID

Я добавил свой код ниже, который не ужасно интересно. Я использую это при установке GOOGLE_APPLICATION_CREDENTIALS=/path/to/secrets/service-account.json. У этой учетной записи службы есть статус Владелец , потому что я думал, что повышение ее привилегий может помочь мне преодолеть ошибку разрешений.

Теперь я начинаю думать, что этот API вообще не работает с сервисный аккаунт, или я с ума сошел? Я вижу authorization_code и CheckValidAuth в документации, но там указано, что они необязательны.

Работает ли API передачи данных Google BigQuery со служебными аккаунтами?


import os
import boto3
from google.cloud import bigquery_datatransfer_v1
import google.protobuf.json_format

client = bigquery_datatransfer_v1.DataTransferServiceClient()

parent = client.project_path('PROJECT_ID')

transfer_config = {
    "destination_dataset_id": "neilo",
    "display_name": "NeilO Data Transfer Test",
    "data_source_id": "amazon_s3",
    "params": {
        "destination_table_name_template": "test_table",
        "data_path": "s3://bucket/path/to/files/*.csv.gz",
        "access_key_id": os.environ['AWS_ACCESS_KEY_ID'],
        "secret_access_key": os.environ['AWS_SECRET_ACCESS_KEY'],
        "file_format": "CSV"
    },
    "schedule": "daily"
}

transfer_config = google.protobuf.json_format.ParseDict(
    transfer_config, bigquery_datatransfer_v1.types.TransferConfig())

response = client.create_transfer_config(parent, transfer_config)

Проблема

1 Ответ

1 голос
/ 28 мая 2020

Проблема заключалась в том, что я неправильно набрал GOOGLE_APPLICATION_CREDENTIALS при установке, поэтому я случайно использовал неправильную учетную запись службы. Я добавил следующий код для проверки правильности проекта:

from google.cloud import bigquery
assert bigquery.Client().project == 'PROJECT_ID'

Я также убедился, что учетная запись службы имеет разрешение bigquery.transfers.update с использованием минимальной встроенной роли из Редактор :

built-in Roles supporting bigquery.transfers.update permission

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...