メインコンテンツまでスキップ

Google OAuth

Google Workspaceを業務アセットとして接続すると、アカウント・グループ・ロール・組織部門をYESODから管理できます。「SaaS接続」画面に並ぶ接続先サービスの名前は「Google OAuth」です。

概要​

Google Workspace(旧称 G Suite)は、Googleが提供するクラウドベースの生産性向上とコラボレーションのツール群です。メール、カレンダー、ドキュメント、ドライブなどのサービスを含み、企業や組織向けに設計されています。

参照先URL
公式HPhttps://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接続」画面を開くまでの手順は、業務アセットを追加するを参照してください。

  1. 「SaaS接続」画面で「Google OAuth」のカードをクリックします。 「Google OAuth 接続」の画面が表示されます。

  2. 「ドメイン(任意)」を入力します。 管理対象のGoogle Workspaceのドメインを入力します。

  3. 「名寄せに使用する項目」を確認します。 何を照合するかはアカウントとメンバーの名寄せを参照してください。

  4. 「ログイン」をクリックします。 Googleのサインイン画面へ移ります。

  5. 特権管理者のロールを持つアカウントでサインインし、アクセスを許可します。 YESODの画面に戻り、完了の画面が表示されます。業務アセットが作られるのはこのときです。

許可しなかった場合や、アカウントの権限が足りない場合は、直前の「Google OAuth 接続」の画面に戻ります。業務アセットは作られません。

アカウントの作成​

同一のメールアドレスのアカウントがGoogle Workspaceに存在するかどうかに応じて、次のように動作します。

Google Workspaceの状態動作
同一のメールアドレスのアカウントが存在しないアカウントを新規作成します
同一のメールアドレスの有効なアカウントが存在するそのアカウントの情報を更新します
同一のメールアドレスの無効(停止)なアカウントが存在するそのアカウントを有効にして情報を更新します

パスワードの設定​

パスワードの設定に対応しています。アカウントの作成にはパスワードが必須です。パスワードの設定がない場合はエラーになります。

パスワードの決め方は、業務アセットの左のメニューの「アカウント設定」にある「初期パスワード」で設定します。

注意

API経由でアカウントを作成するため、招待メールもパスワードの通知メールも送信されません。管理者が別の方法でパスワードを利用者へ共有してください。

アカウントの削除​

Google Workspaceには、アカウントの削除・アーカイブ・停止(無効化)があります。業務アセット経由のアカウント削除で使われるのは、アーカイブと停止(無効化)の2つです。

どちらを実行するかは、業務アセットの左のメニューの「アカウント設定」を開き、「アカウント設定」タブの「アカウント削除タスクの実行方法」で選びます。選択肢は「アカウントを無効化」と「アカウントをアーカイブ」です。

Google OAuthの業務アセットの「アカウント設定」画面。「アカウント削除タスクの実行方法」で「アカウントをアーカイブ」が選択されている

この設定は、アカウント削除タスクが実行されるタイミングで参照されます。ステータスが「処理待ち」のタスクには、タスクを生成した時点ではなく、実行した時点の設定が適用されます。

割当種別​

割当種別名タイプ割当項目備考
グループ「複数のグループに所属させる」サービス管理画面で設定した値をインポートして表示します割当項目は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に依存します。

次のプロパティには対応していません。

  • posixAccounts
  • customShemas
必須属性名keyデフォルトの式型例備考
✅メインのメールアドレスuser.primaryEmail!String.isNullOrBlank(params.domain) ? String.substringBefore(user.email, "@") + "@" + params.domain : user.emailString-typeはwork固定。primaryはtrue固定
✅姓user.name.familyNameuser.familyNameLocalPreferredString--
✅名user.name.givenNameuser.givenNameLocalPreferredString--
✅ユーザーのパスワードuser.passwordYESODが作成したパスワードString--
-「次回ログイン時にユーザーにパスワードの変更を要求するかどうか」user.changePasswordAtNextLogintrueBoolean--
-サブメールアドレス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-Stringuser["<性別の項目ID>"] == "男" ? "male" : user["<性別の項目ID>"] == "女" ? "female" : user["<性別の項目ID>"] == "その他" ? "other" : nullmale、female、other、unknownのみ受け入れる
-姓と名の値を連結して形成されたユーザーのフルネームuser.name.fullName-String--
-ユーザーの表示名user.name.displayName-String-上限: 半角256文字(全角128文字)
-メンバーの外部IDuser.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--
-ユーザーのウェブサイトのURLuser.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(インスタントメッセンジャー)のネットワークIDuser.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--
-ビルディングIDuser.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グループのメールアドレス(主アドレス)。組織内で重複はできません。必須項目ですがデフォルト値はないため、必ず手動(属性式など)で値を設定してください
✅表示名namegroup.groupNameLocalStringグループの表示名。最大73文字です
-説明description-Stringグループの説明文。最大4,096文字です
-オーナーowners-String / String[]グループのオーナーをメールアドレスで指定します。Google Workspace上に存在しないメールアドレスでも指定できるため注意してください。指定したユーザーはオーナーとしてグループに強制的に追加されます
✅ラベルlabels["discussion_forum"]String[]グループの種類を識別するラベルです。discussion_forum(通常のGoogleグループ)またはsecurity(セキュリティグループ)を指定します。discussion_forumは必須で外せません。securityは一度付与すると外せません(外すような属性同期を実行するとエラーになります)
✅アクセス設定 - オーナーに連絡できるユーザーwhoCanContactOwnerANYONE_CAN_CONTACTString「アクセス設定の設定範囲」を参照してください
✅アクセス設定 - 会話を閲覧できるユーザーwhoCanViewGroupALL_IN_DOMAIN_CAN_VIEWString同上
✅アクセス設定 - 投稿できるユーザーwhoCanPostMessageALL_IN_DOMAIN_CAN_POSTString同上
✅アクセス設定 - メンバーを表示できるユーザーwhoCanViewMembershipALL_IN_DOMAIN_CAN_VIEWString同上
✅アクセス設定 - メンバーの管理whoCanModerateMembersOWNERS_AND_MANAGERSString同上
✅グループに参加できるユーザーwhoCanJoinALL_IN_DOMAIN_CAN_JOINStringANYONE_CAN_JOIN(外部を含む全員が参加できる)、CAN_REQUEST_TO_JOIN(組織内の全員が参加を申請できる)、ALL_IN_DOMAIN_CAN_JOIN(組織内の全員が参加できる)、INVITED_CAN_JOIN(招待されたユーザーのみ参加できる)のいずれかを指定します
✅組織外のメンバーの許可allowExternalMembersfalseBoolean組織外のメンバーの参加を許可するかどうかです

