はじめに
わたしたちのチームでは、メールアドレス/グループを一括で作成する必要がありました。しかし Google Workspace の管理コンソールで1件ずつ操作するのは端的にめんどくさいです。そこで GCP + Workspace API を活用し、自動化したのが今回の記事の背景です。
フェーズの全体像
- "管理用" Google Cloud プロジェクトを作る
- 必要な Workspace API を有効化 & サービスアカウント発行
- Workspace 側で "ドメインワイド委任" を許可
- CLI/スクリプトを書いて実行する
1. 管理用 GCP プロジェクトを作成
gcloud projects create admin-automation \
--name="Admin Automation"
gcloud config set project admin-automation
2. API 有効化 & サービスアカウント準備
2-1. API を ON
gcloud services enable \
cloudidentity.googleapis.com \ # Groups API
admin.googleapis.com \ # Admin SDK Directory API
groupssettings.googleapis.com # Group Settings API
2-2. サービスアカウント作成
gcloud iam service-accounts create gw-admin-bot \
--display-name="GW Admin Bot"
# 鍵を JSON で発行(CI に置く or Secret Manager へ)
gcloud iam service-accounts keys create sa-key.json \
--iam-account gw-admin-bot@admin-automation.iam.gserviceaccount.com
2-3. 最低限付ける IAM ロール
目的 | ロール |
---|---|
API 呼び出し許可 | roles/iam.serviceAccountTokenCreator (本人に対して) |
プロジェクトの閲覧 | roles/viewer など最低限で OK |
3. Workspace 側でドメインワイド委任
- 管理コンソール → [セキュリティ] → [API 制御] → [ドメインワイド委任]
- [新しい委任を追加] → Client ID に先ほどのサービスアカウントの ユニーク ID を入力(メールアドレスではない)。
- OAuth スコープ に下記をカンマ区切りで登録:
https://www.googleapis.com/auth/cloud-identity.groups,
https://www.googleapis.com/auth/cloud-identity.groups.readonly,
https://www.googleapis.com/auth/admin.directory.group,
https://www.googleapis.com/auth/admin.directory.group.member,
https://www.googleapis.com/auth/apps.groups.settings
💡 ポイント
- Cloud Identity API 用スコープと Admin SDK 用スコープの 両方 が必要。
- さらに「グループ管理者」の 管理者ロール をサービスアカウントに付与しておくと UI 上でも権限が分かりやすい。
4. スクリプト実装
4-1. gcloud CLI をサービスアカウントで実行
gcloud auth activate-service-account \
--key-file sa-key.json \
--impersonate-service-account \
gw-admin-bot@admin-automation.iam.gserviceaccount.com
これで gcloud identity groups …
コマンドがドメインワイド権限で動作します。
4-2. 作成したスクリプト
#!/usr/bin/env bash
# 作成したいグループ
GROUP_EMAILS=(
"CVAUG006@example.com"
"CZMPC007@example.com"
)
## 追加するメンバー
MEMBERS=(
"alice@example.com"
"bob@example.com"
)
# すべてのグループを作成し、メンバーを追加する
for group_email in "${GROUP_EMAILS[@]}"; do
# グループ名のプレフィックスを抽出(例:CVAUG006)
prefix=$(echo "$group_email" | cut -d '@' -f 1)
# デバッグ出力
echo "デバッグ - グループ: $group_email, プレフィックス: $prefix"
display_name="prefix: $prefix"
echo "グループ作成: $group_email ($display_name)"
gcloud identity groups create "$group_email" \
--display-name="$display_name" --organization="example.com"
# エラーが発生した場合は処理を続行
if [ $? -ne 0 ]; then
echo "警告: グループ $group_email の作成に失敗しました。次のグループに進みます。"
continue
fi
# メンバーを追加
for member in "${MEMBERS[@]}"; do
echo "メンバー追加: $member → $group_email"
gcloud identity groups memberships add \
--group-email="$group_email" \
--member-email="$member" \
--roles=MEMBER
done
echo "========================================"
done
まとめ
ステップ | 主な作業 |
---|---|
1. GCP プロジェクト | gcloud projects create で管理用プロジェクトを作成 |
2. API & SA | gcloud services enable ... → サービスアカウント発行 |
3. Workspace 連携 | 管理コンソールでドメインワイド委任 + 管理者ロール付与 |
4. グループ自動化 | gcloud / Curl / GAM でグループを一括作成 |