備忘録　－　Active DirectoryとG Suiteでユーザーアカウントを同期させたときのお話

例によって自分用備忘録です。
というか半年くらい前にやったことなので思い出しながらです。
お仕事で構築していたのでキャプチャはない。(断言)

**なお、ADドメインとG Suiteに登録したドメインが違う場合でも同期可能**(しゅごい)

##できること
・AD　→　G Suiteへの、アカウント情報の一方向同期
　G Suite　→　ADは不可。
・AD　→　G Suiteへのパスワード一方向同期
　アカウント情報と同じく、G Suite　→　ADは不可。

ADからG Suiteへ一方的にデータを投げつけるだけなので、AD側のFirewallでインバウンドを全部拒否してても使えます。

#前提準備
・Active Directoryを構築しておく。
・G Suiteに登録しておく。
・Windows側でドメイン全体の読み取りが可能なアカウントを用意
　許されるのであればAdministratorでも可。
　なお、どちらにせよドメイン管理者のアカウントは必要。
・ユーザーのメールアドレスを登録しておく。
・G Suite側の特権管理者アカウント
　個人が特権管理者になっている場合は、新たに特権管理者を作成することを推奨。

##環境
###Windows Server
2012R2を使用。が、後述するGoogleのソフトウェア要件に記載されているものであればよいと想定。2016使いたかった.....

###使うソフトウェア
Google神が提供してくれているので、使えるものは使う。
___
◆ユーザーID同期：Google Cloud Directory Sync（以下GCDS）
◆パスワード同期：G Suite Password Sync（以下GSPS）

###システム要件
ヘルプページで公開されている。Windows側には特に要件はないので、確認すべきはGoogleのソフトウェアの要件だけ。
Windows Server自体の最小要件はあるが割愛。

[GCDS要件のGoogleヘルプページ](https://support.google.com/a/answer/6123896)
[GSPS要件のGoogleヘルプページ](https://support.google.com/a/answer/2611859?hl=ja)

今はGCDSの要件に2016がある。
私が構築をしたとき(2017夏頃)にはなかったので、ここ半年で追加されたものと想定。くやしい。

#手順
##ドメインコントローラーにGCDSをインストール
インストーラーをダウンロードして、よくあるセットアップ画面で適当にデフォルトで進める。
当時はドメコンにインストールしたが、GCDSがドメインの情報を見れればいいので、べつにドメコンじゃなくてもいい。

なお、ドメコンは冗長構成をしている場合がほとんどだが、インストールするのはどれか1台。
ユーザーIDの同期はコマンドを叩かないと実行できないので、batファイルを作成してタスクスケジューラーを仕込めばよいため。

また、複数台のドメコンをG Suiteとの同期対象に指定することはできない。

##GCDSの設定
「Configuration Manager」というアプリケーションが追加されるので、ソイツを起動する。
___
◆Google Domain Configurationメニュー
以下のようにパラメーターをぶっ込む。
```Primary Domain Name：G Suiteに登録したドメイン名を入力
Alternative email domain：ADユーザーのメールアドレスのドメインを入力```

「Authorize Now」をクリックするとポップアップが開くので、「Sign-In」をクリック。
ブラウザが起動するのでG Suiteの特権管理者アカウントでログイン。
「このアプリケーションが～～」のページが表示されるので「許可」をクリック。
表示される認証コードをConfiguration Managerのポップアップの入力ボックスにコピペし、Validateをクリック。

◆LDAP Configurationメニュー
以下のようにパラメーターをぶっ込む。
```Server Type：MS Active Directory
Connection Type：Standard LDAP
Hostname：127.0.0.1
port：389
Authentication Type：Simple
Authentication User：ドメイン全体の読み取りが可能なユーザー
Password：上記ユーザーのパスワード
Base DN：よしなに```
「Test Connection」ボタンをクリックし、Configuration ManagerからLDAPに接続して情報の読み取りができることをテスト。
ここがコケると後述の作業は不可。
※LDAPSの場合は636ポート(だっけ？)を指定

◆General Settingメニュー
User Accountのみチェック
他の組織情報とかも、必要に応じて同期対象を指定。
当時はユーザーアカウント情報を同期しただけだったので他は知らない。

◆－User Accountメニュー
以下のようにパラメーターry
User Attributeタブ		
```Unique identifier Attribute：objectGUID
Google Domain Users Deletion / Suspension Policy```
**一番下のラジオボタンをクリックし、直下のチェックボックスはそのまま**
※設定ミスって同期するとADにはいないけどG Suiteにはいるユーザーが消える。

Additional User Accountタブ
```Given Name Attribute(s)：givenName
Family Name Attribute(s)：sn```
Search Ruleタブ
```Use defaultsをクリック```
___
ここまでやってSyncメニューにエラーが出ていなければ、
下のほうにあるボタンがアクティブになり同期可能な状態になるので、
「Sync & apply changes」をクリックするとADからG Suiteへアカウント同期が走る。
横の「Simulate Sync」をクリックすると、同期した場合の結果がどうなるかを教えてくれる。

※NotificationタブからGCDS自体の通知設定ができるが、2段階認証を有効にしているドメインではGmailを送信先に指定できず。
クソかよ。

##ドメインコントローラーにGSPSをインストール
**全てのドメコンに**GSPSをインストールする。
GSPSは、AD側でパスワード変更があった場合にG SuiteへTrapでパスワードを送信するため。
それ以外にパスワードを知れるタイミングがなく、どのドメコンでパスワード変更やリセットが発生するかわからないので、全台に入れるしかない。

インストーラーを起動したら、例によってデフォルトのままインストールを完了させる。
※再起動が必要。

##G Suite Password Syncの設定
「G Suite Password Sync」のアプリケーションが追加されるので、ソイツを起動する。
初回の設定のみを実施すれば、あとはいじることない。
___
◆設定の手順
最初の画面で「次へ」
以下のようにパラメータry

「G Suite Configuretion」項目
```G Suite Domain：そのままG Suiteに登録したドメインを入力
Admin Email Address：G Suiteの特権管理者アカウント情報を入力
Authentication：「3-legged OAuth」を選択```
「Authorize Now」をクリック。
ポップアップが表示されたらContinue　→　許可
設定画面に戻り、「次へ」
「Active Directory Configuration」項目
```Authorization access method：「User Credentials」を選択
Authorize User：ドメイン管理者アカウント
Password：管理者のパスワード
Base DN：よしなに
Mail Attribute：mail```
「次へ」

で、問題なければ完了。
今回はG Suiteの特権管理者を使ったが、他の方法はあるっぽい。
GCP使わされそうになった気がしたので特権管理者を使用。

##事後作業
ドメインに参加しているユーザーに、パスワード変更をしてもらいます。
上述の通り、パスワードは変更したその瞬間ではないとドメイン管理者といえど確認ができないから同期できないため。

AD側で「次回ログイン時にパスワード変更」って指定すればスッキリ。