错误消息中的项目 ID 不是使用 Google API 客户端库时在"gcloud config set&qu



我按照文档调用存储传输 API。 https://cloud.google.com/storage-transfer/docs/reference/rest/v1/transferJobs/patch

这是我的代码。

from pprint import pprint
from googleapiclient import discovery
import google.auth
credentials, project = google.auth.default()
service = discovery.build("storagetransfer", "v1", credentials=credentials)
job_name = "transferJobs/XXXXXXXXXXXXXXXX"
update_transfer_job_request_body = {
"transferJob": {"description": "xxxxxxxxxxx"},
"projectId": project,
}
request = service.transferJobs().patch(
jobName=job_name, body=update_transfer_job_request_body
)
response = request.execute()
pprint(response)

在执行此脚本之前,我运行了gcloud config list以确保项目 ID 正确且未设置环境变量GOOGLE_APPLICATION_CREDENTIALS

但是我在下一个返回的错误消息中看到另一个项目 ID(aaa)。

googleapiclient.errors.HttpError:请求 https://storagetransfer.googleapis.com/v1/transferJobs/XXXXXXXXXXXXXXXX?alt=json 时

[{'@type': 'type.googleapis.com/google.rpc.Help', '链接': [{'description': 'Google 开发者控制台 IAM admin', 'url': 'https://console.developers.google.com/iam-admin/iam/project?project=aaaaaaaaaaa'}]}, {'@type': 'type.googleapis.com/google.rpc.ErrorInfo', '原因': 'USER_PROJECT_DENIED', '域': 'googleapis.com', '元数据': {'服务': 'storagetransfer.googleapis.com', '消费者': '项目/aaa

我假设项目 IDaaaaaaaaaaa与您的一个项目的 ID 不对应。

我不在可以轻松使用gcloud的设备上,但是,当我到达一个设备时,我将添加gcloud使用的项目 ID,以从具有gcloud auth application-default凭据的用户帐户合成服务帐户。

我认为您不应该使用gcloud auth application-default凭据,而应该在您的项目中创建一个服务帐户,授予它适当的权限并对其进行身份验证。

如果您的代码在 GCP 下运行,则需要在运行代码之前export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key

使用gcloud auth application-default对于测试代码很有用,但越来越不鼓励使用正确的服务帐户。它的一个问题是,综合服务帐户由Google拥有的项目(aaaaaaaaaaa)拥有,而不是用户拥有的项目,并且Google拥有的项目并未启用每个Google API。

我认为这就是您遇到的问题。

正如@DazWilkin所说,使用服务帐户会更合适,除此之外,还可以添加Cloud IAM权限serviceusage.services.enable来启用服务。根据您需要的功能(例如列表服务),您需要serviceusage.services.list可以解决错误。

通常,您可以添加角色roles/serviceusage.serviceUsageAdmin其中包括以下权限:

  • serviceusage.services.get
  • serviceusage.services.list
  • serviceusage.services.enable
  • serviceusage.services.disable

有关服务使用情况使用 IAM 控制对服务的访问的更多信息,请参阅此文档,并参考此文档以向服务账户添加角色。

相关内容

  • 没有找到相关文章

最新更新