Учетная запись службы GCP - доступ запрещен для сценария NodeJS - PullRequest
1 голос
/ 18 февраля 2020

Здравствуйте, я в отчаянии.

Я пытаюсь импортировать данные в Google BigQuery, используя Cron и NodeJS скрипт. Но я получаю сообщение об отказе в доступе:

Access Denied: Dataset arcane-pillar-XXX:MyProj: User does not have bigquery.datasets.get permission for dataset arcane-pillar-XXX:MyProj
  1. Я создал служебную учетную запись bq-data-import-user@arcane-pillar-XXX.iam.gserviceaccount.com
  2. Я создал ключ, скачал его как JSON файл и установите переменную среды
  3. Когда я запускаю сценарий NodeJS на локальном компьютере, я получаю сообщение об ошибке.
  4. Я проверил учетную запись с помощью Policy Troubleshooter. Устранитель неполадок говорит, что разрешение предоставлено.

Я много раз пытался восстановить учетную запись, но ничего не помогло. Я проверил, что нет несоответствия проекта, потому что ошибка изменяется, когда я удаляю набор данных.

Любые советы?

enter image description here enter image description here enter image description here enter image description here

#!/usr/bin/env node
"use strict";

const {BigQuery} = require('@google-cloud/bigquery');

process.env["GOOGLE_APPLICATION_CREDENTIALS"] = "/etc/my-app/google-application-credentials.json";


const bq = new BigQuery();
const bqDataset = (await bq.dataset("TheDataset").get({ autoCreate: true }))[0]; // THIS LINE THROWS THE ERROR
const bqTable = (await bqDataset.table("TheTable").get({ autoCreate: true, schema: [ /* The BQ schema */ ] }))[0];

for await (const row of rows) { // Rows is a async generator (cursor in MySQL)
    await bqTable.insert(row);
}

1 Ответ

1 голос
/ 18 февраля 2020

Это наша публикация c Статья показывает рекомендуемый способ аутентификации в облачном API.

На основе нашего опубликованного c документа , создайте учетные данные в вашем приложении из файла учетной записи службы. Затем используйте учетные данные для создания объекта службы с клиентскими библиотеками BigQuery.

// Create a BigQuery client explicitly using service account credentials.
// by specifying the private key file.

const {BigQuery} = require('@google-cloud/bigquery');

const options = {
  keyFilename: 'path/to/service_account.json',
  projectId: 'my_project',
};

const bigquery = new BigQuery(options);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...