如何通过Google Workspace Admin API获取未启用MFA用户数据
答复
两个需求均可以通过Google Workspace官方原生能力实现,无需依赖第三方工具。
未开启MFA用户数据提取可行性
- 完全支持提取。你可以直接通过Google Workspace管理控制台完成导出:使用拥有对应权限的管理员账号进入管理后台,在安全板块的多因素认证配置页,直接筛选未配置MFA的用户,即可导出包含用户基础属性、登录状态等字段的CSV格式报表。
- 可导出的默认字段包含用户邮箱、姓名、所属组织单元、账号创建时间、上次登录时间、账号状态,你也可以根据需要自定义导出字段范围。
- 操作前提:操作账号需要拥有超级管理员、用户管理员或报表查看员角色,普通用户账号无权限访问这类安全管控数据。
通过Admin SDK API拉取数据的实现方式
- 可以通过Admin SDK下的Reports API拉取全量未配置MFA的用户列表及关联数据,接口不需要申请特殊白名单,给调用身份配置对应权限即可正常调用。
- MFA状态判断逻辑:接口返回的用户字段中,
isEnrolledIn2Sv(已注册MFA)、isEnforcedIn2Sv(已被强制要求MFA)两个布尔值均为false的用户,就是未配置MFA的目标用户。 - 支持拉取的关联数据包括:用户基础账号信息、近180天的登录行为数据(登录IP、设备信息、异常登录记录)、账号权限配置(管理员角色、已授权第三方应用列表)。
- 基础调用示例(Python):
from googleapiclient.discovery import build # 提前完成服务账号鉴权,为服务账号开通管理员使用情况报表只读权限 service = build('admin', 'reports_v1', credentials=valid_creds) # 拉取指定日期的全量用户MFA状态数据 resp = service.userUsageReport().get( userKey='all', date='2024-06-15', # 替换为实际查询日期 parameters='accounts:is_enrolled_in_2sv,accounts:is_enforced_in_2sv' ).execute() # 筛选未配置MFA的用户列表 no_mfa_user_list = [ entry for entry in resp.get('usageReports', []) if not any( param.get('boolValue') for param in entry.get('parameters', []) if param.get('name') in ['is_enrolled_in_2sv', 'is_enforced_in_2sv'] ) ]
- 调用注意事项:
- 接口最长支持回溯拉取近180天的历史数据,超期数据无法通过接口获取
- 单次接口返回最大数据量为1000条,拉取全量域内用户数据时需要处理分页逻辑
- 如果域内开启了MFA豁免规则,需要额外结合组织单元的MFA策略配置做交叉校验,避免把豁免用户误判为未合规用户
内容的提问来源于stack exchange,提问作者raja ibrahim
相关产品推荐
相关产品推荐

