问题描述
我正在尝试使用 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 控制台不允许在公司域中创建服务帐户:
- 服务帐户似乎只存在于项目范围内,因此不属于同一公司域。也就是说,服务帐号属于“iam.gserviceaccount.com”,无法访问域的共享驱动程序。
因此,我有两个问题:
- 我可以使用服务帐户创建共享云端硬盘吗?
- 如果是,服务帐户应该拥有什么样的权限(可能是 GCP 角色)?
解决方法
正如 DalmTo 所说,将域范围的权限委派给服务帐户,并模拟用户帐户,具有创建共享驱动器的权限,然后 API 工作正常(更好:使用模拟创建的所有工件都显示为由被冒充的用户)。
您可以在此处了解如何执行此操作:https://developers.google.com/identity/protocols/oauth2/service-account#delegatingauthority
感谢 DalmTo!