2016-12-14 3 views
0

Я разработал и построил файл jar, обрабатывая чтение из двух таблиц BigQuery, а затем написал еще одну таблицу BigQuery. (Существует три проекта GCP, и каждый проект имеет собственную таблицу BigQuery.) Файл jar является результатом построения и упаковки Maven. Я использовал зависимость SDK потока данных.«Доступ запрещен» при попытке доступа к BigQuery на GCE

После того, как я построил файл jar, я протестировал его на своем Mac, и я проверил его работу. И затем я загрузил файл jar в GCE и снова протестировал его. Я думал, что это будет работать хорошо, но это происходит, некоторые ошибки вроде этого:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden { "код": 403, "ошибки": [{ «domain»: «global», «message»: «Access Denied: Dataset $ {PROJECT_ID}: $ {DATASET_ID}: пользователь $ {MY_ACCOUNT_ID} не имеет разрешения bigquery.tables.list для набора данных $ {PROJECT_ID} : $ {DataSet_ID} " "причина.":". AccessDenied .... }

Когда я создал GCE экземпляр, я установил учетную запись службы должным образом я уверен, что это `ы не о это.

Не понимаю, почему одна и та же банка работает по-другому, делает ошибку или нет?

Учетная запись при тестировании является членом или владельцем трех проектов. Перед тестированием, я использую эти команды на моем Mac и БКА:

  1. gcloud авт Войти
  2. gcloud конфигурационный набор проекта rgpkorea-datalake
  3. gcloud аутентификации приложений по умолчанию Войти

В Java проекта, я создал объект учетных данных и построил службу BigQuery с объектами учетных данных.

GoogleCredential credential = GoogleCredential.getApplicationDefault(HTTP_TRANSPORT, JSON_FACTORY); 
Bigquery bigquery = new Bigquery.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential) 
       .setApplicationName("BdtAndroidGaSessionMigrator" + CalendarUtil.getYesterdayAsDateFormat()).build(); 
List<Tables> tableList = bigquery.tables().list("${PROJECT_ID}", "${DATASET_ID}").setMaxResults(9999999L).execute().getTables(); 

Для обеспечения безопасности я заменил идентификатор проекта и идентификатор набора данных как выражение EL.

Как вы знаете, команда «gcloud init» поддерживается в Google-Cloud-SDK. Я также попробовал команду «gcloud init», но результат не изменился. В моей догадке, над командами работают по-разному, зависит от таких сред, как экземпляр GCP или локальная машина.

Как решить проблему «Отказано в доступе»? пожалуйста, помогите.

P.S. Простите моего бедного английского. Я сомневаюсь, что мой английский представляет то, что у меня есть для вас.

ответ

0

Я сам решаю эту проблему. Для тех, кто сталкивается с такими же проблемами, как я.

Для этого вы можете проверить разрешение, установленное для каждого проекта. Разрешение устанавливается на каждую учетную запись, даже если это учетная запись службы. Я имею в виду, что вы должны проверять учетные записи, как учетную запись GCP, так и учетную запись службы добавляется как член для каждого проекта. В моем случае я добавил учетную запись GCP, но не учетную запись службы.

Я надеюсь, что это поможет вам

Смежные вопросы