Google OAuth
Google Workspaceを業務アセットとして接続すると、アカウント・グループ・ロール・組織部門をYESODから管理できます。「SaaS接続」画面に並ぶ接続先サービスの名前は「Google OAuth」です。
概要
Google Workspace(旧称 G Suite)は、Googleが提供するクラウドベースの生産性向上とコラボレーションのツール群です。メール、カレンダー、ドキュメント、ドライブなどのサービスを含み、企業や組織向けに設計されています。
| 参照先 | URL |
|---|---|
| 公式HP | https://workspace.google.com/intl/ja/ |
| 公式ヘルプ | https://support.google.com/a/ |
| APIドキュメント | https://developers.google.com/admin-sdk/directory/ |
サービス仕様
Google Workspaceは次の機能を提供します。
ユーザーおよびグループ管理
- アカウントの作成、管理、削除
- グループの作成とメンバーシップの管理
- 組織部門(OU)の管理
権限と管理
- 管理者ロールの設定と権限の管理
- カスタムロールの作成と割り当て
- セキュリティとコンプライアンスの設定
管理できること
| 機能 | 対応 |
|---|---|
| アカウント作成 | ○ |
| グループ付与 | ○ |
| ロール付与 | ○ |
| グループプッシュ | ○ |
接続方式は標準コネクタです。管理できる対象は次のとおりです。
| 項目 | 備考 |
|---|---|
| アカウント管理 | アカウントの作成・削除(無効化)。属性同期による属性更新 |
| グループ・ロール・組織部門の管理 | アカウントに対する割当項目の付与・剥奪。割当種別で設定する |
事前に必要なもの
- Google WorkspaceのBusiness Standardプラン以上の契約
- 接続に使うGoogle Workspaceのアカウントが
特権管理者のロールを持っていること
特権管理者のロールがないアカウントで接続すると、APIの利用権限がないためエラーになります。
接続に使う情報
接続にはOAuthを使います。接続画面で入力する項目は1つだけです。
| 入力項目 | 必須 | 入力する内容 |
|---|---|---|
| 「ドメイン(任意)」 | 任意 | 管理対象のGoogle Workspaceのドメイン |
「ドメイン」を入力すると、同期する項目のuser.primaryEmailの既定の式が変わります。メンバーのメールアドレスの@より前の部分と、このドメインを組み合わせた値になります。未入力の場合は、メンバーのメールアドレスをそのまま使います。
接続する
「業務アセット」画面から「SaaS接続」画面を開くまでの手順は、業務アセットを追加するを参照してください。
-
「SaaS接続」画面で「Google OAuth」のカードをクリックします。 「Google OAuth 接続」の画面が表示されます。
-
「ドメイン(任意)」を入力します。 管理対象のGoogle Workspaceのドメインを入力します。
-
「名寄せに使用する項目」を確認します。 何を照合するかはアカウントとメンバーの名寄せを参照してください。
-
「ログイン」をクリックします。 Googleのサインイン画面へ移ります。
-
特権管理者のロールを持つアカウントでサインインし、アクセスを許可します。 YESODの画面に戻り、完了の画面が表示されます。業務アセットが作られるのはこのときです。
許可しなかった場合や、アカウントの権限が足りない場合は、直前の「Google OAuth 接続」の画面に戻ります。業務アセットは作られません。
アカウントの作成
同一のメールアドレスのアカウントがGoogle Workspaceに存在するかどうかに応じて、次のように動作します。
| Google Workspaceの状態 | 動作 |
|---|---|
| 同一のメールアドレスのアカウントが存在しない | アカウントを新規作成します |
| 同一のメールアドレスの有効なアカウントが存在する | そのアカウントの情報を更新します |
| 同一のメールアドレスの無効(停止)なアカウントが存在する | そのアカウントを有効にして情報を更新します |
パスワードの設定
パスワードの設定に対応しています。アカウントの作成にはパスワードが必須です。パスワードの設定がない場合はエラーになります。
パスワードの決め方は、業務アセットの左のメニューの「アカウント設定」にある「初期パスワード」で設定します。
API経由でアカウントを作成するため、招待メールもパスワードの通知メールも送信されません。管理者が別の方法でパスワードを利用者へ共有してください。
アカウントの削除
Google Workspaceには、アカウントの削除・アーカイブ・停止(無効化)があります。業務アセット経由のアカウント削除で使われるのは、アーカイブと停止(無効化)の2つです。
どちらを実行するかは、業務アセットの左のメニューの「アカウント設定」を開き、「アカウント設定」タブの「アカウント削除タスクの実行方法」で選びます。選択肢は「アカウントを無効化」と「アカウントをアーカイブ」です。

