Учетная запись службы администратора Google Cloud BigQuery получает сообщение «нет разрешения bigquery.jobs.create» - PullRequest
0 голосов
/ 27 марта 2019

Я новичок в Google Cloud и BigQuery. Я просмотрел дюжину других вопросов, которые, похоже, связаны между собой, и не увидел, что мне не хватает в этих ответах. Я пытаюсь запросить общедоступный набор данных.

Ошибка:

Caused by: com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Access Denied: Project airy-advantage-235802: The user kafka-learning@airy-advantage-235802.iam.gserviceaccount.com does not have bigquery.jobs.create permission in project airy-advantage-235802.",
    "reason" : "accessDenied"
  } ],
  "message" : "Access Denied: Project airy-advantage-235802: The user kafka-learning@airy-advantage-235802.iam.gserviceaccount.com does not have bigquery.jobs.create permission in project airy-advantage-235802."
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:150)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:401)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1132)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:499)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:432)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:549)
    at com.google.cloud.bigquery.spi.v2.HttpBigQueryRpc.create(HttpBigQueryRpc.java:183)

Что я сделал:

  1. Создан новый аккаунт Google Cloud
  2. Создан новый проект, которому Google присвоил идентификатор проекта airy -advantage-235802, название проекта - Kafka Learning.
  3. Создан сервисный аккаунт kafka-learning@airy-advantage-235802.iam.gserviceaccount.com
  4. Предоставил этому пользователю роль администратора BigQuery в проекте (я изначально пробовал BigQuery User и BigQuery Data Viewer)
  5. Я сохранил файл учетных данных JSON в локальной папке
  6. Я установил в переменной среды GOOGLE_APPLICATION_CREDENTIALS путь к файлу JSON
  7. У меня есть крошечный Java-проект для запроса общедоступного набора данных
  8. Полученная выше ошибка
  9. Проверенный биллинг включен (насколько я могу судить, см. Ниже)

Есть ли шаг, который я пропустил?

Google Cloud Project setup

Service Account Setup

enter image description here

var bigquery = BigQueryOptions.getDefaultInstance().getService();
var query = "SELECT * FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20160801` LIMIT 10";
var queryConfig = QueryJobConfiguration.newBuilder(query).build();
var table = bigquery.query(queryConfig);

Я также попытался явно установить идентификатор проекта (который также находится в файле json), изменив конструктор на это:

var bigquery = BigQueryOptions.newBuilder().setProjectId("airy-advantage-235802").build().getService();

Ответы [ 2 ]

1 голос
/ 27 марта 2019

Обычно это происходит, когда вы удаляете и создаете учетную запись службы с тем же именем, что и у «новой» учетной записи службы могут быть привязаны старые роли. Таким образом, вы могли бы:

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

Для получения дополнительной информации вы можете проверить эту ссылку

Надеюсь, это поможет.

0 голосов
/ 17 мая 2019

У меня тоже есть эта проблема. Читая документы, вы решите это.

Можно удалить учетную запись службы, а затем создать новую учетную запись службы с тем же именем. Повторное использование имени удаленной учетной записи службы может привести к непредвиденному поведению.

При удалении учетной записи службы привязки ее ролей не удаляются сразу. Если вы создаете новую учетную запись службы с тем же именем, что и недавно удаленная служебная учетная запись, старые привязки могут все еще существовать; однако они не будут применяться к новой учетной записи службы, даже если обе учетные записи имеют один и тот же адрес электронной почты. Это происходит потому, что учетные записи служб получают уникальный идентификатор в облачном IAM при создании. Внутри все привязки ролей предоставляются с использованием этих идентификаторов, а не адреса электронной почты учетной записи службы. Поэтому любые привязки ролей, которые существовали для удаленной учетной записи службы, не применяются к новой учетной записи службы, которая использует тот же адрес электронной почты.

Чтобы избежать путаницы, мы предлагаем использовать уникальные имена учетных записей служб. Если это невозможно, вы можете назначить роль новой учетной записи службы:

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

...