Перенос данных Firestore между проектами Firebase - PullRequest
0 голосов
/ 06 января 2019

Я пытаюсь перенести данные из нашего проекта firebase dev в наш тестовый проект firebase, используя gcloud cli. Для выполнения этой задачи я создал следующий скрипт.

#!/bin/bash

SRC_PROJECT=$1
SRC_ACCOUNT="importexport@$SRC_PROJECT.iam.gserviceaccount.com"
SRC_CREDENTIALS=/home/$SRC_PROJECT.json

DEST_PROJECT=$2
DEST_ACCOUNT="importexport@$DEST_PROJECT.iam.gserviceaccount.com"
DEST_CREDENTIALS=/home/$DEST_PROJECT.json

GCLOUD_STORAGE=$3

echo "-------------------------------------------"
echo " Activate Service Account $SRC_PROJECT"
echo "-------------------------------------------"
gcloud --quiet config set project ${SRC_PROJECT}
gcloud beta auth activate-service-account ${SRC_ACCOUNT} --key-file=${SRC_CREDENTIALS} 


echo "-------------------------------------------"
echo " Exporting $SRC_PROJECT"
echo "-------------------------------------------"
gcloud beta firestore export $GCLOUD_STORAGE > ./meta.txt

echo "-------------------------------------------"
echo " Activate Service Account $DEST_PROJECT"
echo "-------------------------------------------"
gcloud --quiet config set project ${DEST_PROJECT}
gcloud beta auth activate-service-account ${DEST_ACCOUNT} --key-file=${DEST_CREDENTIALS} 

echo "-------------------------------------------"
echo "Importing $DEST_PROJECT $(grep -o 'gs://.*$' ./meta.txt)"
echo "-------------------------------------------"
gcloud beta firestore import $(grep -o 'gs://.*$' ./meta.txt)

В этом сценарии предполагается, что у вас есть файлы учетных данных, расположенные в /home, которые соответствуют соглашению об именах <project_id>.json. Далее предполагается, что учетная запись службы была создана как для исходного проекта, так и для проекта dest, который следует соглашению об именах importexport@<project_id>.iam.gserviceaccount.com.

Запуск сценария так же прост, как выполнение следующего ...

%> ./migrate.sh dev-project-id test-project-id google-storage

Я гарантировал, что учетные записи служб имеют разрешения для одного и того же GCLOUD_STORAGE. И все же я все еще получаю следующую ошибку:

ОШИБКА: (gcloud.beta.firestore.import) PERMISSION_DENIED: вызывающая сторона не имеет разрешения

Кто-нибудь еще пытался сделать что-то подобное? Есть идеи, почему у меня все еще есть разрешение?

Вот разрешения, которые я назначил обеим учетным записям, и обе учетные записи добавляются в качестве элементов в хранилище друг друга.

  • Cloud Datastore Импорт Экспорт Администратор
  • Владелец облачного хранилища данных
  • Редактор облачных хранилищ файлов
  • Администратор Firebase
  • Владелец
  • Администратор хранилища

1 Ответ

0 голосов
/ 03 февраля 2019

Когда я первоначально разместил этот вопрос, я создал специальную учетную запись службы, специально предназначенную для доступа ко всем средам, связанным с передачей. Это означало, что я должен был убедиться, что одна учетная запись службы имела необходимые разрешения как для проектов Firebase, так и для хранилища, в котором хранились файлы (в моем случае это было технически в третьем проекте).

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

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

Я не знаю, почему это сработало, но именно это позволило мне двигаться вперед. Я надеюсь, что это работает и для вас.

Обновление В настоящее время новая документация на веб-сайте Firebase показывает, как настроить правильные разрешения для доступа пользователя к обеим средам ... НО там в настоящее время невозможно определить учетную запись службы , которая охватывает обе среды. Учетные записи служб не могут быть определены на уровне компании ... только на уровне проекта. Вот почему я видел сбои при попытке определить одну учетную запись службы с доступом к двум проектам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...