Mail Admin Quarantine API 专为服务器端自动化而设计,例如安全流水线以及 SIEM 或 SOAR 集成。这些自动化操作会使用 Google Cloud 服务账号进行身份验证,该服务账号使用全网域授权代表拥有所需管理员权限的 Google Workspace 管理员执行操作。
本页面介绍了该 API 需要哪些 OAuth 2.0 范围,以及如何配置服务账号和获取访问令牌。
OAuth 2.0 范围
Admin Quarantine API 使用以下 OAuth 2.0 范围:
| 范围 | 含义 |
|---|---|
https://www.googleapis.com/auth/gmail.admin.quarantine |
查看和管理被隔离的邮件。需要此权限才能单独或批量释放或拒绝邮件。 |
https://www.googleapis.com/auth/gmail.admin.quarantine.readonly |
查看被隔离的邮件。足以列出、搜索和获取邮件,列出和获取隔离区,以及获取批量操作的状态。 |
下表显示了每个方法接受的范围:
| 方法 | gmail.admin.quarantine |
gmail.admin.quarantine.readonly |
|---|---|---|
customers.quarantinedMessages.list |
✓ | ✓ |
customers.quarantinedMessages.search |
✓ | ✓ |
customers.quarantinedMessages.get |
✓ | ✓ |
customers.quarantines.list |
✓ | ✓ |
customers.quarantines.get |
✓ | ✓ |
customers.operations.get |
✓ | ✓ |
customers.quarantinedMessages.release |
✓ | |
customers.quarantinedMessages.deny |
✓ | |
customers.quarantinedMessages.batchRelease |
✓ | |
customers.quarantinedMessages.batchDeny |
✓ |
遵循最小权限原则:对于仅监控隔离区的集成,请求只读范围。
如果请求使用的令牌不包含接受的范围,则 API 会返回 403 错误,原因为 ACCESS_TOKEN_SCOPE_INSUFFICIENT。
创建服务账号
- 在 Google Cloud 控制台中,前往 IAM 和管理 > 服务账号,然后选择您启用了 API 的 Google Cloud 云项目。
- 点击创建服务账号,输入名称(例如
quarantine-api-service-account),然后点击创建并继续。您无需向服务账号授予任何 IAM 角色。点击完成。 - 打开服务账号,然后在详细信息标签页中复制 OAuth 2 客户端 ID。这是一个 21 位数字,例如
109876543210987654321。在下一部分中,您将需要此 ID。 - 在密钥标签页中,依次点击添加密钥 > 创建新密钥,选择 JSON,然后点击创建。妥善存储下载的 JSON 密钥文件。
如需了解详情,请参阅为服务账号创建凭证。
授权全网域委托
授权服务账号访问 Google Workspace 账号中的 Admin Quarantine API 范围:
- 以超级用户身份登录 Google 管理控制台。
- 依次前往安全性 > 访问权限和数据控件 > API 控件。
- 在全网域授权下,点击管理全网域授权。
- 点击新增。
- 在客户端 ID 字段中,输入服务账号的 OAuth 2.0 客户端 ID。请勿输入服务账号的邮箱。
在 OAuth 范围字段中,输入以下范围之一:
- 对于读写权限:
https://www.googleapis.com/auth/gmail.admin.quarantine - 对于只读访问权限:
https://www.googleapis.com/auth/gmail.admin.quarantine.readonly
- 对于读写权限:
点击授权。
如需了解详情,请参阅使用全网域委托功能控制 API 访问权限。
获取访问令牌
为了调用 API,服务账号会通过将令牌请求的 subject (sub) 声明设置为管理员的邮箱来模拟管理员。管理员必须拥有所需的管理员权限。
以下 Python 示例使用 google-auth 库获取访问令牌:
from google.oauth2 import service_account
import google.auth.transport.requests
SERVICE_ACCOUNT_FILE = 'service_account.json'
# An administrator with the Access Admin Quarantine privilege.
ADMIN_EMAIL = 'admin@example.com'
SCOPES = ['https://www.googleapis.com/auth/gmail.admin.quarantine']
credentials = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE,
scopes=SCOPES,
subject=ADMIN_EMAIL,
)
credentials.refresh(google.auth.transport.requests.Request())
access_token = credentials.token
在每个请求的 Authorization 标头中发送令牌:
Authorization: Bearer ACCESS_TOKEN
访问令牌会在 1 小时后过期。在每批请求之前刷新凭据,而不是长时间缓存令牌。
排查授权错误
| HTTP 状态 | 原因 | 分辨率 |
|---|---|---|
401 UNAUTHENTICATED |
Authorization 标头缺失,或者令牌格式不正确或已过期。 |
获取新的访问令牌,并将其作为不记名令牌。 |
403 ACCESS_TOKEN_SCOPE_INSUFFICIENT |
令牌不包含该方法接受的范围。 | 为 release 和 deny 方法请求 https://www.googleapis.com/auth/gmail.admin.quarantine 范围,并确保该范围已在管理控制台中获得授权。 |
403 PERMISSION_DENIED |
被冒充的管理员不具有管理员隔离区权限,或者无权访问存放该邮件的隔离区。 | 向管理员授予访问管理员隔离区或访问受限的隔离区权限。 |
每个方法上的 403 SERVICE_DISABLED 或 404 NOT_FOUND |
Cloud 项目中未启用该 API,或者该项目未加入开发者预览版计划。 | 启用该 API,并确认您已加入 Google Workspace 开发者预览版计划。 |