我正在使用Google Java SDK访问Google Cloud 端存储 . 我为我的一个项目创建了一个服务帐户并下载了JSON密钥文件 . 我决定手动加载JSON密钥,如图所示here或依赖于环境变量:
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(jsonPath))
.createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();
另外,我有多个用户和每个用户多个项目:
User1 | User2
-----------------------------------------------------
Project A | Project X
Project B | Project Y
Project C |
当我创建运行我的代码时,它尝试使用项目A的服务帐户密钥,它尝试访问项目X.在gcloud util中,Project X是我的活动项目 gcloud config list
. 在我设置活动项目的环境变量中,我无法看到任何地方 . 我能让这个工作的唯一方法是在gcloud中切换我的活动项目 gcloud config configurations activate [Project A Name]
1)Java SDK中是否有一种方法可以通过编程方式覆盖gcloud util在某处神奇设置的当前项目?
2)如果不是从JSON密钥文件中列出的内容中拉出当前项目的代码在哪里? SDK使用什么顺序来确定要使用的项目?
2 回答
问答1的答案可以在这个答案中看到:https://stackoverflow.com/a/44122119/311525
可以使用setProjectId(PROJECT_ID)覆盖项目
为了得到两个答案,我指的是Scott的answer:
问题2的答案是代码将从JSON文件中提取项目,但您必须将gcloud中的项目设置为生成服务帐户的项目 . 在此示例中,如果要访问项目A,则需要将gcloud设置为项目A.