ファイル共有サービスの Dropbox(https://www.dropbox.com/ja/) は、SAML 2.0 認証をサポートしているので、Windows Server の AD FS を使用して、AD 認証をすることができます。
今回は Windows Server 2012 R2 を使った Dropbox の AD 認証を構築します。
(Windows Server 2008 R2 の場合、OS 標準の AD FS は使えないので、別途 AD FS 2.0 と Rollup 3 適用をする必要がありまので、末尾の参考情報を参照してください)
画面キャプチャ数が多いのでインデックスつけておきます。
迷子になったらここに戻ってください mm
2.1 サービスアカウントの作成
2.2
プライマリ AD FS のインストールと初期構築
2.3 セカンダリ AD FS のインストールと初期構築
3.1 Dropbox 用 AD FS 設定
3.2 Dropbox 側の SAML 設定
5.1.1 トークン証明書の有効期限延長
5.1.2 有効期限を延長したトークン証明書の生成
5.1.3
登録した証明書をプライマリにする
5.2.1 更新用 SSL 証明書の取得とインポート
5.2.2 SSL 証明書にアクセス権限を付与
5.2.3 AD FS
のサービス通信証明書へ SSL 証明書を設定
5.2.4 AD FS の SSL 証明書を更新
5.2.5 トークン証明書を更新する
6 Dropbox と AD FS の SAML 2.0 認証動作解説
Dropbox に限らず、クラウドサービスを AD 認証するためには、以下の2つが必要です。
・ID 同期
・認証
まずは1つ目の「ID 同期」です。
AD アカウントは、オンプレに閉じたアカウントなので、クラウドサービスは、AD アカウントの存在を知りません。
このため、AD 認証をするためにはクラウドサービスに何らかの方法で AD アカウントを伝えなくてはなりません。
この ID を伝達するのが「ID 同期」です。
Dropboxでは、「Dropbox Active Directory Connector」と呼ばれる Windows 上で動作するツールで AD アカウントを Dropbox に同期させます。
続いて2つ目の「認証」です。
認証は ID / パスワードを使用するのが一般的ですね。
Dropbox がクラックされた時のパスワード漏洩リスクを考えると、AD アカウントのパスワードをそのまま Dropbox のパスワードに設定したくありません。
とはいっても、Dropbox 用に別のパスワードを設定すると、利用者は複数のパスワードを使い分けなくてはなりません。
AD と Dropbox
だけならまだ良いのですが、更に他の利用サービスが増えると、利用サービス分のパスワードを使い分けなくてはならず...
同じパスワードを設定してしまうとか、強度の弱いパスワードを設定してしまうことが容易に想像でき、セキュリティリスクがあっけなく高くなってしまいます。
この問題を解決するのが SAML2.0 と呼ばれる認証プロトコルです。
AD 環境では、AD FS で SAML2.0 認証が出来るので、AD FS を使用して Dropbox の AD 認証をすることができます。
Dropbox は AD FS が発行したチケットを元に利用者に対して利用許可を与えるので、ID 同期をしたアカウントが Dropbox で使えるようになるのです。
Dropbox がチケットを信頼する根拠になっているのが、チケットにされた電子署名です。
この電子署名は、AD FS が持つ秘密鍵でチケットに署名しています。
Dropbox は、AD FS が持つ秘密鍵とペアになる公開鍵を持っているので、この署名を検証してチケットの正当性を確認しているのです。
この鍵ペアを使用するために、認証局から証明書を発行してもらいます。
この証明書は、利用者と AD FS との http
通信を暗号化するための SSL 証明書としても使われます。
AD FS を構築する前に、AD FS の FQDN を決め、秘密鍵に使用する SSL 証明書を取得します。
AD FS 構築には、PKCS#12証明書が必要なので、AD FS の FQDN に対して SSL 証明書を取得し、PKCS#12証明書(PFX 形式)にします。
SSL 証明書取得とPKCS#12証明書の作成はこちらを参照してください。
certreq.exe で SSL 証明書発行に必要な CSR を作る
http://www.vwnet.jp/Windows/WS16/2017092701/Certreq.htm
AD FS は、死んでしまうと SAML認証が出来なくなってしまう SPoF なので、冗長化構成にすることをお勧めします。
正常時は DNS ラウンドロビンでも運用できますが、片肺になった時に死んでいる方に誘導されると悲しい事になるので、ロードバランサーでバランシングするのがお勧めです。
NLB でもイケそうな気はしますが、検証していません。NLB でのバランシングを検討されている場合は必ず検証をしてください。
SQL Server を使って AD FS を構築することもできますが、今回は Windows Internal Database を使用します。
(今回の解説では、Web アプリケーション プロキシに関する説明は割愛しています)
AD FS を構築する前に、AD FS が使用するサービスアカウントを AD に登録します。(この例では Adfs30Service )
管理権限は必要ないので Domain Users で問題ありません。
パスワードは、十分強度の高いパスワードを設定し、パスワード無期限、変更禁止にします。
AD FS のインストール自体は、その他の役割と同様ですので特に説明は不要でしょう。
AD FS のインストールが完了すると、構成のリンクが表示されますので、構成を開始します。
構成開始
最初のフェデレーションサーバーを作成
設定時に使用するアカウント(このアカウントが登録されるわけではないので、現在のユーザー)
証明書のインポート
pfx 作成時に設定したパスワード
フェデレーションサービスの表示名
PowerShell で追加設定が必要
追加設定の説明
Add-KdsRootKey -EffectiveTime (Get-Date).AddHours(-10)
サービスアカウントの指定
サービスアカウントのパスワード
Windows Internal Database
構成
AD FS が機能開始したかを確認するには、以下 URL をアクセスし、サインイン画面が表示されることを確認します。
https://localhost/adfs/ls/IdpInitiatedSignOn.aspx
セカンダリ AD FS 設定もこのタイミングで作成します。
AD FS
構成
フェデレーションサーバーの追加
操作アカウント
プライマリ フェデレーション サーバーの指定
証明書のインポート
サービスアカウントの指定
サービスアカウントのパスワード
構成
プライマリ AD FS と同様にサインイン画面が表示されることを確認します。
https://localhost/adfs/ls/IdpInitiatedSignOn.aspx
Dropbox 用の SMAL 2.0 設定は、プライマリ AD FS で設定します。
証明書利用者信頼の追加
手動入力
表示名に「Dropbox Business」
AD FS プロファイル
SMAL 2.0 Web SSO
を有効にし「https://www.dropbox.com/saml_login」を設定(SP から指定された値を設定)
証明書利用者信頼の識別子「Dropbox」(SP から指定された値を設定)
多要素認証を構成しない
全てのユーザーに対してアクセスを許可する
ダイアログを開くにチェックが入っていることを確認して閉じる
規則の追加
LDAP 属性を要求として送信
Email LDAP query
規則の追加
入力方向の要求を変換
Transform email address as NameID
]
OK
トークン署名の証明書の表示
ファイルにコピー
Base 64 X.509
証明書のエクスポート
設定した内容が AD FS に反映されたか、サインイン画面に Dropbox Business が表示されることを確認します。
https://localhost/adfs/ls/IdpInitiatedSignOn.aspx
AD FS の準備が出来たら、Dropbox 側の SAML 認証設定をします。
管理コンソール
設定
シングルサインオン
IP プロバイダのログイン URL
https://AD FS FQDN/adfs/ls/」をセット
エクスポートした証明書を読み込ませる
その他必要に応じて設定し変更を適用
SSO ログインの URL にアクセスすると AD FS へ直接リダイレクトされるので、運用ではこの URL を使うのがお勧め。
シングル サインオンを「必須」にすると、シングル サインオン以外の認証が出来なくなるので、実運用はこのモードにします。(管理アカウントはパスワードログオン可能)
ID 同期は、AD メンバーサーバーに AD Connector Microsoft Installer をインストールします。
Dropbox Active Directory Connector – Dropbox
https://www.dropbox.com/help/business/active-directory-connector
Dropbox Active Directory Connector の動作要件は、以下の3つです。
・AD メンバーサーバー
・PowerShell 4.0 以降
・RSAT
ダウンロードしたインストーラーは、通常のインストーラーなのでインストールに迷う事は無いでしょう。
インストールすると、デスクトップに2つのアイコンが作成されます。
・Configure AD Connector(同期設定 GUI)
・Run AD
Connector(手動同期ツール)
Configure AD Connector を起動すると、以下のような画面が表示されますので、Get O Auth 2 Token ボタンで Dropbox 管理者のトークンをセットします。
トークンをセットしたら必要項目を設定します。
Simuration mode | ON:同期しない OFF:同期する |
User directosy | 同期するユーザーを格納するセキュリティグループ |
Email attribute | Dropbox のユーザー ID(メールアドレス)が格納されているフィールド |
Manage existing users | ON:Dropbox Business 管理コンソールで手動で作成したユーザーに変更内容が同期される |
Sync groups | グループを同期する |
Use Same Sync Group | OFF:グループ同期用セキュリティグループを使用する |
AD sync group | グループ同期用セキュリティグループ |
Log file | ログファイル |
Settings | 通知メール設定 |
手動で ID 同期する場合は、Run AD Connector を管理権限で実行します。
スケジュール登録する場合は、スケジュール登録バッチ(C:\Program Files\Dropbox\AD Connector\Helpers\AD-Connector-CreateTask.bat)でタスクが登録されるので、登録されたタスクを有効にします。
同期タスクを有効
トークン証明書(公式呼称ではありません。トークン署名証明書/トークン暗号化解除証明書をひっくるめて便宜上こう呼ぶ事にします)は、構築時に Dropbox に公開鍵を渡す際に作成(エクスポート)した証明書です。
トークン証明書の有効期間は default 1年です。
AD FS のデフォルト動作(自動ロールオーバー)では、トークン証明書が切れる20日前に新しいトークン証明書が自動生成され、5日経過後にプライマリ証明書に自動昇格します。
自動ロールオーバーでトークン証明書が切り替わると、意図しない AD 認証ができない期間が発生するリスクがあるので、計画的に手動更新するのがおすすめです。
SSL 証明書は複数年有効な証明書も準備されていますが、トークン証明書は毎年更新する必要があります。
トークン証明書の有効期間は、AD FS の PowerShell コマンドレット「Set-AdfsProperties -CertificateDuration」で変更が出来るので、有効期間を延長したトークン証明書を発行する事も可能です。
毎年更新が面倒な場合は、契約した SSL 証明書の有効期間より長い有効期限のトークン証明書で運用すると更新の手間を省くことができます。
Set-AdfsProperties -CertificateDuration で有効期限を変更する場合は、以下のようにします。
Set-AdfsProperties -CertificateDuration [有効期限(日)] |
例えば、10年(3650日)にする場合は以下のようになります。
PS C:\> Set-AdfsProperties -CertificateDuration 3650 |
以下の手順でトークン証明書を生成します。
# 自動ロールオーバー機能を有効 Set-ADFSProperties -AutoCertificateRollover $true # セカンダリ証明書生成 Update-ADFSCertificate # 自動ロールオーバー機能無効 Set-ADFSProperties -AutoCertificateRollover $false |
これでセカンダリのトークン証明書が生成されたので、こいつをエクスポートして Dropbox に登録します
セカンダリ証明書生成が失敗する場合は、-Urgent オプションにしてプライマリ証明書を強制生成します。
## セカンダリ証明書生成が失敗する場合 # 自動ロールオーバー機能を有効 Set-ADFSProperties -AutoCertificateRollover $true # プライマリ証明書強制生成 Update-ADFSCertificate -Urgent # 自動ロールオーバー機能無効 Set-ADFSProperties -AutoCertificateRollover $false |
(プライマリ証明書強制生成した場合は、セカンダリ証明書が発行されずプライマリ証明書が入れ替わりますので、以降の説明は適宜読み替えてください)
エクスポート
Dropbox 登録
登録したトークン証明書を有効にするために、生成した証明書をプライマリに変更します。
トークン署名とトークン暗号化解除はセットなので、両方のセカンダリをプライマリにします。
生成したトークン署名をプライマリへ
生成したトークン暗号化解除をプライマリへ
プライマリ昇格が完了したら、Restart-Service adfssrv で AD FS サービスを再起動します
PS C:\> Restart-Service adfssrv 警告: サービス 'Active Directory Federation Services (adfssrv)' の停止を待っています... 警告: サービス 'Active Directory Federation Services (adfssrv)' の停止を待っています... 警告: サービス 'Active Directory Federation Services (adfssrv)' の停止を待っています... 警告: サービス 'Active Directory Federation Services (adfssrv)' の停止を待っています... 警告: サービス 'Active Directory Federation Services (adfssrv)' の開始を待っています... 警告: サービス 'Active Directory Federation Services (adfssrv)' の開始を待っています... PS C:\> |
Dropbox へのトークン証明書登録から AD FS サービス再起動までの間は認証が失敗するので実施タイミングには注意してください。
トークン証明書を登録し、Dropbox で問題なく認証されることを確認したら、古い証明書を削除します。
古いトークン署名を削除
古いトークン暗号化解除を削除
SSL 証明書の有効期限切れが近くなったら、SSL 証明書を更新する必要があります。
秘密鍵を持っている SSL 証明書を更新したら、公開鍵を持っているトークン証明書も更新します。
更新用 SSL 証明書は、新規取得と同じ手順で取得します。
CSR は、当初作成した CSR をそのまま使用すれば良いでしょう。
具体的な手順はこちらをご覧ください。
certreq.exe で SSL 証明書発行に必要な CSR を作る
http://www.vwnet.jp/Windows/WS16/2017092701/Certreq.htm
更新用 SSL 証明書が入手出来たら、プライマリ AD FS でインポートします。
certlm.msc で証明書をインポート
インポートした証明書に対して ADFS のアクセス権限を付与します
NT SERVICE\ADFSSRV
NT SERVICE\DRS
[すべてのタスク] - [秘密キーの管理]
場所をローカルに
NT SERVICE\ADFSSRV; NT SERVICE\DRS にアクセス許可を与える
NT SERVICE\DRS アカウントが存在しない場合には、NT SERVICE\ADFSSRV にのみアクセス許可を付与します。
サービス通信証明書の設定でインポートした SSL 証明書を選択します。
拇印を指定指定し「Set-AdfsSslCertificate -Thumbprint」で AD FS の SSL 証明書を更新します。
拇印は以下コマンドレット表示される PSChildName です。NotAfter が有効期限なので、これを手掛かりに対象の証明書を判別します。
Get-Item Cert:\LocalMachine\My\* | fl PSChildName, DnsNameList, NotAfter |
PS C:\> Get-Item Cert:\LocalMachine\My\* | fl PSChildName, DnsNameList, NotAfter PSChildName : 8BB3C9570F12C84573D515DE0E2578211CAF6D7E DnsNameList : {***.********.**} NotAfter : 2018/10/12 17:02:43 PSChildName : 8D370B31BB3333234BA35804027D7349C5135F17 DnsNameList : {*******************} NotAfter : 2022/10/12 16:57:41 PSChildName : 47EF5F07D28BC031F9D7DA251734366872EE309F DnsNameList : {***.********.**} NotAfter : 2018/10/13 16:18:07 |
対象証明書の拇印を使ってSSL サーバー証明書を更新します。
Set-AdfsSslCertificate -Thumbprint [拇印] |
PS C:\> Set-AdfsSslCertificate -Thumbprint 47EF5F07D28BC031F9D7DA251734366872EE309F |
SSL 証明書を更新して秘密鍵を新しくしたので、公開鍵であるトークン証明書を生成し、Dropbox の「X.509 証明書」を入れ替えます。
具体的な手順は「5.1.2 有効期限を延長したトークン証明書の生成」と「5.1.3 登録した証明書をプライマリにする」を参照してください。
SAML 2.0(Security Assertion Markup Language 2.0) 認証は、実はそんなに難しいことをしているわけではないです。
SAML 認証動作を説明すると、以下の動きをしています。
(1) | 利用者が、Web ブラウザで Dropbox(SP/Service Provider)にアクセス |
(2) | SP は AD FS(IdP/Identity Provider)の URL を Web ブラウザに返す(リダイレクト) |
(3) | 利用者の Web ブラウザは、リダイレクトされた先の IdP をアクセス |
(4) | IdP は Web ブラウザに対して認証を要求 |
(5) | Web ブラウザは、利用者に対し資格情報の入力を要求(次回以降用に資格情報はキャッシュされる) |
(6) | Web ブラウザは、IdP に資格情報を渡す |
(7) | IdP は AD DS でユーザーを認証 |
(8) | ユーザーが認証されると、IdP は SP で使用するユーザー ID 等の必要情報が書かれた XML を秘密鍵で署名したAssertion(チケット)を発行 |
(9) | IdP は Web ブラウザに Assertion を渡し、SP の SAML 認証 URL を教える(リダイレクト) |
(10) | Web ブラウザは、リダイレクトされた先の SP をアクセスし Assertion を提出 |
(11) | SP は IdP の公開鍵で署名を検証 |
(12) | 署名に問題が無ければ SP は利用者に利用許可を与える |
SAML(Security Assertion Markup Language) は、XML(Markup Language)を署名し(Security) Assertion にしているのでこのネーミングになっているのです。
IdP と SP は直接通信して認証情報しているわけではなく、Web ブラウザを通してやり取りされる Assertion
の署名に基づいてアクセス許可を与えているので、IdP の URL は、アクセスする Web ブラウザから見えていれば良い事になります。
つまり、組織内部からのだけ SP をアクセスするのであれば、IdP の URL はインターネット上に公開されている必要はありません。
更に、SP に渡す公開鍵を格納している証明書は、ルート CA からの証明書チェーンが成立している必要もありません。
(信頼されたルート証明機関が解決できれば AD CS が使えます)
Dropbox Active Directory Connector – Dropbox
https://www.dropbox.com/ja/help/business/active-directory-connector
シングル サインオン(SSO)の使用時に Dropbox を AD FS 2.0 に接続するには – Dropbox
https://www.dropbox.com/ja/help/business/sso-adfs-2
シングル サインオン(SSO)の使用時に Dropbox を AD FS 3.0 に接続するには – Dropbox
https://www.dropbox.com/ja/help/business/connect-adfs3-sso
AD FS の証明書更新手順(トークン署名証明書、トークン暗号化解除証明書) – Ask the Network & AD Support Team
AD FS の証明書更新手順 (SSLサーバー証明書) – Ask the Network & AD Support Team
Copyright © MURA All rights reserved.