在被取代的云数据存储上"DatastoreException: Missing or insufficient permissions"



我们有一个基于 AppEngine SDK(现已弃用(和被取代的云数据存储的旧应用程序。 在迁移到Google Cloud SDK的过程中,我们还决定从JPA/Datanucleus迁移到Objectify。

鉴于云数据存储将在将来的某个时候以数据存储模式自动升级到云 Firestore,我们决定按照本页底部所述测试我们的应用程序: https://cloud.google.com/datastore/docs/upgrade-to-firestore#testing_an_existing_application

1( 创建一个新项目。在此项目中,在数据存储模式下创建云还原数据库。

2( 使用托管导出服务,将应用程序的某些数据导出到云存储。

3( 使用托管导入服务,将应用程序的数据导入新项目。

4( 将要测试的应用逻辑复制到新项目,或针对新项目模拟应用行为。

这就是我们所做的,在一些问题之后,我们可以在单独的测试项目中使用新数据存储使应用程序的一部分正常运行。

现在到实际问题...

我们想测试更新后的应用程序是否也可以与被取代的云数据存储一起运行,这样我们就不必担心何时进行自动升级(因为我们的应用程序已经准备就绪(。 因此,我们将其部署为现有 AppEngine 项目 (v2-dot-.....( 的新版本:不幸的是,一旦应用程序尝试读取数据存储,运行新版本就会引发权限错误:

com.google.cloud.datastore.DatastoreException: Missing or insufficient permissions

所以问题是: - 这是否与我们项目的云数据存储尚未在数据存储模式下升级到云还原有关? - 我们能做些什么(也许添加特定权限(来使其工作吗?

我们担心的是,我们需要在 2020 年 7 月之前部署新版本的应用程序(届时较旧的 AppEngine SDK 将停止工作(,并且我们担心数据存储的自动升级将在稍后发生。

谢谢你的帮助。

事实证明,我们的项目在 IAM 中没有PROJECT_ID@appspot.gserviceaccount.com成员。

它有很多其他成员(例如:PROJECT_NUMBER-compute@developer.gserviceaccount.comPROJECT_NUMBER@cloudservices.gserviceaccount.comservice-PROJECT_NUMBER@compute-system.iam.gserviceaccount.com等(,我猜这些成员是以前版本的 Google App Engine 中使用的旧成员。

使用角色编辑器添加PROJECT_ID@appspot.gserviceaccount.com修复了此问题:现在可以将新版本部署到旧项目中,即使数据存储尚未在数据存储模式下转换为云还原,它也能正常工作。

我刚刚遇到了这个问题,并花了太多时间对其进行故障排除。如果您遇到此问题,十分之九是因为默认 App Engine 服务帐号无权编辑云数据存储。如果您正在执行简单的gcloud app deploy并且没有其他花哨的内容,则默认使用默认的 App Engine 服务帐户。我通过为默认 App Engine 服务帐号提供roles/datastore.owner角色解决了该问题,如下所示:

gcloud projects add-iam-policy-binding PROJECT_ID 
--member="serviceAccount:PROJECT_ID@appspot.gserviceaccount.com" 
--role="roles/datastore.owner"

相关内容

  • 没有找到相关文章

最新更新