Хранилище данных аутентификации gcloud-java (обновление до v1beta3 в 0.1.7/0.2.0)
У меня было приложение Java GAE, работающее с использованием gcloud-java 0.1.4 в течение некоторого времени, и я хотел обновить его до gcloud-java 0.1.7/0.2.0, так как у нас есть несколько 404-х и т. Д. (Другая проблема). Мы используем gcloud при подключении к экземпляру хранилища данных в другом приложении GAE.
Но после обновления пакета наша аутентификация не проходит. Из того, что я прочитал в заметках о выпуске, нам пришлось повторно включить datasto re-api в приложении "host", так что мы сделали это, но безрезультатно. При повторном "понижении" приложение работает так, как задумано, но с некоторыми проблемами стабильности.
Существуют ли другие недокументированные исправления / методы, чтобы заставить его работать?
Мой код подключения / функция выглядит (обнажено):
fis = new FileInputStream(Constants.PATH_TO_JSON_KEY);
sac = AuthCredentials.createForJson(fis);
DatastoreOptions.Builder builder = DatastoreOptions.builder();
builder.projectId(Constants.DATASTORE_PROJECT_ID);
builder.authCredentials(sac);
DatastoreOptions options = builder.build();
return options.service();
РЕДАКТИРОВАТЬ:
Вот некоторые из следов стека, которые я получаю.
[INFO] apr 17, 2016 6:19:33 PM com.google.datastore.v1beta3.client.DatastoreFactory makeClient
[INFO] com.google.cloud.datastore.DatastoreException: Not authorized.
[INFO] at com.google.cloud.datastore.spi.DefaultDatastoreRpc.translate(DefaultDatastoreRpc.java:102)
[INFO] at com.google.cloud.datastore.spi.DefaultDatastoreRpc.runQuery(DefaultDatastoreRpc.java:157)
[INFO] at com.google.cloud.datastore.DatastoreImpl$1.call(DatastoreImpl.java:92)
[INFO] at com.google.cloud.datastore.DatastoreImpl$1.call(DatastoreImpl.java:89)
[INFO] at com.google.cloud.RetryHelper.doRetry(RetryHelper.java:181)
[INFO] at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:247)
[INFO] at com.google.cloud.RetryHelper.runWithRetries(RetryHelper.java:237)
[INFO] at com.google.cloud.datastore.DatastoreImpl.runQuery(DatastoreImpl.java:88)
[INFO] at com.google.cloud.datastore.QueryResultsImpl.sendRequest(QueryResultsImpl.java:73)
[INFO] at com.google.cloud.datastore.QueryResultsImpl.<init>(QueryResultsImpl.java:57)
[INFO] at com.google.cloud.datastore.DatastoreImpl.run(DatastoreImpl.java:82)
[INFO] at com.google.cloud.datastore.DatastoreImpl.run(DatastoreImpl.java:73)
.....
[INFO] Caused by: com.google.datastore.v1beta3.client.DatastoreException: Not authorized., code=PERMISSION_DENIED
[INFO] at com.google.datastore.v1beta3.client.RemoteRpc.makeException(RemoteRpc.java:126)
[INFO] at com.google.datastore.v1beta3.client.RemoteRpc.makeException(RemoteRpc.java:169)
[INFO] at com.google.datastore.v1beta3.client.RemoteRpc.call(RemoteRpc.java:89)
[INFO] at com.google.datastore.v1beta3.client.Datastore.runQuery(Datastore.java:108)
[INFO] at com.google.cloud.datastore.spi.DefaultDatastoreRpc.runQuery(DefaultDatastoreRpc.java:155)
[INFO] ... 56 more
2 ответа
Учетная запись службы, которую мы использовали, не была настроена с соответствующими разрешениями в целевом приложении. Поэтому нам пришлось (по совету Google) повторно добавить учетную запись службы в качестве средства просмотра здесь: https://console.cloud.google.com/permissions/projectpermissions
Я надеюсь, что это может помочь другим в будущем!
Спасибо за сообщение об этой проблеме. У меня есть пара дополнительных вопросов, чтобы мы могли разобраться в этом:
Идентификатор проекта, который вы установили (Constants.DATASTORE_PROJECT_ID
) содержат какие-либо префиксы с тильдой, возможно, "s~" или "e~"? Datastore v1beta3 больше не принимает эти префиксы; вместо этого вы должны предоставить все после тильды в качестве идентификатора вашего проекта. Например, если идентификатор вашего проекта s~my-project-id-123
, вы должны использовать только my-project-id-123
, Это может быть проблемой, если вы видите сообщение об ошибке, похожее на:
com.google.datastore.v1beta3.client.DatastoreFactory makeClient: Not using any credentials
com.google.cloud.datastore.DatastoreException: The project s~my-project-id-123 does not exist.
Если это не проблема, не возражаете ли вы предоставить трассировку стека и копию текста исключения (при необходимости удаляя конфиденциальную информацию). Спасибо!