【问题标题】:google-cloud-resource-manage list projects 403 The caller does not have permissiongoogle-cloud-resource-manage list projects 403 调用者没有权限
【发布时间】:2022-10-21 13:50:52
【问题描述】:

我创建了一个 GCP 服务帐户并分配了列出组织内项目所需的权限。当我使用gcloud cli 时,一切正常:

gcloud auth activate-service-account --key-file=./key.json
gcloud projects list

# -> List of all projects

但是,当我尝试使用 Python Client for Google Cloud Resource Manager 进行“相同”操作时,我收到了 403 The caller does not have permission 错误消息。

# pip install google-cloud-resource-manager==1.4.1
from google.oauth2 import service_account
from google.cloud import resourcemanager_v3

# Load gcp credentials
credentials = service_account.Credentials.from_service_account_file('./key.json')

# Create resourcemanager_v3 ProjectsClient
resourcemanager_v3_projects_client = resourcemanager_v3.ProjectsClient(credentials=credentials)

# Initialize request argument(s)
list_projects_request = resourcemanager_v3.ListProjectsRequest(show_deleted=False, parent='')

# Make the request
page_result = resourcemanager_v3_projects_client.list_projects(request=list_projects_request)


# -> Error...
# -> grpc_helpers.py", line 68, in error_remapped_callable
# -> raise exceptions.from_grpc_error(exc) from exc
# -> google.api_core.exceptions.PermissionDenied: 403 The caller does not have permission

Python Client for Google Cloud Resource Manager 是否需要gcloud cli 以外的其他权限,还是我错过了 Python 代码中的某些内容?

【问题讨论】:

  • 这可能与带有错误案例的 github issue 有关。
  • 谢谢你,@AlexG。在查看了提供的问题和相关链接后,我发现我错过了 parent 参数。

标签: python google-cloud-platform gcloud google-cloud-resource-manager


【解决方案1】:

好像我错过了parentparameter...
以下片段应列出特定文件夹或组织的项目。

# pip install google-cloud-resource-manager==1.4.1
from google.oauth2 import service_account
from google.cloud import resourcemanager_v3

# Load gcp credentials
credentials = service_account.Credentials.from_service_account_file('./key.json')

# Create resourcemanager_v3 ProjectsClient
resourcemanager_v3_projects_client = resourcemanager_v3.ProjectsClient(credentials=credentials)

# Initialize request argument(s)
list_projects_request = resourcemanager_v3.ListProjectsRequest(show_deleted=False, parent='folders/%folder-id%') # for organization: 'organizations/%organization-id%'

# Make the request
page_result = resourcemanager_v3_projects_client.list_projects(request=list_projects_request)

# Handle the response
for response in page_result:
    print(response)

【讨论】:

  • 你不是说 parent='folders/%folder-id%' 吗?
  • @OdedBenDov 你是什么意思?
  • 你写了 parent='folders/%project-id%' 我认为你的意思是文件夹 ID 应该在“文件夹/”之后指定(不是项目 ID)
  • @OdedBenDov 谢谢,我修正了这个例子。
猜你喜欢
  • 1970-01-01
  • 2019-08-08
  • 2019-08-06
  • 2020-02-26
  • 1970-01-01
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 2020-10-10
相关资源
最近更新 更多