【问题标题】:How to create Google shared drives from API, using a Service Account?如何使用服务帐户从 API 创建 Google 共享驱动器?
【发布时间】:2021-04-09 15:09:39
【问题描述】:

我正在尝试使用 API v3(通过 python 客户端库“google-api-python-client”)创建一个共享驱动器(在谷歌驱动器中)。代码如下:

import uuid
from googleapiclient.discovery import build

drive_metadata = {'name': 'Test shared drive'}
request_id = str(uuid.uuid4())
drive = service.drives().create(
    body=drive_metadata,
    requestId=request_id,
    fields='id'
).execute()
drive_id = drive.get('id')
print(f'Drive ID: {drive_id}')

但是出现错误:

googleapiclient.errors.HttpError: https://www.googleapis.com/drive/v3/drives?requestId=905c4aae-0436-44e0-bb04-3728ee53342e&fields=id&alt=json 返回“用户对此文件没有足够的权限。”。详细信息:“用户对此文件没有足够的权限。”>

错误很直观,但我的问题是我需要授予 API 用户帐户的正确权限,因为:

  • 此用户不是个人帐户,而是服务帐户,因为它在 API 中使用,该 API 应该为我的应用程序的每个客户创建一个共享驱动器。
  • 我的公司使用 Google Workspace(用于企业),我的个人帐户有权创建共享云端硬盘(在本例中,我是 GCP 项目管理员)。但是 GCP 控制台不允许在公司域中创建服务帐户:
    • Service Accounts 似乎只存在于项目范围内,因此,它不属于同一个公司域。也就是说,服务帐号属于“iam.gserviceaccount.com”,无权访问域的共享驱动程序。

因此,我有两个问题:

  1. 我可以使用服务帐户创建共享驱动器吗?
  2. 如果是,服务帐号应该拥有什么样的权限(可能是 GCP 角色)?

【问题讨论】:

  • 您是否授予服务帐户对域的访问权限,您是否为服务帐户设置了模拟用户?

标签: google-cloud-platform google-drive-api google-workspace google-apps-marketplace google-drive-shared-drive


【解决方案1】:

正如 DalmTo 所说,将域范围的权限委派给服务帐户,并模拟用户帐户,该帐户具有创建共享驱动器的特权,然后 API 工作正常(并且更好:使用模拟创建的所有工件都显示为由被冒充的用户)。

您可以在此处查看如何执行此操作:https://developers.google.com/identity/protocols/oauth2/service-account#delegatingauthority

感谢 DalmTo!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 2023-03-11
    • 2020-08-11
    • 2019-12-12
    相关资源
    最近更新 更多