Firestore PERMISSION_DENIED в Google Cloud Compute - PullRequest
       14

Firestore PERMISSION_DENIED в Google Cloud Compute

0 голосов
/ 24 сентября 2018

У меня есть приложение Java, использующее firebase-admin, которое я пытаюсь заставить наблюдать за коллекцией в Firestore и действовать после ее модификации.

У меня есть следующий код:

final GoogleCredentials credentials = GoogleCredentials
            .getApplicationDefault();

final FirebaseOptions options = new FirebaseOptions.Builder()
            .setCredentials(credentials).setProjectId("XXX")
            .build();

FirebaseApp.initializeApp(options);

Firestore db = FirestoreClient.getFirestore();

где "XXX" - это идентификатор моего проекта с тройной проверкой.

Чуть позже есть следующее:

final ApiFuture<QuerySnapshot> future = db.collection("YYY").get();
final List<QueryDocumentSnapshot> documents = future.get().getDocuments();

, где "YYY" - это имя коллекции (Я попытался запустить его как для пустой, так и для непустой коллекции).

После создания приложения я загружаю его в экземпляр Google Compute Engine.Когда я запускаю его, последняя строка вызывает следующую ошибку:

java.util.concurrent.ExecutionException: com.google.api.gax.rpc.PermissionDeniedException: io.grpc.StatusRuntimeException: PERMISSION_DENIED: Request had insufficient authentication scopes.
        at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:500)
        at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:479)
        at com.google.api.core.AbstractApiFuture.get(AbstractApiFuture.java:56)
        at com.dammitchat.App.main(App.java:55)

Я запустил следующее на виртуальной машине:

~$ gcloud auth list
                  Credentialed Accounts
ACTIVE  ACCOUNT
*       XXXXXXXXXXXX-compute@developer.gserviceaccount.com

Я проверил IAM, и у этой учетной записи службы есть «Редактор».«Роль (на всякий случай, я также попытался добавить« Владелец хранилища облачных данных »), поэтому я мог бы предположить, что он может обойти любые правила, которые я установил для своей коллекции.На самом деле существует правило для этой коллекции, которое гласит:

match /YYY/{y} {

    allow read: if false;
}

, но даже когда я изменил его на true, результат был таким же.

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

Что я делаю не так?

1 Ответ

0 голосов
/ 24 сентября 2018

читает:

В запросе недостаточно областей проверки подлинности.

для RPC одной этих областей oAuth2 необходимо запросить:

объяснение аутентификации учетной записи службы здесь (вот что означает сообщение об ошибкеподсказки для).

для правил безопасности (которые не являются причиной этого сообщения об ошибке), см. здесь .

также см. Cloud Firestore API и Java пример .

...