从Java以数据存储模式连接到云Firestore
我正在以数据存储模式将运行在App Engine上的Java微服务从数据存储迁移到云Firestore,并且在连接到新数据库时遇到问题。我发现文档令人困惑,但我是在以下基础上工作的(引自) 设置数据库权限 默认情况下,你的应用程序拥有读取和写入谷歌云项目中的数据存储模式和Firestore数据库所需的所有权限 为了管理这些权限,每个应用程序引擎应用程序都使用一个默认服务帐户,该帐户提供对应用程序所在项目中的数据存储模式和Firestore数据库的完全读写访问权限。您可以更改默认服务帐户的权限,但除非您为IAM角色分配所需权限,否则您的应用可能会失去访问权限 我在IAM中找到了默认服务帐户并生成了密钥,并使用以下代码初始化FirebaseApp从Java以数据存储模式连接到云Firestore,java,google-cloud-platform,google-cloud-firestore,Java,Google Cloud Platform,Google Cloud Firestore,我正在以数据存储模式将运行在App Engine上的Java微服务从数据存储迁移到云Firestore,并且在连接到新数据库时遇到问题。我发现文档令人困惑,但我是在以下基础上工作的(引自) 设置数据库权限 默认情况下,你的应用程序拥有读取和写入谷歌云项目中的数据存储模式和Firestore数据库所需的所有权限 为了管理这些权限,每个应用程序引擎应用程序都使用一个默认服务帐户,该帐户提供对应用程序所在项目中的数据存储模式和Firestore数据库的完全读写访问权限。您可以更改默认服务帐户的权限,但
InputStream serviceAccount = this.getClass().getResourceAsStream("/toolbox-firebase-adminsdk-jbx2a-31651a7510.json");
try {
FirebaseOptions options = new FirebaseOptions.Builder()
.setCredentials(GoogleCredentials.fromStream(serviceAccount))
.setDatabaseUrl("https://toolbox.firebaseio.com")
.build();
FirebaseApp.initializeApp(options);
} catch (IOException e) {
throw new RuntimeException(e);
}
这段代码似乎执行正确,但当我尝试访问数据库时,我得到了以下错误权限
> INFO] GCLOUD: com.google.cloud.datastore.DatastoreException: Missing
> or insufficient permissions. [INFO] GCLOUD: at
> com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.translate(HttpDatastoreRpc.java:128)
> [INFO] GCLOUD: at
> com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.translate(HttpDatastoreRpc.java:113)
> [INFO] GCLOUD: at
> com.google.cloud.datastore.spi.v1.HttpDatastoreRpc.lookup(HttpDatastoreRpc.java:163)
> [INFO] GCLOUD: at
> com.google.cloud.datastore.DatastoreImpl$3.call(DatastoreImpl.java:392)
> [INFO] GCLOUD: at
> com.google.cloud.datastore.DatastoreImpl$3.call(DatastoreImpl.java:389)
> [INFO] GCLOUD: at
> com.google.api.gax.retrying.DirectRetryingExecutor.submit(DirectRetryingExecutor.java:105)
> [INFO] GCLOUD: at
> com.google.cloud.RetryHelper.run(RetryHelper.java:76) [INFO
我正在使用的服务帐户具有以下权限
- 云数据存储所有者
- 云数据存储用户
- 编辑
非常感谢您提供的任何帮助。默认的App Engine标准服务帐户为:
gcloud iam service-accounts list | grep appspot.gserviceaccount.com
App Engine default service account your-project@appspot.gserviceaccount.com
此服务帐户已具有编辑器角色,并且您的应用程序具有读取和写入Google Cloud项目中的数据存储模式和Firestore数据库所需的所有权限。
因此,您不需要创建key.json文件,并从该文件初始化凭据
为了
如果应用程序在App Engine标准环境下运行,则可以
使用应用程序引擎应用程序标识API获取凭据
设置服务帐户后,ADC可以隐式查找您的帐户
无需更改代码的凭据,如中所述
上面的部分。如果您想专门使用应用程序引擎凭据,
您可以显式地这样做,如下面的代码示例所示
编辑
如果您的代码在Firebase应用程序上运行,而不是应用程序引擎标准版,我认为您不应该使用默认的应用程序引擎服务帐户。您应该使用Editor
角色创建一个新的服务帐户,并生成key.json文件