функция Google: доступ к базе данных firestore другого проекта

#javascript #google-cloud-firestore #google-cloud-functions #firebase-admin

#javascript #google-cloud-firestore #google-cloud-функции #firebase-администратор

Вопрос:

Я хотел бы, чтобы облачный проект Google A (project-a-id) получал доступ к данным firestore другого облачного проекта Google B (project-b-id). Для того же проекта я добавил учетную запись службы по умолчанию, а именно. project-a-id@appspot.gserviceaccount.com в IAM проекта B и установите роль на Cloud Filestore Editor .

В облачной функции project A я пытаюсь получить доступ как к (собственному) firestore project A, так и к firestore project B, но он продолжает показывать project базу данных по умолчанию для обоих приложений. Код является:

 var primaryAppConfig = {
  databaseURL: 'https://project-a-id.firebaseio.com'
};
var primaryApp = admin.initializeApp(primaryAppConfig, 'primary');
var primarydb = admin.firestore(primaryApp);

var secondaryAppConfig = {
  databaseURL: 'https://project-b-id.firebaseio.com'
};
var secondaryApp = admin.initializeApp(secondaryAppConfig, 'secondary');
var secondarydb = admin.firestore(secondaryApp);

  

У меня создалось впечатление, что если учетной записи службы project-a по умолчанию предоставлены права в project-b, она должна автоматически получить права. По крайней мере, я нашел это применимым, когда я получаю доступ к корзинам облачных хранилищ Google таким образом.

Нужно ли сделать что-то еще? Спасибо

Комментарии:

1. «но он продолжает показывать project базу данных по умолчанию для обоих приложений» . Я не знаю, что это значит. Что конкретно вы здесь наблюдаете? У вас есть код, который воспроизводит поведение, которое вы не понимаете?

2. Попробуйте установить projectId параметр в настройках приложения (особенно в secondaryAppConfig ).

3. @DougStevenson: что я имел в виду, показывая ту же базу данных , так это то, что если я консольно регистрирую primarydb и secondarydb, результирующий объект отображается project-id как один и тот же, а именно project-a-id

4. Спасибо @HiranyaJayathilaka: когда я добавляю projectId:project-b-id во secondaryAppConfig, я получаю ошибку разрешения. Я должен упомянуть, что если я загружаю закрытый ключ учетной записи службы по умолчанию из настроек project-b с консоли firebase, он работает, передавая его в качестве учетных данных во secondaryAppConfig. Но не могу понять, почему, когда я устанавливаю учетную запись службы project-a по умолчанию в IAM project-b, это не работает.

5. Это ошибка: Error: 7 PERMISSION_DENIED: Missing or insufficient permissions.

Ответ №1:

У меня есть firestore, созданный в облаке, в отличие от базы данных реального времени в project-a. Однако я столкнулся с той же проблемой, когда попытался получить к ней доступ из project-b.
Удалось решить проблему, создав учетную запись службы с доступом к project-a firestore, загрузив учетные данные и получив к ним доступ из project-b с помощью следующего:

 credential_path = "pathTo/xxxxx.json"
db = firestore.Client.from_service_account_json(credential_path)
  

Ответ №2:

Вам необходимо создавать приложения в рамках текущего проекта firebase.

Консоль Firebase -> Настройки проекта -> Общие -> Добавить приложение

Эти приложения будут иметь доступ к одному и тому же firestore, но будут развернуты отдельно в разных поддоменах (под firebaseapp.com ).

Комментарии:

1. Вопрос OP касается другого проекта, а не приложения, поэтому это не так сильно поможет.