M365 から Google Workspace への移行後に発生する GCDS(Google Cloud Directory Sync)や Cloud Identity Secure LDAP サービスの同期エラーは、設定手順の確認だけでは原因を特定しにくいケースが多くあります。この記事では Cloud Identity LDAP 同期エラーの症状ごとに原因カテゴリと対処の方向性を整理します。
この記事を読んだほうが良い人
- M365(Active Directory)から Google Workspace / Cloud Identity へ移行済みで、GCDS による LDAP 同期設定を完了したが特定の症状が出ている情シス担当者
- Secure LDAP サービスの設定後、バインドエラーや検索エラーが止まらない状況で原因を探している方
- 特定の OU(組織単位)のユーザーだけ Cloud Identity に現れない、またはカスタム属性が空のまま残る問題に直面している方
- Secure LDAP ログの読み方を整理したい方
Cloud Identity LDAP同期の2つの仕組みを整理する
まず用語を整理しておきます。Cloud Identity の文脈で「LDAP 同期」と呼ばれる仕組みは2種類あり、混同が原因でトラブルシューティングが迷走することがあります。
| 仕組み | 役割 | 主な対象 |
|---|---|---|
| GCDS | AD / LDAP から Cloud Identity へユーザー・グループ・OU を同期 | M365→GWS 移行時のユーザー移行、定期同期 |
| Secure LDAP サービス | Cloud Identity を LDAP サーバーとして外部クライアントに公開 | LDAP 認証を使うレガシーアプリ、ネットワーク機器 |
どちらが問題かを素早く見分けるには、エラーが出るタイミングに注目するのが有効です。GCDS のエラーは定期同期の実行時ログに現れます。Secure LDAP のエラーは外部 LDAP クライアントが接続するたびにリアルタイムで発生し、管理コンソールのレポートセクションに蓄積されます。「ユーザー数が足りない」は GCDS 起因、「アプリが認証を通らない」は Secure LDAP 起因と、症状の性質でも大まかに区別できます。
症状×原因×対処の対照表
| 症状 | 主な原因 | 対処の方向性 |
|---|---|---|
| 特定 OU のユーザーが Cloud Identity に現れない | 検索クエリが対象 OU をカバーしていない / OU マッピング未設定 | GCDS の検索クエリと OU マッピング設定を見直す |
| OU 内の一部ユーザーだけ同期されない | 除外ルールが広すぎる / ネストグループの扱い不備 | 除外ルールとクエリのスコープを調整する |
| カスタム属性が同期後も空のまま | 属性の読み取り権限なし / Global Catalog に複製されていない | AD 側の権限と Global Catalog レプリケーション設定を確認する |
GCDS ログに Invalid OU が出る |
Cloud Identity 側に対応 OU が存在しない | Cloud Identity の管理コンソールで OU を先に作成して再同期する |
| Secure LDAP バインドエラー(結果コード 50) | クライアント未有効化 / ライセンス未割り当て / 利用権なし | Secure LDAP クライアント設定とライセンスを確認する |
| Secure LDAP 検索でユーザーが返らない(結果コード 32) | 指定した DN(Distinguished Name: ディレクトリ内のオブジェクトを一意に識別するパス文字列)が Cloud Identity に存在しない | OU 名・ユーザー名の DN 表記と Cloud Identity の実体が一致しているか確認する |
| バインドは通るがクエリが毎回失敗する | LDAP フィルターの構文エラー | フィルター文字列の括弧数を確認する |
GCDS ログに大量の 409: Entity already exists |
検索クエリが既存 Google ユーザーと重複 | 除外ルールを絞り込む |
症状別チェックリスト
チェックリスト A:特定OUのユーザーが同期されない
- [ ] GCDS のユーザー検索クエリが対象 OU の DN を含んでいるか
- Base DN が組織最上位でも
scope=subtreeでなければ下位 OU が対象外になる - [ ] GCDS のOU マッピング設定に当該 OU が含まれているか
- AD の
OU=Sales,DC=example,DC=comを Cloud Identity のどの OU に対応させるか、明示的な設定が必要 - [ ] Cloud Identity 側に対応する OU が存在するか
- GCDS は Cloud Identity に存在しない OU へのユーザー割り当てを試みると
Invalid OUエラーでスキップする - [ ] GCDS の除外ルールが広すぎないか
- 「特定条件に当てはまる Google ユーザーは削除しない」という除外ルールが、意図せず同期対象ユーザーを飛ばすことがある
- [ ] 本番同期の前に GCDS のシミュレーションモードで変更対象を確認したか
- GCDS は実際に変更を加えずに「どのユーザーが追加・変更・削除されるか」を事前確認できる。本番実行前の確認を習慣化することで、意図しない大量削除や同期漏れを事前に検出できる
OU マッピング対応イメージ
# Active Directory 側
DC=example,DC=com
└─ OU=Japan
├─ OU=Sales ← Cloud Identity の /Sales に同期したい
└─ OU=Engineering ← Cloud Identity の /Engineering に同期したい
# Cloud Identity 側(同期前に手動作成が必要)
/ (ルート OU)
├─ Sales ← AD の OU=Sales,OU=Japan,DC=example,DC=com に対応
└─ Engineering ← AD の OU=Engineering,OU=Japan,DC=example,DC=com に対応
GCDS は Cloud Identity の OU を自動作成しません。AD の OU 構造を Cloud Identity 側に先に反映してから同期を実行する必要があります。OU の命名規則が AD 側と Cloud Identity 側で食い違うと、マッピングが機能しないまま同期が空振りになるため、命名の統一もあわせて確認します。
チェックリスト B:カスタム属性が同期後も空のまま
- [ ] GCDS で LDAP 接続に使用しているサービスアカウントが当該属性の読み取り権限を持っているか
- 権限がないと GCDS は属性値を取得できず空値を書き込む
- [ ] AD の Global Catalog(Active Directory が全ドメインの属性を横断検索可能にするインデックスレプリカ)にカスタム属性が複製されているか
- Global Catalog に含まれていない属性は、GCDS が Global Catalog 経由で検索した場合に取得されない
- [ ] GCDS のスキーママッピング設定で AD 属性名と Cloud Identity カスタムフィールド名が正確に一致しているか
- スペルミス・大文字小文字の違いで値が渡されないことがある
- [ ] Cloud Identity 側にカスタムスキーマが事前作成されているか
- スキーマが存在しない状態で同期しても値は格納されない
チェックリスト C:Secure LDAPサービスのバインドエラー
- [ ] 結果コード 50(INSUFFICIENT_ACCESS_RIGHTS) が返っていないか
- Cloud Identity の管理コンソールで当該 LDAP クライアントが有効化されているか確認する
- 対象ユーザーに Secure LDAP の利用権とライセンスが付与されているか確認する
- [ ] 結果コード 48(INAPPROPRIATE_AUTHENTICATION) が返っていないか
- クライアント証明書が有効期限切れ、または形式が不正
- 管理コンソールから証明書を再発行し、LDAP クライアント側に再設定する
- 複数のクライアントを運用している場合、有効期限の一覧管理を別途行うことを推奨する
- [ ] バインドの QPS がクォータを超えていないか
- Secure LDAP サービスのバインドクォータは 4 QPS(1秒あたりのリクエスト数。顧客全体の共有値)。これは Google 公式仕様に明記されている
- 結果コード 11(ADMIN_LIMIT_EXCEEDED)がログに出ていればリクエスト頻度を下げる
- 認証要求が始業直後などの特定時間帯に集中する場合は、LDAP クライアント側でリトライ間隔を広げることを検討する
チェックリスト D:Secure LDAP で検索結果が返らない
- [ ] 結果コード 32(NO_SUCH_OBJECT) が返っていないか
- 検索の Base DN に指定した OU が Cloud Identity に存在しない可能性がある
- [ ] LDAP フィルターの括弧が対応しているか
(&(objectClass=user)(sAMAccountName=*))のような構文で括弧の開閉数を確認する- 1 つでもズレていると
PROTOCOL_ERROR (2)またはクエリ全体の失敗につながる - [ ] Cloud Identity が返すオブジェクトクラス名を LDAP クライアントが正しく認識しているか
- Secure LDAP サービスがサポートするオブジェクトクラスはオンプレ AD と一部異なる。クライアント側のオブジェクトクラス名の調整が必要な場合がある
GCDS削除しきい値の安全装置を理解する
実際の現場でトラブルシューティングを難しくする要因のひとつに、GCDS の削除しきい値(Deletion Limit)があります。
GCDS にはデフォルトで「一度の同期で削除されるアカウント数が設定値を超えると処理を止める」という安全装置が組み込まれています。大規模なミス(検索クエリの誤りで全ユーザーが同期対象外になるなど)による意図しない一括削除を防ぐための仕組みです。
この安全装置が発動すると、GCDS のログに Deletion limit exceeded が出力され、同期が途中で止まります。「追加したはずのユーザーが出てこない」という状態として現れることがあります。
対処としては、まず削除対象が意図通りかをシミュレーションモードで確認します。意図した削除であれば GCDS の設定から削除しきい値を引き上げるか、一時的に無効化して再同期を実行します。しきい値の調整は慎重に行い、本番実行の前後でユーザー数の変化をログで追跡することを推奨します。
Secure LDAP トラブルシューティングに使うログの読み方
診断に使えるログは2種類あります。どちらも「エラーコードを確認してから対照表と照合する」という手順が基本です。
GCDS のトレースログ
GCDS の Configuration Manager からトレースログを取得できます。Google が提供する公式のログ解析ツール(Google Admin Toolbox の Log Analyzer)にトレースログを投入すると、エラーの種類と推奨アクションが自動抽出されます。
ログ中に出やすいキーワードを以下に示します。
Invalid OU → Cloud Identity に存在しない OU へのマッピング
409: Entity already exists → 重複ユーザーの扱い問題
Deletion limit exceeded → 削除しきい値超過(大量削除の安全装置)
Skipping unknown member → グループメンバーが検索対象外
ログ量が多い場合は、エラー行のみを抽出して確認するとスコープを絞りやすくなります。エラーの種類ごとにまとめて集計すると「全体の何割が Invalid OU 起因か」という傾向が把握でき、修正の優先順位を判断しやすくなります。
Secure LDAP の監査ログ
管理コンソールのレポートセクション(監査と調査)から Secure LDAP ログイベントにアクセスできます(Google 公式ヘルプより)。ログには以下の主要フィールドが含まれます。
Event : Bind Failed / Search Failed など操作の種類と結果
Result Code : エラーコード(0 以外が異常)
Application : どの LDAP クライアントがリクエストしたか
Filter : 検索フィルター(LDAP フィルター構文)
Attributes : 取得対象の属性リスト
Scope : 検索スコープ(Base / One Level / Subtree)
Actor/IP : リクエスト元ユーザーと IP アドレス
Result Code が 0 以外の行を絞り込み、上記の対照表と照合するのが最短ルートです。エラーが特定の時間帯に集中するパターンであれば QPS クォータ超過、常時発生するパターンであればクライアント設定や権限の問題である可能性が高くなります。
自己診断の進め方
症状が複数ある場合、以下の順で切り分けるのが効率的です。
- Secure LDAP ログまたは GCDS トレースログを確認し、エラーコードを特定する
- エラーコードをもとに症状×原因の対照表で原因カテゴリを特定する
- 該当カテゴリのチェックリストに従って設定を確認する
- 修正後は GCDS のキャッシュをクリアしてから同期を再実行する(GCDS のキャッシュは最大 8 日間保持されるため、クリアなしで再実行しても古いデータが残ることがある。GCDS 公式仕様として文書化されている)
- 解消しない場合は Log Analyzer のレポートを保存して Google サポートへ提出する
複数のエラーコードが混在するケースでは、権限不足(結果コード 50)が根本原因になっていることが多いです。Secure LDAP クライアントの有効化とライセンス割り当てを最初に確認すると、その後の切り分けがスムーズに進みます。また「修正してみたが改善しない」という場合はキャッシュの影響を疑います。GCDS のキャッシュが残っていると、設定を修正してもすぐに変化が出ないことがあります。
まとめ
Cloud Identity LDAP 同期エラーの大半は、次の4類型に集約されます。
- OU マッピングの漏れ:Cloud Identity 側の OU が未作成のまま同期を実行している
- 属性読み取り権限の不足:GCDS サービスアカウントに AD カスタム属性の読み取り権限がない
- フィルター構文ミス:LDAP フィルターの括弧ズレや Base DN の誤指定
- Secure LDAP クライアントの有効化漏れ:クライアント設定またはライセンス割り当てが未完了
設定手順(ハッピーパス)の記事は多くあります。しかしエラーが出てからの診断は、ログの読み方を知らないと原因を絞り込めず長引きがちです。
エラー対応で時間を取られるより、移行設計の段階で OU 構造・スキーマ定義・同期ルールの3点セットを整理しておくほうが、運用コストは大幅に下がります。特に OU 設計は後からの変更が連鎖的な修正を引き起こすため、移行前に確定させることが実務上重要です。DRASENAS の M365→GWS 移行支援では、こうした設計フェーズからの伴走が可能です。詳細は DRASENAS 公式サイト からご確認ください。
コーポレートITのご相談はお気軽に
この記事で書いたような業務改善・自動化の設計から実装まで、DRASENASではコーポレートITの現場に寄り添った支援を行っています。 「まず相談だけ」でも大歓迎です。DRASENAS 公式サイトからお気軽にどうぞ。
御社の IT 部門、ここにあります。
「ITのことはあまりわからない」── そのような状態からで、まったく問題ございません。まずはお気軽にご相談ください。