迁移火力地堡项目之间数据的FireStore

问题描述 投票:4回答:1

我试图将数据从我们的火力点开发项目迁移到我们使用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的命名convension证书文件。它进一步假定服务帐户已经为接下来importexport@<project_id>.iam.gserviceaccount.com的命名约定双方源项目和dest项目创建。

运行脚本是执行以下简单...

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

我已经确保了服务帐户都具有相同的GCLOUD_STORAGE权限。然而我仍然得到以下错误:

错误:(gcloud.beta.firestore.import)PERMISSION_DENIED:来电者没有权限

有任何人试图完成类似的东西吗?任何想法,为什么我仍然有一个权限问题?

以下是我已经分配到两个帐户和这两个帐户添加为每个人存储成员的权限。

  • 云存储进出口管理
  • 云存储用户
  • 云文件存储编辑器
  • 火力地堡管理员
  • 所有者
  • 存储管理员
firebase google-cloud-firestore google-cloud-storage data-migration
1个回答
1
投票

当我最初发布这个问题,我创建了专为访问所有参与转让环境的专用服务帐户。这样做意味着我必须确保一个服务帐户有两个火力地堡项目以及存储桶,将文件保存(在我的情况,这是技术上的第三个项目)正确的权限。

我从来没有能够得到这无论我怎么密切分配权限匹配原始项目账户的工作。

该问题的解决方案是采取创建“拥有”的项目之一默认服务的一个帐户,并为其分配所需的权限的其他环境。这种方法工作,在那里一个通用的服务帐户失败。

我不知道为什么会工作,但它是什么使我能够继续前进。我希望它为你工作为好。

更新现在有new documentation的火力地堡的网站,显示了用户正确的权限如何设置才能够有机会获得这两种环境的...但目前没有办法确定跨两种环境服务帐户。服务帐户不能在公司层面上......只有项目级别定义。这就是为什么我看到的失败尝试定义访问一个服务帐户两个项目。

© www.soinside.com 2019 - 2024. All rights reserved.