使用带有服务帐户的serviceusage API启用API

时间:2019-05-08 10:56:39

标签: python authentication google-cloud-platform google-cloud-iam google-auth-library

我想为客户端创建GCP的自动部署。

为此,我打开了一个页面供他们使用google登录,然后启用了IAM API和服务使用API​​。

然后,我创建了一个我希望从现在开始使用的服务帐户,以便按需启用而不是一次全部启用其他必需的API。

当我尝试启用cloudkms API时,我得到

googleapiclient.errors.HttpError: <HttpError 403 when requesting https://serviceusage.googleapis.com/v1/projects/x-y-z/services/cloudkms.googleapis.com?alt=json returned "The caller does not have permission"

我尝试使用从创建服务帐户的响应中创建的服务帐户凭据(google.auth.jwt.Credentials),并添加了所有必需的权限。我不想将角色所有者授予服务帐户,因为我希望该帐户具有尽可能少的权限。

当我尝试使用用户权限获取cloudkms API的状态时,它会起作用。

我已经看到一些解决方案,这些解决方案需要在这里https://console.developers.google.com/apis/credentials为服务帐户创建凭据,但是我确实也需要以编程方式进行此操作。

我的代码:

credentials = jwt.Credentials.from_service_account_file(service_account_info['email'] + '.json', audience="https://www.googleapis.com/auth/cloud-platform")
# credentials = GoogleCredentials.get_application_default() - it works with this
service_usage = googleapiclient.discovery.build('serviceusage', 'v1', credentials=credentials)
service_usage.services().get(name="projects/<project_id>/services/cloudkms.googleapis.com").execute()

上面提到了错误。

1 个答案:

答案 0 :(得分:0)

您需要Cloud IAM权限serviceusage.services.enable才能启用服务。根据您需要的功能(例如列表服务),您需要serviceusage.services.list

通常,您添加包含以下权限的角色roles/serviceusage.serviceUsageAdmin

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