调用Google Admin Directory API获取组成员时遇403权限错误求助
解决Google Admin Directory API 403权限错误问题
问题根源
- 你当前给服务账号分配的BigQuery Resource Viewer、Folder Viewer、Organization Viewer、Viewer角色均不包含访问Google Admin Directory API的权限,这类角色仅针对云资源或组织层级的查看,和Google Workspace域内的群组管理无关。
- 调用Admin Directory API必须完成域范围委派(Domain-Wide Delegation),这是服务账号访问Workspace域数据的必要前提,目前你的配置缺少该步骤。
- 代码中使用的scope为旧版Groups Feed接口的,与当前调用的Admin Directory API不匹配。
分步解决方法
1. 启用Google Admin Directory API
在你的Google Cloud项目中操作:
- 打开API库,搜索Admin Directory API
- 点击「启用」按钮,确保API处于可用状态
2. 给服务账号分配正确的IAM角色
给服务账号添加能读取群组成员的预定义角色:
- 进入Google Cloud IAM页面,找到目标服务账号
- 点击「添加角色」,搜索并选择Groups Reader(该角色允许读取Workspace域内的群组及成员信息)
- 保存更改
3. 配置域范围委派(关键步骤)
此步骤需由Google Workspace域管理员在Admin控制台操作:
- 登录Workspace Admin控制台,进入「安全」→「API控制」→「域范围委派」
- 点击「添加新的客户端ID」,输入服务账号的客户端ID(可在Google Cloud服务账号详情页获取)
- 在「OAuth范围」中添加Admin Directory API的正确scope:
- 仅读取群组成员:
https://www.googleapis.com/auth/admin.directory.group.member.readonly - 读取群组及成员:
https://www.googleapis.com/auth/admin.directory.group.readonly
- 仅读取群组成员:
- 点击「授权」完成配置
4. 修正代码中的错误
4.1 替换正确的Scope
将代码中的scope替换为Admin Directory API的:
scopes=['https://www.googleapis.com/auth/admin.directory.group.member.readonly']
4.2 添加用户模拟
服务账号调用Admin API必须模拟域内有权限查看目标群组的用户(如域管理员或群组管理员),修改credentials初始化代码:
credentials = service_account.Credentials.from_service_account_file( '/home/key.json', scopes=['https://www.googleapis.com/auth/admin.directory.group.member.readonly'] ).with_subject('admin@test.ai') # 替换为你域内有权限的用户邮箱
4.3 清理重复导入
代码中重复导入了Credentials和service_account,可删除重复行简化:
from google.oauth2.credentials import Credentials from google.auth.transport.requests import Request from google.oauth2 import service_account from google.auth.exceptions import RefreshError import requests
5. 验证权限
重新运行代码,确认是否能成功获取群组成员。若仍报错,检查:
- 模拟的用户是否真的有权限查看目标群组
- 域范围委派的scope是否正确添加
- 服务账号的角色是否已生效(可能需等待几分钟)
内容的提问来源于stack exchange,提问作者develop
相关产品推荐
相关产品推荐

