google-cloud-firestore - 被取代的 Cloud Datastore 上的“DatastoreException:缺少或不足的权限”
问题描述
我们有一个基于 AppEngine SDK(现已弃用)和被取代的 Cloud Datastore 的旧应用程序。在迁移到 Google Cloud SDK 的过程中,我们还决定从 JPA/Datanucleus 迁移到 Objectify。
鉴于 Cloud Datastore 将在未来某个时候以 Datastore 模式自动升级到 Cloud Firestore,我们决定按照本页底部所述测试我们的应用程序: https ://cloud.google.com/datastore/docs/upgrade -to-firestore#testing_an_existing_application
1) 创建一个新项目。在此项目中,在 Datastore 模式数据库中创建 Cloud Firestore。
2) 使用托管导出服务,将应用程序的部分数据导出到 Cloud Storage。
3) 使用托管导入服务,将应用程序的数据导入新项目。
4) 将您要测试的应用程序逻辑复制到新项目或针对新项目模拟应用程序行为。
这就是我们所做的,在出现一些问题后,我们可以使我们的应用程序的一部分在单独的测试项目中使用新的数据存储运行良好。
现在到实际问题...
我们想测试更新后的应用程序是否也可以与被取代的 Cloud Datastore 一起运行,因此我们不必担心自动升级发生时(因为我们的应用程序已经准备好)。因此,我们将其部署为现有 AppEngine 项目的新版本(v2-dot-.....):不幸的是,一旦应用尝试读取数据存储区,运行新版本就会引发权限错误:
com.google.cloud.datastore.DatastoreException: Missing or insufficient permissions
所以问题是: - 这是否与我们项目的 Cloud Datastore 尚未在 Datastore 模式下升级到 Cloud Firestore 有关?- 我们可以做些什么(可能添加特定权限)让它正常工作吗?
我们担心的是,我们需要在 2020 年 7 月之前部署新版本的应用程序(届时旧的 AppEngine SDK 将停止工作),我们担心数据存储区的自动升级会在以后发生。
谢谢您的帮助。
解决方案
原来我们的项目在 IAM中没有PROJECT_ID@appspot.gserviceaccount.com成员。
它有很多其他成员(例如:PROJECT_NUMBER-compute@developer.gserviceaccount.com、PROJECT_NUMBER@cloudservices.gserviceaccount.com、service-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com等),我猜它们是遗留的以前版本的 Google App Engine 中使用的成员。
添加PROJECT_ID@appspot.gserviceaccount.com和角色Editor解决了这个问题:现在新版本可以部署到旧项目中,即使数据存储尚未在数据存储模式下转换为 Cloud Firestore,它也可以正常工作。
推荐阅读
- java - 后 javax.validation 修改
- python - Rioxarray.merge.merge_datasets 无法合并 xarray 数据集
- c# - 是否有从 C# 源代码生成 SyntaxFactory-Statements 的工具,用于在源生成器中生成代码
- visual-studio-code - VSCode - 如何使用自定义键绑定从快速修复弹出窗口中循环浏览项目?
- javascript - 是否有从 map() 箭头函数中删除第一个参数的语法?
- reactjs - 无法运行 ASP.net Boilerplate 的 ReactJs 项目
- typescript - 使用 Bazel + Typescript + Jest 测试覆盖率报告
- atom-editor - Atom 编辑器 UI 在文本元素周围显示波纹效果
- android - 如何解决此文件中的“(Id:user.uid)”错误?
- c# - C#从文本框vscode获取文本