我正在尝试将包含 Firestore 数据库导出的存储桶导入到另一个 Firebase 项目中。我一直在遵循本指南了解如何执行此操作。
运行
gcloud firestore import
时,我遇到以下问题:
错误:(gcloud.firestore.import)PERMISSION_DENIED:服务帐户无权访问 Google Cloud Storage 文件:/bucket/EXPORT_PREFIX.overall_export_metadata。请参阅 https://cloud.google.com/datastore/docs/export-import-entities#permissions 了解所需权限的列表。错误详细信息:[电子邮件受保护] 没有 storage.buckets.get 访问 Google Cloud Storage 存储桶的权限。
但是,我确实使用以下命令来授予对存储桶的访问权限:
gsutil iam ch serviceAccount:[email protected]:admin gs://bucket_name
这并没有给我任何错误,所以我认为它按预期运行。我三次检查并相信我在使用这些命令时正在正确的项目中工作。
我认为
import
命令可能是使用 [email protected]:admin
之外的另一个服务帐户运行的,但我不确定这一点或如何确保使用正确的服务帐户。
任何有关解决此问题的帮助将不胜感激! :)
错误消息似乎包含有问题的服务帐户:
Error details:
[email protected]
does not have storage.buckets.get access to the Google Cloud Storage bucket.
我认为你需要:
gsutil iam ch \
serviceAccount:[service-XXX]@gcp-sa-firestore.iam.gserviceaccount.com:objectViewer \
gs://[bucket-name]
替换
[service-XXX]
和 [bucket-name]
您可以按照指南操作,但使用服务帐户“service-[PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com”而不是“[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com”。
例如:
gsutil iam ch serviceAccount:service-[PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com:legacyBucketReader,legacyObjectReader \
gs://[SOURCE_BUCKET]
gcloud config set project [DESTINATION_PROJECT_ID]
gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async