この設定は、アカウント削除タスクが実行されるタイミングで参照されます。ステータスが「処理待ち」のタスクには、タスクを生成した時点ではなく、実行した時点の設定が適用されます。
割当種別
| 割当種別名 | タイプ | 割当項目 | 備考 |
|---|---|---|---|
| グループ | 「複数のグループに所属させる」 | サービス管理画面で設定した値をインポートして表示します | 割当項目はhttps://admin.google.com/ac/groupsで確認できます |
| ロール | 「複数のグループに所属させる」 | サービス管理画面で設定した値をインポートして表示します | 割当項目はhttps://admin.google.com/ac/rolesで確認できます |
| 組織部門 | 「優先度の高いグループに所属させる」 | サービス管理画面で設定した値をインポートして表示します | 割当項目はhttps://admin.google.com/ac/orgunitsで確認できます |
「グループ」と「ロール」は、1人のメンバーが複数の割当項目を同時に保有できます。「組織部門」は、優先度の高い割当項目が1つだけ適用されます。
同期する項目
業務アセットの左のメニューの「アカウント設定」にある「同期する項目」タブで、YESODの項目をGoogle Workspaceの項目へ対応づけます。同期できる項目は、Google WorkspaceのAdmin SDKのUsersに依存します。
次のプロパティには対応していません。
posixAccountscustomShemas
| 必須 | 属性名 | key | デフォルトの式 | 型 | 例 | 備考 |
|---|---|---|---|---|---|---|
| ✅ | メインのメールアドレス | user.primaryEmail | !String.isNullOrBlank(params.domain) ? String.substringBefore(user.email, "@") + "@" + params.domain : user.email | String | - | typeはwork固定。primaryはtrue固定 |
| ✅ | 姓 | user.name.familyName | user.familyNameLocalPreferred | String | - | - |
| ✅ | 名 | user.name.givenName | user.givenNameLocalPreferred | String | - | - |
| ✅ | ユーザーのパスワード | user.password | YESODが作成したパスワード | String | - | - |
| - | 「次回ログイン時にユーザーにパスワードの変更を要求するかどうか」 | user.changePasswordAtNextLogin | true | Boolean | - | - |
| - | サブメールアドレス | user.secondEmail.address | - | String | - | primaryはfalse固定 |
| - | サブメールアドレスの種類 | user.secondEmail.type | - | String | - | - |
| - | カスタムのサブメールアドレスの種類の値 | user.secondEmail.customType | - | String | - | - |
| - | ユーザーの再設定用のメールアドレス | user.recoveryEmail | - | String | - | - |
| - | ユーザーの再設定用の電話番号 | user.recoveryPhone | - | String | - | - |
| - | ドメインで連絡先の共有機能が有効になっている場合、ユーザーのプロフィールをGoogle Workspaceのグローバルアドレス一覧に表示するか | user.includeInGlobalAddressList | - | Boolean | - | - |
| - | ユーザーのIPアドレスに、非推奨のIPアドレスallowlist構成を適用するか | user.ipWhitelisted | - | Boolean | - | - |
| - | 性別 | user.gender | - | String | user["<性別の項目ID>"] == "男" ? "male" : user["<性別の項目ID>"] == "女" ? "female" : user["<性別の項目ID>"] == "その他" ? "other" : null | male、female、other、unknownのみ受け入れる |
| - | 姓と名の値を連結して形成されたユーザーのフルネーム | user.name.fullName | - | String | - | - |
| - | ユーザーの表示名 | user.name.displayName | - | String | - | 上限: 半角256文字(全角128文字) |
| - | メンバーの外部ID | user.externalId.value | - | String | - | メンバーIDやネットワークIDなど |
| - | 外部IDのタイプ | user.externalId.type | - | String | - | - |
| - | カスタムタイプ | user.externalId.customType | - | String | - | - |
| - | ユーザーが関係づけられているユーザーのメールアドレス | user.relation.value | - | String | - | - |
| - | 関係のタイプ | user.relation.type | - | String | - | - |
| - | カスタムタイプ | user.relation.customType | - | String | - | - |
| - | 構造化されていない完全な住所 | user.address.formatted | - | String | - | - |
| - | 国コード | user.address.countryCode | - | String | - | ISO 3166-1 |
| - | 国 | user.address.country | - | String | - | - |
| - | 郵便番号 | user.address.postalCode | - | String | - | - |
| - | 省略された都道府県 | user.address.region | - | String | - | - |
| - | 住所の市区町村 | user.address.locality | - | String | - | - |
| - | 住所の通り | user.address.streetAddress | - | String | - | - |
| - | 住所の拡張部分 | user.address.extendedAddress | - | String | - | 小区域が含まれる住所など |
| - | 郵便箱 | user.address.poBox | - | String | - | - |
| - | 住所のタイプ | user.address.type | - | String | - | - |
| - | 住所のカスタムタイプ | user.address.customType | - | String | - | - |
| - | ユーザーのメインの住所であるか | user.address.primary | - | Boolean | - | - |
| - | 組織のコストセンター | user.organizations.costCenter | - | [String] | - | - |
| - | カスタムタイプ | user.organizations.customType | - | [String] | - | - |
| - | 「部署」 | user.organizations.department | - | [String] | - | - |
| - | 組織の説明 | user.organizations.description | - | [String] | - | - |
| - | 組織のドメイン | user.organizations.domain | - | [String] | - | - |
| - | 組織の所在地 | user.organizations.location | - | [String] | - | - |
| - | 組織名 | user.organizations.name | - | [String] | user.organization.[name] | - |
| - | ユーザーのメインの組織であるか | user.organizations.primary | - | [Boolean] | - | - |
| - | 組織のシンボル | user.organizations.symbol | - | [String] | - | - |
| - | 役職 | user.organizations.title | - | [String] | user.role | - |
| - | 組織の種類 | user.organizations.type | - | [String] | - | - |
| - | 電話番号 | user.phone.value | - | String | - | - |
| - | 電話番号の種類 | user.phone.type | - | String | - | - |
| - | カスタムタイプ | user.phone.customType | - | String | - | - |
| - | メインの電話番号であるか | user.phone.primary | - | Boolean | - | - |
| - | ユーザーの使用言語 | user.language.languageCode | - | String | - | 言語コード(ISO639)を設定 |
| - | ユーザーの優先言語であるか | user.language.preference | - | String | - | - |
| - | カスタム言語名 | user.language.customLanguage | - | String | - | - |
| - | ユーザーのウェブサイトのURL | user.website.value | - | String | - | - |
| - | ユーザーのウェブサイトの種類または目的 | user.website.type | - | String | - | - |
| - | カスタムタイプ | user.website.customType | - | String | - | - |
| - | ユーザーのメインのウェブサイトであるか | user.website.primary | - | Boolean | - | - |
| - | SSH公開鍵 | user.sshPublicKey.key | - | String | - | - |
| - | SSH公開鍵の有効期限 | user.sshPublicKey.expirationTimeUsec | - | Long | - | マイクロ秒 |
| - | ユーザーのキーワード | user.keyword.value | - | String | - | - |
| - | キーワードの種類 | user.keyword.type | - | String | - | - |
| - | カスタムのキーワードの種類の値 | user.keyword.customType | - | String | - | - |
| - | IM(インスタントメッセンジャー)のネットワークID | user.im.im | - | String | - | - |
| - | IMの種類 | user.im.type | - | String | - | - |
| - | カスタムのIMの種類の値 | user.im.customType | - | String | - | - |
| - | IMネットワークを識別するIMプロトコル | user.im.protocol | - | String | - | - |
| - | カスタムIMネットワークのプロトコルの値 | user.im.customProtocol | - | String | - | - |
| - | IMアカウントがユーザーの主要なIMアカウントであるか | user.im.primary | - | Boolean | - | - |
| - | ユーザー向けのメモの内容 | user.note.value | - | String | - | - |
| - | メモのコンテンツタイプ | user.note.contentType | - | String | - | 書式なしテキストまたはHTML |
| - | ユーザーの勤務地 | user.location.area | - | String | - | - |
| - | ビルディングID | user.location.buildingId | - | String | - | - |
| - | カスタムタイプの値 | user.location.customType | - | String | - | - |
| - | デスクのコード | user.location.deskCode | - | String | - | - |
| - | 階の名前/番号 | user.location.floorName | - | String | - | - |
| - | 階のセクション | user.location.floorSection | - | String | - | - |
| - | 場所のタイプ | user.location.type | - | String | - | - |
グループプッシュ
グループプッシュを使うと、YESODに登録されているグループをGoogle Workspaceの「グループ」として作成・更新・削除・移動できます。対象になるのは、組織・会社・事業所・プロジェクト・動的グループです。グループプッシュそのものの説明は、グループプッシュとはを参照してください。
グループプッシュで作成・管理できるのは、Google Workspaceの「グループ」だけです。 「組織部門」と「ロール」はグループプッシュの対象外です。既存の組織部門・ロールへの割当は「割当種別」を参照してください。
割当種別の「グループ」は、Google Workspaceの管理コンソールで作成済みのグループをYESODに取り込み、メンバーへの割当として管理するものです。YESODのグループをGoogle Workspaceに新規作成するグループプッシュとは別の機能です。
グループの作成・更新
同一のメールアドレスのグループがGoogle Workspaceに存在するかどうかに応じて、次のように動作します。
| Google Workspaceの状態 | 動作 |
|---|---|
| 同一のメールアドレスのグループが存在しない | グループを新規作成します |
| 同一のメールアドレスのグループが存在する | 既存のグループの情報を更新します |
YESOD上のグループの親子関係は、Google Workspaceのグループの「メンバー」として反映されます。親グループを作成・更新すると、その親グループのメンバーとして子グループが自動的に追加されます。
グループの削除
グループプッシュでのグループの削除は、Google Workspace上のグループを完全に削除します。アーカイブや無効化ではありません。削除したグループは元に戻せません。グループ連携条件を変更した結果、グループが意図せず連携対象から外れると、Google Workspace上のグループそのものも削除されます。連携条件を変更するときは、影響範囲を確認してください。
グループの移動
YESOD上でグループの親子関係を変更すると、Google Workspace側では次のように反映されます。
- 移動先の親グループのメンバーに、対象のグループを追加します
- 移動元の親グループのメンバーから、対象のグループを削除します
移動先への追加を先に実行します。追加に失敗した場合は、移動元からは削除しません。元の親子関係を維持したまま処理を終了します。
グループプッシュで同期する項目
| 必須 | 属性名 | key | デフォルト値 | 型 | 備考 |
|---|---|---|---|---|---|
| ✅ | メールアドレス | email | - | String | グループのメールアドレス(主アドレス)。組織内で重複はできません。必須項目ですがデフォルト値はないため、必ず手動(属性式など)で値を設定してください |
| ✅ | 表示名 | name | group.groupNameLocal | String | グループの表示名。最大73文字です |
| - | 説明 | description | - | String | グループの説明文。最大4,096文字です |
| - | オーナー | owners | - | String / String[] | グループのオーナーをメールアドレスで指定します。Google Workspace上に存在しないメールアドレスでも指定できるため注意してください。指定したユーザーはオーナーとしてグループに強制的に追加されます |
| ✅ | ラベル | labels | ["discussion_forum"] | String[] | グループの種類を識別するラベルです。discussion_forum(通常のGoogleグループ)またはsecurity(セキュリティグループ)を指定します。discussion_forumは必須で外せません。securityは一度付与すると外せません(外すような属性同期を実行するとエラーになります) |
| ✅ | アクセス設定 - オーナーに連絡できるユーザー | whoCanContactOwner | ANYONE_CAN_CONTACT | String | 「アクセス設定の設定範囲」を参照してください |
| ✅ | アクセス設定 - 会話を閲覧できるユーザー | whoCanViewGroup | ALL_IN_DOMAIN_CAN_VIEW | String | 同上 |
| ✅ | アクセス設定 - 投稿できるユーザー | whoCanPostMessage | ALL_IN_DOMAIN_CAN_POST | String | 同上 |
| ✅ | アクセス設定 - メンバーを表示できるユーザー | whoCanViewMembership | ALL_IN_DOMAIN_CAN_VIEW | String | 同上 |
| ✅ | アクセス設定 - メンバーの管理 | whoCanModerateMembers | OWNERS_AND_MANAGERS | String | 同上 |
| ✅ | グループに参加できるユーザー | whoCanJoin | ALL_IN_DOMAIN_CAN_JOIN | String | ANYONE_CAN_JOIN(外部を含む全員が参加できる)、CAN_REQUEST_TO_JOIN(組織内の全員が参加を申請できる)、ALL_IN_DOMAIN_CAN_JOIN(組織内の全員が参加できる)、INVITED_CAN_JOIN(招待されたユーザーのみ参加できる)のいずれかを指定します |
| ✅ | 組織外のメンバーの許可 | allowExternalMembers | false | Boolean | 組織外のメンバーの参加を許可するかどうかです |
表示名の73文字、説明の4,096文字という上限と、ラベルの許可値以外の入力について、YESODは事前にチェックしません。上限を超えた値や不正な値を設定すると、Google WorkspaceのAPI側でエラーになります。
オーナー(owners)の挙動
グループ作成タスクや属性同期を実行するたびに、グループのメンバーとロールが自動的に更新されます。ownersに指定したメールアドレスのユーザーだけがオーナー権限を持つ状態になります。
ownersに指定したユーザーの状態 | 挙動 |
|---|---|
| グループにメンバーとして含まれていない | メンバーとして追加し、オーナーロールを付与します |
| メンバーとして含まれているが、オーナー以外のロールである | オーナーロールに昇格させます |
| メンバーとして含まれており、既にオーナーロールである | 何もしません |
ownersに指定されていないが、オーナーとして含まれている | メンバーロールに降格させます |
このオーナーの昇格・降格は、割当付与タスク・割当剥奪タスクと無関係に、属性同期のたびに実行されます。そのため、権限セットの設定と一致しない挙動になる場合があります。
ownersに指定したユーザーを割当剥奪タスクでグループから削除しても、ownersの指定自体は残ります。次に属性同期を実行するとオーナーとして再度追加されます。このユーザーが権限セットの対象になっていない場合、棚卸しの画面では違反として検出されます- 権限セットの対象になっていて、かつ
ownersにも指定されているユーザーをownersから外すと、オーナー権限が外れてメンバーに降格します。権限セットの対象には含まれ続けるため、棚卸しの画面では違反として検出されます
ownersを設定するときは、権限セットによる割当と挙動が競合しないか事前に確認してください。不明な点は、カスタマーサクセス担当までお問い合わせください。
アクセス設定の設定範囲
アクセス設定に関する5つの項目には、それぞれ次のいずれかの範囲を設定します。範囲には包含関係があり、右にある値ほど広い範囲(左側の権限をすべて含む)になります。
| 項目 | 権限なし | オーナー | +管理者 | +メンバー | +組織全体 | +外部 |
|---|---|---|---|---|---|---|
オーナーに連絡できるユーザー(whoCanContactOwner) | 設定不可 | ALL_OWNERS_CAN_CONTACT | ALL_MANAGERS_CAN_CONTACT | ALL_MEMBERS_CAN_CONTACT | ALL_IN_DOMAIN_CAN_CONTACT | ANYONE_CAN_CONTACT |
会話を閲覧できるユーザー(whoCanViewGroup) | 設定不可 | ALL_OWNERS_CAN_VIEW | ALL_MANAGERS_CAN_VIEW | ALL_MEMBERS_CAN_VIEW | ALL_IN_DOMAIN_CAN_VIEW | ANYONE_CAN_VIEW |
投稿できるユーザー(whoCanPostMessage) | NONE_CAN_POST | ALL_OWNERS_CAN_POST | ALL_MANAGERS_CAN_POST | ALL_MEMBERS_CAN_POST | ALL_IN_DOMAIN_CAN_POST | ANYONE_CAN_POST |
メンバーを表示できるユーザー(whoCanViewMembership) | 設定不可 | ALL_OWNERS_CAN_VIEW | ALL_MANAGERS_CAN_VIEW | ALL_MEMBERS_CAN_VIEW | ALL_IN_DOMAIN_CAN_VIEW | 設定不可 |
メンバーの管理(whoCanModerateMembers) | 設定不可 | OWNERS_ONLY | OWNERS_AND_MANAGERS | ALL_MEMBERS | 設定不可 | 設定不可 |
例として、whoCanViewGroupにALL_IN_DOMAIN_CAN_VIEW(+組織全体)を指定します。この場合は、組織全体だけでなく、グループのメンバー・管理者・オーナーも閲覧できます。
すべての組み合わせを自由に設定できるわけではありません。少なくとも次の制約が確認されています。
whoCanViewMembershipには、whoCanModerateMembersと同じか、より広い範囲を設定してくださいwhoCanViewGroupにANYONE_CAN_VIEW(+外部)を指定する場合は、Google Workspace側の設定が必要です。管理コンソールで、組織外からのグループへのアクセスを許可してください
作成した直後の一時的なエラー
グループを作成した直後は、Google Workspace側での反映が完了していないことがあります。この状態でオーナーの設定や親子関係の反映などの操作をすると、一時的にエラーになることがあります。YESODは自動でリトライするため、通常は数分ほど待つと解消されます。
制限事項
Google OAuthの業務アセットは2種類のAPIを使って実装されており、それぞれ次のレート制限があります(2026年1月時点)。
| API | 制限 | 主な用途 |
|---|---|---|
| Directory API | 全体は1分あたり2,400回、アカウント作成は1秒あたり10回 | ユーザー・グループ・組織部門・ロールの取得/作成/更新/削除、グループ所属メンバーの取得/追加/削除 |
| Groups Settings API | 1日あたり100,000回 | グループのアクセス設定(公開範囲・投稿権限・メンバー参照など)の更新 |
対策として、Googleのベストプラクティスにならい、エラーが発生したときにバックオフによるリトライ処理を実装しています。レートリミットの上限によるエラーが発生した場合は、一定時間待機して再度実行します。
参考にするGoogleのドキュメントは次のとおりです。