Google Cloud Directory Syncを使ってOpenLDAPから同期させる
オンプレミスのActive DirectoryやOpenLDAPのディレクトリと、Google Workspaceのディレクトリを同期させて、ユーザアカウントを自動で作成したりプロファイル情報を自動で反映するための仕組みがGoogle Cloud Directory Sync(GCDS)です。今回これをテストしてみようと思いましたが、現状の自分の環境ではActive Directoryを用意できないので、LinuxのOpenLDAPで代用して検証しています。
果たして、ローカルLDAPから自動でGWS側に同期できるのか?
今回利用するアプリやサービス
VMware Fusionの仮想環境内にUbuntu 22.04 LTSを構築し、OpenLDAPを構築しています。そこへ、Linux版Google Cloud Directory Syncをインストールしてユーザの同期を図るのが今回の目的です。
※但し、M1 MacのParallels上でARM版のUbuntuでテストしてみたところ、Linux版Google Cloud Directory Syncは「exec format error」というメッセージとともにエラーがでてインストーラが起動できず動きませんでした。
※2024年9月10日、GCDSが管理対象外アカウントの処理フローに対応しました。プロビジョニング時に競合アカウントを検出して、GWSの設定に従って処理をしてくれます。2024/9/5リリースのVersion 5.0.37から対応しています。
事前準備
OpenLDAP環境を構築する
このエントリーでは詳細な構築方法についてはスキップします。今回の検証環境では以下のような設定となっています。環境構築については、こちらのサイトや、GUI操作アプリケーションの導入についてはこちらのサイトが大変参考になりました。
- OU(組織部門)はPeopleで作成しています。
- ドメインはofficeforest.orgとしてセットしています。
- ユーザを2人だけ追加して、officeforest.orgとしてのメアドを登録してあります。
また、GWS側に同期させる為に新規にsyncuserという組織部門を作成しておきました。
図:こんな感じで構築済みです
SMTPリレーサービスを用意する
GCDSでは同期のレポートを送るためにSMTP送信の設定があり、必ずセットしなければなりません。その為のSMTPサーバ設定を用意する必要がありますが、Google Workspace側にSMTPリレーサービスがありますのでこちらを利用してセットします。
- 管理コンソールへログインする
- 左サイドバーから、アプリ⇒Google Workspace⇒Gmailを開きます。
- ルーティングを開きます。
- 下の方にSMTPリレーサービスがあるのでルールを追加をクリック
- SMTPリレーサービスを適用する組織部門を指定する(今回は特権管理者が所属してる組織部門)
- 適当な名前、許可する送信者はドメイン内のアドレスのみ、認証はSMTP認証を必須とするにチェック、TLS による暗号化を必須とするにもチェックをいれて、保存をクリック
- 現在のGoogle WorkspaceはSMTP送信でユーザパスワードを使う「安全性の低いアプリ」は廃止されてるため、アプリパスワードを発行する必要性があります。
- 特権管理者のアカウントにて、マイ・アカウントにアクセスする
- 左サイドからセキュリティをクリックする
- 二段階認証プロセスをクリックする
- 一番下のほうにアプリパスワードがあるのでクリックする
- アプリ名を入れて作成をクリックする
- 出てきた文字列を控えておく
これで、レポート送信用のSMTPサーバー設定を用意できました。
図:SMTPリレーサービス設定
図:アプリパスワードで対応する
注意点
Google Cloud Directory Syncはユーザやプロファイル、グループなどの同期が可能ですが、パスワードについては同期が単体で出来ません。また、Active Directoryの場合は、クライアント端末にPassword Syncを入れることで変更時にGWSにパスワード同期を図ることが可能です。ですが、LinuxのLDAPの場合その手段がないため、パスワード同期については行っていません。
また、GCDSはAzure Entra IDには対応していないので、そちらを利用する場合は以下のエントリーのEntra IDと同期する手法 + SSOログインで同期環境を構築すると良いでしょう(SSOなのでパスワード同期不要)。
GCDSのインストールとセットアップ
OpenJDKのインストールが必要
インストーラであるshファイルをダウンロードしてインストール実行したら、Javaのエラーが発生。システム要件にはそのような記載が無いのですが、OpenJDKをインストールすることにしました。
- ターミナルを起動する
- 以下のようなコマンドでOpenJDKをインストールする
12sudo apt updatesudo apt install default-jre - インストールが完了したら、コマンドにてjava -versionで入ってることを確認する
図:GCDSのインストールにJDKが必要
アプリ本体のインストール
以下の手順でターミナルからインストーラを起動してGCDS本体をインストールします。
- インストーラのページに行き、Downloadをクリックする
- Linux 64bitを選択します(dirsync-linux64.shがダウンロードされる)
- ホームディレクトリ直下に2.のファイルを配置する
- ターミナルを起動する
- 以下のコマンドを実行するとJavaで作られたインストーラが起動する
12chmod 777 ./dirsync-linux64.shsudo ./dirsync-linux64.sh - あとはインストーラの指示に従ってインストールを完了させる
図:GCDSのインストーラ
GCDSの設定
インストールが完了したら、Ubuntuのアプリ一覧を見ると「Configuration Manager」というアプリが登録されているのでクリックして起動する。ここからGoogle Workspace側への認証や同期する項目などをセットアップしていきます。Google側に用意されてるマニュアルはこちらにあります。
Google Domain Configuration
ここではGoogle Workspace側と連結するための認証作業を行います。
- Primary Domain NameにGWSで使ってるドメイン名を入れます。
- Authorize NowをクリックするとGoogleログイン画面が出てくるのでログインする。
- 次に様々な認証を要求してくるので許可します。
- ブラウザが閉じて、GCDS側はAuthorizedに変化し完了します。
同じセクションにある「Exclusion Rules」は除外ルールを設定し、Google Workspace上には存在するけれどLDAP上に存在しないユーザがいた場合、削除しないようにルールを設定することが可能ですが、今回はとりあえずスルーします。メアドでマッチしたものが除外といったような処理になります。
図:認証をまずはしなければならない
図:様々なスコープを要求してくる
LDAP Configuration
ここではLDAPサーバと接続する設定を作ります。
- Server TypeはOpen LDAPを選択
- Connection TypeはStandard LDAPを選択
- Host Nameはlocalhostを指定、Portはデフォルトの389のままでオッケー
- 今回特に何もLDAPサーバ側は設定も何も複雑なことはしていないので、Authentication TypeはAnonymousで指定(Simpleでadminで入ろうとしてもNGだったので飛ばしました)
- Base DNは空でも良いのですが、自分は「ou=People,dc=officeforest,dc=org」で一応入れておきました。
- Test ConnectionをクリックしてConnection Successedと出たらオッケー
図:LDAP接続設定を作る
General Settings
ここは、LDAP⇒GWSへ何を同期させるのか?を管理する項目です。組織部門、ユーザアカウント、ユーザプロファイルのみを今回指定。他にグループや共有連絡先、カレンダーなども同期が可能のようです。
チェックをいれると左サイドバーにその分だけ設定項目が登場します。なお、共有連絡先は管理コンソール上からは見えないので、編集したい場合はAPIなどから編集するしか手段がありません。
図:同期する項目を選択します
OrgUnits
組織部門を同期するよう指定したので、次にOrgUnitsをクリックしてLDAP側の組織部門とGWS側の組織部門をここで指定します。
- Don't Delete Google Organization not found in LDAPのチェックを入れる。LDAP側に見つからない組織部門をGWS側で削除させないためのオプションです。
- Add Mappingをクリックする
- LDAP(DN)は今回、Peopleという組織部門しか作っていないのでそれを入れる
- (Google Domain) Nameには、GWS側の組織部門名をいれる(今回はあらかじめ、syncuserという組織部門を作っておいたのでそれを指定)
- OKをクリックすると設定が入る。
- 複数部門を指定したい場合、同じ数だけ設定をマッピングで追加しておく
- 次にSearch Rulesをクリックする
- use defaultsをクリックする
- 追加されるので右側にある編集ボタンをクリックする
- Test LDAP Queryをクリックして、Received 1 Resultと出たら成功(Peopleの1個しか無いので)
- OKをクリックして閉じる
これでLDAP側で組織部門がありユーザが追加された場合、反映先の組織部門にユーザを追加してくれます。組織部門がなければ新規に作成してくれる。
図:同期させたい組織部門同士を紐つける
User Accounts
User Accountsでは何を基準に同期するか?を指定する場所です。
- Use Defaultsをクリックしてデフォルト設定をいれる
- 下の方にあるGoogle Domain User Deletion/Suspention Policyは同期時にGWS側にしかいないユーザがいた場合削除や停止をするかどうかの設定ですが、今回は削除も停止もしないようDon't Suspend or Delete Google domain users not found in LDAPをクリック
- Don't Suspend or delete Google domain super admins not found in LDAPは2.に於いて、特権管理者は削除しないための設定なので必ずチェック入れておきます。
- Additional User Attributesタブをクリックする
- Given Name Attributesには「givenName」を入力(名に該当するプロパティ名)
- Family Name Attributesには、「sn」を入力(姓に該当するプロパティ名)
- User Password Syncは現状利用しないというかこれでパスワードが常に同期できるわけでもないので、Only for New usersを選択
- Search Rulesをクリックする
- Use Defaultsをクリックする
- 入力されたレコードをダブルクリックする
- Rule欄の値を「(mail=*)」だけに変更する
- Test LDAP Queryをクリックして、Received 2 Resultsと出たらオッケー(今回は2名だけLDAPに登録してるので)
- OKをクリックして設定を反映する
図:同期でとっても大切なオプション
User Profiles
前述の項目で姓名に関しては同期が出来ています。が、他のLDAPプロパティ(電話番号や部署名等)については、こちらで紐付け項目を指定してあげることで、同期を実行したときにGWS側のプロパティにも同期されるようになります。
- Use Defaultsをクリックして基本的な内容を入力する
- Search Rulesをクリックする
- Use Defaultsをクリックする
- 入力されたレコードをダブルクリックする
- Rule欄の値を「mail=*」だけに変更する
- Test LDAP Queryをクリックして、Received 2 Resultsと出たらオッケー(今回は2名だけLDAPに登録してるので)
- OKをクリックして設定を反映する
ちなみに、LDAP Account Managerでは、対象のプロファイルのプロパティ名は、ユーザ編集画面の各項目の「?」にカーソルを乗せると表示してくれるので、これを参考に入れていきます。
図:様々なプロファイル情報を同期
図:アカウントマネージャでプロパティ名を調べる
Notifications
ここは同期をした結果のレポートを通知する設定を行う場所です。事前準備で作っておいたSMTPリレーの情報を入力して、同期実行の結果をメールで通知してくれるもので、必ず設定しなければならない項目になっています。
- SMTP Relay Hostには「smtp-relay.gmail.com」を指定する
- Use SMTP with TLSにチェックを入れる
- User Nameには特権管理者のメールアドレスを入力する
- Passwordには作成したアプリパスワードを入力する
- From Addressは、3.と同様でオッケー
- To Addressも3.同様でオッケー。入れてAddを押せば良い。
- Do not include in Notificationsでは、通知に含めない内容を選べますが今回は特に指定せず
- Test Notificationをクリックして自分自身に届けばオッケーです。
図:通知設定は必須項目です
同期の実行
手動で同期を実行
ここまで来たらまずは、メニューからFile => Save Asで今回の設定を保存しておきます。xml形式のファイルでホームディレクトリ以下に保存されます。次に、Syncを開いてビックリマークやバツがついてる項目があればクリックして修正が必要です。これが1つもない状態にしてから以下の作業を行います。
- Syncを開いて、Simulate Syncをクリックします。
- シミュレーション結果を見て、組織部門が作られたり、ユーザが作成されたといったようなデータが出てくればオッケー。
- 最後に、問題なければSync & apply changesをクリックする
- 「はい」をクリックする
- 同期実行が実際に行われて、GWS側の管理コンソールで組織部門が作られたり、ユーザが作成されたり、ユーザプロファイルが同期されてることを確認します。
※なぜかGCDSはSaveで上書き保存したつもりでも上書きされず同一ファイル名に日付の加わった別のファイルとして保存されるので要注意です。Save Asで明示的に保存を指定したほうがよさそう。
図:シミュレーション結果
同期の自動化
問題は毎回これを手動で行うというのは非生産的です。また、GCDS自身には自動同期の仕組みがありません。前述の段階で設定ファをxmlで保存してるので、これを利用してコマンドラインから実行することが可能であるため、以下のような手段で定期実行するように仕掛けます。
- コマンドラインは「sync-cmd -c /home/username/gcdsset.xml」といった形にします(gcdsset.xmlが保存したファイル名)
- CrontabやGnomeスケジューラ、kCronといったソフトウェアに定期的に実行するスケジューラ予約を登録します。
- あとは、スケジューラが勝手に定期的な間隔で実行してくれるので、サーバ起動時にcronが自動起動してることだけ確かめます。
ちなみにsync-cmdを叩いても見つからない場合は、「/usr/local/GoogleCloudDirSync」というディレクトリ内にコマンドが存在するのでフルパスで実行するか?ここにパスを通しておきましょう。
図:sync-cmdの場所
図:スケジューラで自動実行予約
関連リンク
- Password Sync の仕組み
- 設定マネージャーのオプションに関する詳細情報
- SMTP リレーで送信するメールを Google 経由にルーティングする
- LDAP|Ubuntu 22.04サーバー構築入門
- Synology の LDAP Server を Google Cloud Directory Sync 経由で Google Workspace と同期する方法は?
- Google Cloud Directory Sync(GCDS)でActive DirectoryとG Suiteを同期させたお話
- G Suite で SMTP Relay を使う
- 【Linux】 GUIによるOpenLDAPユーザ管理方法(LDAP Account Manager)
- OpenLDAP - Start Stop Restart OpenLDAP on Linux
- アプリ パスワードでログインする
- Ubuntu 20.04にAptを使用してJavaをインストールする方法
- 【Ubuntu 20.04】ホーム内のディレクトリ名を英語にする
- Ubuntu で特定のフォルダーに PATH を通す方法