通过 API 以编程方式管理 GSuite 中的群组和用户

通过 API 以编程方式管理 GSuite 中的群组和用户

我有一个脚本,可以利用该gcloud工具为项目创建服务帐户。

我希望能够创建 GSuite 组,并在创建服务帐户的同一脚本中将服务帐户添加到其中,所以我不必在 Web UI 中手动执行此操作。

我更愿意尽可能通过 CLI 完成这些工作,包括服务账户和 GSuite 身份验证的初始设置等。

在 gcloud 和 gsuite 之间进行身份验证以及如何使用 gcloud 服务帐户自动执行 GSuite 任务时存在很多冲突的信息。

以下流程是怎样的:

  • 获取向 GSuite API 提交请求所需的身份验证信息
  • 授予获得上述内容所需的任何权限/范围
  • 实际上使用该身份验证来创建一个组/将用户添加到组/等等。

我更愿意使用 CLI 工具(例如gcloud)或 CURL 来执行任何 API 请求。如果需要客户端 SDK,我更喜欢 NodeJS SDK。

更新

为了澄清迄今为止​​我所测试的内容,在浏览了 Google 开发者门户上大量过时的文档后,我:

  • 在 GCloud 中为我的项目启用了“Admin SDK API”(Google 经常引用“Directory”API,但这不是可以在 GCloud API 中启用的功能,因此我认为他们指的是 Admin SDK API 中的 Directory API)
  • 创建服务帐号并赋予其owner项目角色
  • 在服务帐户上启用全域委派以获取其客户端 ID
  • https://www.googleapis.com/auth/admin.directory.group在 Google Admin(GSuite)控制台中,我在“安全 -> 管理 API 客户端访问”和“安全 -> API 控制 -> 全域委派”中为服务帐户客户端 ID 赋予了范围
  • 使用oauth2l使用 curl 工具生成具有范围的 bearer tokenadmin.directory.group
  • 尝试使用该承载令牌通过以下命令创建一个组:curl --request POST 'https://www.googleapis.com/admin/directory/v1/groups' --header "$(oauth2l header --json /home/<file containing the secret for the service account> --scope admin.directory.group)" --header 'Accept: application/json' --header 'Content-Type: application/json' --data '{"email":"[email protected]"}' --compressed
  • Gsuite 返回了一个方便的 403 Not Authorized to access this resource/api

在整个 Google 文档中,他们建议您使用 API Explorer 来尝试这些功能,但该工具现已不再存在。

在里面目录API先决条件页面描述了如何设置管理控制台的 API——那里描述的选项也不存在。

答案1

TL:DR:你需要与目录 APIG Suite 开发工具包

获取向 GSuite API 提交请求所需的身份验证信息

目录 API:先决条件页面我们可以阅读你需要遵循的步骤设置 API

1 从管理控制台启用 API 访问,以便向目录 API 发出请求。要启用 API,请登录您的管理员帐户并选择安全。如果您没有看到列出的“安全”,请选择 更多控制进而安全从灰色框中显示的选项中选择 API 参考,然后选中复选框以启用 API 访问。保存您的更改。

2 在Google API 控制台并为该项目激活 Admin SDK 服务

授予获得上述内容所需的任何权限/范围

目录 API:授权请求您可以阅读更多有关流程的信息使用 OAuth 2.0 授权请求以及您需要的范围。由于您只想管理组,因此您需要添加“组、组别名和组成员的范围”的范围。您需要添加的范围是:

范围: https://www.googleapis.com/auth/admin.directory.group

意义: 访问所有组操作的全局范围,包括组别名和成员。

实际上使用该身份验证来创建一个组/将用户添加到组/等等。

由于您将使用 BASH 与 API 交互,因此您需要使用 CURL 对 API 执行查询。因此我将发布的所有示例都使用 CURL。

目录 API:群组您可以阅读您可以执行的操作以及如何执行此类操作。

例如,如果你想创建一个组,需要执行 POST 操作来“https://www.googleapis.com/admin/directory/v1/groups“其有效负载为 JSON,格式如下:

{
   "email": "[email protected]",
   "name": "Sales Group",
   "description": "This is the Sales group."
}

因此 CURL 命令将如下所示:

curl --request POST \
     --header "Content-Type: application/json" \
     --header "Authorization: Bearer <ACCESS TOKEN>" \
     --data '{"email":"[email protected]","name":"Sales Group","description":"This is the Sales group."}' \     https://www.googleapis.com/admin/directory/v1/groups

成功响应将返回 HTTP 201 状态代码。除了状态代码外,响应还会返回新组的属性。

如果您在获取 TOKEN 时遇到问题,您可以阅读一些关于如何获取 OAUTH 2.0 令牌的文章:

https://stackoverflow.com/questions/28593022/list-google-drive-files-with-curl https://stackoverflow.com/questions/44063975/get-access-token-of-google-api https://developers.google.com/google-ads/api/docs/concepts/curl-example https://www.jhanley.com/google-oauth-2-0-testing-with-curl/

答案2

我遇到了与 OP 完全相同的问题,文档太糟糕了。通过在 Google Workspace 管理界面上向我的服务帐户授予“群组管理员”角色来解决:管理员角色 > 群组管理员 > 服务帐户

相关内容