表示名の73文字、説明の4,096文字という上限と、ラベルの許可値以外の入力について、YESODは事前にチェックしません。上限を超えた値や不正な値を設定すると、Google WorkspaceのAPI側でエラーになります。

オーナー(owners)の挙動​

グループ作成タスクや属性同期を実行するたびに、グループのメンバーとロールが自動的に更新されます。ownersに指定したメールアドレスのユーザーだけがオーナー権限を持つ状態になります。

ownersに指定したユーザーの状態挙動
グループにメンバーとして含まれていないメンバーとして追加し、オーナーロールを付与します
メンバーとして含まれているが、オーナー以外のロールであるオーナーロールに昇格させます
メンバーとして含まれており、既にオーナーロールである何もしません
ownersに指定されていないが、オーナーとして含まれているメンバーロールに降格させます
注意

このオーナーの昇格・降格は、割当付与タスク・割当剥奪タスクと無関係に、属性同期のたびに実行されます。そのため、権限セットの設定と一致しない挙動になる場合があります。

  • ownersに指定したユーザーを割当剥奪タスクでグループから削除しても、ownersの指定自体は残ります。次に属性同期を実行するとオーナーとして再度追加されます。このユーザーが権限セットの対象になっていない場合、棚卸しの画面では違反として検出されます
  • 権限セットの対象になっていて、かつownersにも指定されているユーザーをownersから外すと、オーナー権限が外れてメンバーに降格します。権限セットの対象には含まれ続けるため、棚卸しの画面では違反として検出されます

ownersを設定するときは、権限セットによる割当と挙動が競合しないか事前に確認してください。不明な点は、カスタマーサクセス担当までお問い合わせください。

アクセス設定の設定範囲​

アクセス設定に関する5つの項目には、それぞれ次のいずれかの範囲を設定します。範囲には包含関係があり、右にある値ほど広い範囲(左側の権限をすべて含む)になります。

項目権限なしオーナー+管理者+メンバー+組織全体+外部
オーナーに連絡できるユーザー(whoCanContactOwner)設定不可ALL_OWNERS_CAN_CONTACTALL_MANAGERS_CAN_CONTACTALL_MEMBERS_CAN_CONTACTALL_IN_DOMAIN_CAN_CONTACTANYONE_CAN_CONTACT
会話を閲覧できるユーザー(whoCanViewGroup)設定不可ALL_OWNERS_CAN_VIEWALL_MANAGERS_CAN_VIEWALL_MEMBERS_CAN_VIEWALL_IN_DOMAIN_CAN_VIEWANYONE_CAN_VIEW
投稿できるユーザー(whoCanPostMessage)NONE_CAN_POSTALL_OWNERS_CAN_POSTALL_MANAGERS_CAN_POSTALL_MEMBERS_CAN_POSTALL_IN_DOMAIN_CAN_POSTANYONE_CAN_POST
メンバーを表示できるユーザー(whoCanViewMembership)設定不可ALL_OWNERS_CAN_VIEWALL_MANAGERS_CAN_VIEWALL_MEMBERS_CAN_VIEWALL_IN_DOMAIN_CAN_VIEW設定不可
メンバーの管理(whoCanModerateMembers)設定不可OWNERS_ONLYOWNERS_AND_MANAGERSALL_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 API1日あたり100,000回グループのアクセス設定(公開範囲・投稿権限・メンバー参照など)の更新

対策として、Googleのベストプラクティスにならい、エラーが発生したときにバックオフによるリトライ処理を実装しています。レートリミットの上限によるエラーが発生した場合は、一定時間待機して再度実行します。

参考にするGoogleのドキュメントは次のとおりです。

関連ページ​