Google Groups のメンバーを定期的に入れ替える運用をしている組織は多いと思います。手作業での登録・削除は手間がかかるため、API で自動化したいところです。
Google Groups のメンバーを API で管理する方法としては、Admin SDK (Directory API) がよく紹介されています。一方で、Admin SDK は Google Workspace の管理者権限が必要であり、利用できる場面が限られます。
本記事では、管理者権限がない環境でも利用できる Cloud Identity Groups API を使って、Google Groups のメンバーを一括管理する方法を紹介します。
API の選択肢
Google Groups のメンバーを API で管理するには、主に以下の 2 つの方法があります。
Admin SDK (Directory API)
もっとも広く紹介されている方法です。
利用するには、以下のいずれかが必要です:
- Google Workspace の管理者アカウント
- サービスアカウント + ドメイン全体の委任(Domain-Wide Delegation) (管理コンソールでの設定が必要)
管理者権限がない場合は 403 Forbidden が返されます。
Cloud Identity Groups API
Cloud Identity Groups API は、グループのオーナーやマネージャーであれば、管理者権限なしでメンバーの操作が可能です。本記事ではこちらの方法を使います。
両者の違いを以下にまとめます。
| Admin SDK (Directory API) | Cloud Identity Groups API | |
|---|---|---|
| 管理者権限 | 必要 | 不要 |
| グループオーナー権限 | — | 必要 |
| ドメイン全体の委任 | サービスアカウント利用時に必要 | 不要 |
| OAuth ユーザー認証 | 管理者のみ | オーナー/マネージャーで可 |
| API エンドポイント | admin.directory_v1 | cloudidentity.v1 |
| メンバー操作 | members() | groups().memberships() |
前提条件
- 対象グループの オーナーまたはマネージャー であること
- Google Cloud プロジェクトを持っていること
手順
1. API の有効化
Google Cloud Console で以下の API を有効にします:
2. OAuth クライアント ID の作成
- Cloud Console →「APIとサービス」→「認証情報」を開きます
- 「認証情報を作成」→「OAuth クライアント ID」を選択します
- アプリケーションの種類は「デスクトップアプリ」を選択します
- 作成後、JSON ファイルをダウンロードします
※ 初回は「OAuth 同意画面」の設定も必要です。ユーザーの種類は「内部」で問題ありません。
3. Python スクリプト
必要なライブラリをインストールします:
メンバー一覧の取得
初回実行時にブラウザが開き、Google アカウントでの認証を求められます。認証後はトークンがファイルに保存され、次回以降は自動で認証されます。
メンバーの追加
メンバーの削除
削除にはメンバーシップの name(内部ID)が必要なので、一覧取得で得た情報を使います。
4. 一括入れ替えの実装例
実運用では「既存メンバーを削除して新メンバーを登録する」一括入れ替えが必要になることが多いと思います。以下はその実装例です。
注意点
- レートリミット : 短時間に大量のリクエストを送ると制限されることがあります。
time.sleep()で間隔を空けることをお勧めします - OAuth トークンの管理 :
token.pickleにはアクセストークンが保存されます。Git にコミットしないよう.gitignoreに追加してください - クライアントシークレット :
client_secret.jsonも同様に管理にご注意ください - スコープ :
cloud-identity.groupsスコープは読み書き両方を含みます。読み取り専用であればcloud-identity.groups.readonlyが使えます
関連記事・参考資料
Cloud Identity Groups API を使った Google Groups の管理については、以下の記事も参考になります。
| 記事 | 認証方式 | 内容 |
|---|---|---|
| Cloud Identity APIでGoogle Workspaceのグループを操作する(Qiita) | サービスアカウント+ドメイン委任 | グループの CRUD 操作全般 |
| 自作PythonラッパーでGoogleグループのメンバーシップを管理する | サービスアカウント+ドメイン委任 | Python ラッパーの実装、有効期限付きメンバー追加 |
| Cloud IdentityでGoogleグループからメンバーを追加・削除するGAS | OAuth(GAS) | Google Apps Script での実装 |
| Use the Google Cloud Identity API for Google Groups(Medium) | サービスアカウント+ドメイン委任 | 英語での包括的な解説 |
| Google 公式ドキュメント | — | API リファレンス |
本記事では、上記の記事とは異なり、サービスアカウントやドメイン全体の委任を使わず、OAuth ユーザー認証のみで完結する方法 を紹介しました。管理者権限がない環境で Google Groups のメンバー管理を自動化したい場合の選択肢として、参考になれば幸いです。
まとめ
Google Workspace の管理者権限がない環境でも、Cloud Identity Groups API を使えば、グループのオーナー/マネージャー権限でメンバーの一括管理が可能です。OAuth ユーザー認証のみで完結するため、サービスアカウントの準備やドメイン全体の委任の設定が不要です。
ソースコードは GitHub リポジトリ で公開しています。