0

我正在寻找一种以编程方式列出组织内的 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我也设置但没有运气的。我使用创建 CloudResourceManagement api 对象getApplicationDefault

但是,如果我这样做gcloud beta auth application-default login会触发浏览器中的身份验证流程并与作为组织所有者的用户进行身份验证,这将起作用并列出我拥有的所有项目。

任何人都可以向我解释我应该怎么做才能存储一个可以模仿他的用户所有者的适当凭证?我已经将服务帐户设置为 Owner 角色,理论上它实际上可以访问所有资源,但仍然没有运气。

4

2 回答 2

0

另一种解决方案是cloudasset.assets.searchAllResources使用以下角色之一在组织级别授予帐户权限:

  • 角色/cloudasset.viewer
  • 角色/cloudasset.owner
  • 角色/观众
  • 角色/编辑
  • 角色/所有者

使用此权限,您可以列出组织内的所有项目 456:

gcloud asset search-all-resources \
--asset-types="cloudresourcemanager.googleapis.com/Project"
--scope=organizations/456

文档:https ://cloud.google.com/asset-inventory/docs/searching-resources

相关文章:如何在 Google Cloud Platform 中跨服务 (API) 和项目查找、列出或搜索资源?

于 2020-06-26T22:46:57.780 回答
0

为了列出您组织中的项目,您需要权限resourcemanager.projects.get。请在此链接中找到更多信息服务帐户可能具有1 个项目的所有者角色,并且不足以将它们全部列出。

于 2020-05-21T08:30:32.613 回答