【发布时间】:2020-09-07 04:13:42
【问题描述】:
我正在寻找一种以编程方式列出组织内部的 Google Cloud 项目的方法。我正在尝试使用服务帐户导出的 json 凭据以这种方式实现这样的目的:
// More info on the endpoint here:
// https://cloud.google.com/resource-manager/reference/rest/v1/projects/list
final CloudResourceManager cloudResourceManagerService = createCloudResourceManagerService();
final CloudResourceManager.Projects.List listRequest = cloudResourceManagerService
.projects()
.list()
.setFilter("labels.it-restoring:false name:IT-TEST-*");
final ListProjectsResponse listResponse = listRequest.execute();
if (listResponse.isEmpty()) {
throw new RuntimeException("The API did not get any response"); // I never get past here
}
log.info("Listing projects returned: {}", listResponse);
我发现的问题是我总是得到一个空的响应。即使我为服务帐户分配了所有者的角色。根据文档,我可以使用我也设置但没有运气的roles/
resourcemanager.organizationAdmin。我使用getApplicationDefault 创建了 CloudResourceManagement api 对象。
但是,如果我执行gcloud beta auth application-default login 会触发浏览器中的身份验证流程并与作为组织所有者的用户进行身份验证,这将起作用并列出我拥有的所有项目。
谁能向我解释我应该怎么做才能存储一个可以模仿用户所有者的适当凭据?我已经将服务帐户设置为 Owner 角色,理论上可以访问所有资源,但仍然没有运气。
【问题讨论】:
-
APIs Explorer 是一个很好的调试工具。在这种情况下,您也需要成为所有者才能使用您的凭据,但是……这是证明底层 API 的好方法。或者,您可以使用
gcloud projects list ---log-http。如果可以的话,第一步是尝试使用该过滤器的 APIs Explorer 以确认您确实获得了结果 -
当您在本地运行代码并希望使用服务帐户时,您需要设置
GOOGLE_APPLICATION_CREDENTIALS=/path/to/jwt.json
标签: java google-cloud-platform gcloud google-cloud-resource-manager