我正在寻找一种方法来程序化地列出组织中的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接口对象。
但是,如果我执行gcloud beta auth application-default login,这将在浏览器中触发一个身份验证流,并向组织的所有者用户进行身份验证,这将工作并列出我拥有的所有项目。
有人能向我解释一下,我应该怎么做才能存储一个合适的凭据来模仿用户所有者?我已经用所有者角色设置了服务帐户,理论上它实际上提供了对所有资源的访问权限,但仍然没有成功。
发布于 2020-05-21 16:30:33
要列出组织中的项目,您需要权限resourcemanager.projects.get。请在此link中查找更多信息服务帐户可能具有1项目的所有者角色,并且不足以列出所有项目。
发布于 2020-06-27 06:46:58
另一种解决方案是使用以下角色之一在组织级别授予帐户cloudasset.assets.searchAllResources权限:
使用此权限,您可以列出组织内的所有项目456:
gcloud asset search-all-resources \
--asset-types="cloudresourcemanager.googleapis.com/Project"
--scope=organizations/456文档:https://cloud.google.com/asset-inventory/docs/searching-resources
相关帖子:How to find, list, or search resources across services (APIs) and projects in Google Cloud Platform?
https://stackoverflow.com/questions/61919140
复制相似问题