Mail Admin Quarantine API は、セキュリティ パイプラインや SIEM または SOAR の統合などのサーバーサイドの自動化向けに設計されています。これらの自動化は、ドメイン全体の委任を使用して、必要な管理者権限を持つ Google Workspace 管理者の代理として機能する Google Cloud サービス アカウントで認証します。
このページでは、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 デベロッパー プレビュー プログラムに登録されていることを確認します。 |