ラベル IdM の投稿を表示しています。 すべての投稿を表示
ラベル IdM の投稿を表示しています。 すべての投稿を表示

2017年4月29日土曜日

[MIM]3月のアップデートでサポートプラットフォームの大幅な改善+α

こんにちは、富士榮です。

色々と追い付いていなかったので、改めてまとめておきます。

3月にMicrosoft Identity Manager 2016 SP1 (MIM)向けのホットフィックスがリリースされ、特にサポートされるプラットフォームが大幅に追加されました。

個人的には、プラットフォームサポート周りでは「SQL Server 2016 Always Onのサポート」が非常に熱いトピックスでしたが、他にもSCSM 2016がサポートされたり、Visual Studio 2017が使えるようになったり、など色々とエンハンスが行われています。

MIM 2016でサポートされるプラットフォーム一覧
https://docs.microsoft.com/en-us/microsoft-identity-manager/plan-design/microsoft-identity-manager-2016-supported-platforms


他にも以下が新しく使えるようになった代表的なシナリオです。



こちらからダウンロード可能なので、MIM使いの皆さんは適用しておきましょう。

2016年9月21日水曜日

[告知]ID Management Conference 2016で登壇します

こんにちは、富士榮です。

先週末のID & IT Management Conference 2016に続き、10月初旬に東京と大阪でID Management Conference 2016が開催されます。

今年のID & IT Management Conference 2016では私はタイムテーブルに載らない裏トラックで新入社員~IDやセキュリティに関連する部門へ配属されて2~3年以内の方向けのセキュリティ・ID教育を担当しました。(完全招待性だったので、告知もしませんでした)



認証とID管理を新入社員向けに45分で解説するというのは中々のハードルでしたが、良い経験になりました。しかし、ID業界の老朽化や後継者問題が取り沙汰される昨今、非常に良い取り組みだと思いましたので、来年以降もこの取り組みは続けていきたいですね。



というわけで今年も無事にID & IT Management Conferenceは終了したのですが、早速次です。

次は、10月初旬に東京、大阪で開催されるID Management Conference 2016です。



以下、開催概要です。
今回、OpenIDファウンデーション・ジャパンでID連携・ID管理に関する解説をさせていただきます。東京はOpenIDファウンデーション・ジャパンの理事の林さん、大阪はEnterprise Identity Working Groupとして私が担当します。

イベント名:ID Management Conference 2016
イベントURL:
 http://www.f2ff.jp/idm/2016/

<大阪会場:富士榮>
日時:10月4日(火) ※セッションは17:05~17:45
場所:グランフロント大阪、ナレッジキャピタル・カンファレンスルーム
タイトル:エンタープライズにおける次世代ID連携標準
セッション内容:
 エンタープライズ企業においてもクラウド・サービスやモバイルデバイスの利活用に伴い、ネットワーク境界を超えてセキュアにID情報を連携する「ID連携」の重要性は増大しています。本セッションでは、OpenIDファウンデーション・ジャパンのEnterprise Identity Working Groupでの最新の成果物である「OpenID ConnectとSCIMのエンタープライズ利用と実装ガイドライン」を元に、企業におけるID連携の使いどころ、次世代のID管理/認証システムが対応すべきID連携標準技術について解説します。

<東京会場:林さん>
日時:10月5日(水) ※セッションは17:20~18:00
場所:KITTE、JPタワーホール&カンファレンス
タイトル:次世代ID連携標準によるAPIエコノミーの実現
セッション内容:
 パスワードによる認証が事実上有効性を失った今、認証の世界は大きく変わろうとしています。FacebookやGoogleを始めとしたソーシャルログインなどが台頭する中、ID連携への注目が高まると同時に、アイデンティティそして認証・認可の領域では、データ駆動社会の動きと共に様々な新しい動きもあり、制度や国際的な流れを踏まえて、APIを中心とした大きな動きが出てきています。本セッションでは、アイデンティティ分野の現在の状況と、技術的な動向、標準化の現状などを踏まえつつ、次世代のID管理/認証システムが対応すべきID連携標準技術について解説します。



開催まで約2週間ですが、ぜひ事前登録の上、ご来場ください。

2016年6月6日月曜日

[MIM]June CTPで遂にExchange Onlineをサポート

こんにちは、富士榮です。

前回の4月版のCTPに続き、6月度のプレビュー版が公開されました。

 公式アナウンス
  Now Available MIM 2016 June Preview
  https://blogs.technet.microsoft.com/iamsupport/2016/06/03/now-available-mim-2016-june-preview/

 ダウンロードはこちら(要登録)
  https://connect.microsoft.com/site433/Downloads


なんといっても今回の目玉は、MIM Serviceの承認用メールにExchange Onlineが使えるようになった、という点です。

このエンハンスリクエストはずいぶん前から上がっていたのですが、なかなか実装されなかったので、待っていた人も多く、早く正式版にも実装してもらいたい機能ですね。

他には、

  • セルフサービス・グループ管理やプロファイル管理ページのChromeやスマホブラウザの対応
  • Windows Server 2016 Technical Preview、SQL Server 2016、SharePoint 2016への対応
  • Windows Server 2016の新機能に対応した特権アクセス管理用のコマンドレットの追加

が更新ポイントとして挙げられています。

更新のペースが速いのでなかなかテストができませんが、触ってみないと。。。

2016年5月30日月曜日

Office365のSAML脆弱性に見るマルチテナントSP実装時の注意点

こんにちは、富士榮です。

しばらく前に世間を騒がせたOffice365のSAML SP実装に関する脆弱性の話が色々と解説されているので、ちょっと動きを細かく見ていきたいと思います。

 騒動の元ネタ
  The road to hell is paved with SAML Assertions
  http://www.economyofmechanism.com/office365-authbypass.html

 OAuth.jpでのnov氏による解説記事
  Office 365 SAML Implementation Vulnerability
  http://oauth.jp/blog/2016/05/14/office-365-saml-implementation-vulnerability/

 John Bradley氏による解説
  Azure AD security issue
  http://www.thread-safe.com/2016/05/azure-ad-security-issue.html

 Internet2での解説
  Scoped User Identifiers
  https://spaces.internet2.edu/display/InCFederation/2016/05/08/Scoped+User+Identifiers


まぁ、起きていた事象と根本的な原因はIdPが発行したクレームを無条件に信じてしまっていたことにより他のテナントのユーザになりすましてしまうことが出来たよ、ということなので、ちゃんとVerifyしようよ、という話になっています。


◆何が起きていたのか再現してみる

と、言ってもすでにOffice365の脆弱性は修正済みなので、起きていたであろうことをAD FSとGoogle Appsを使って再現してみました。

AttackerとVictimの2つのIdPをAzure ADが収容して、共通のアプリケーションを利用する、という構図をGoogle AppsとAD FSを使って再現したのが以下の図のようなシステム構成になります。


Azure AD相当のAD FSが各IdPから渡ってきたEmailアドレスをストレートにNameIDに変換してアプリケーション(Google Apps)へ渡してしまうので、VictimにもAttackerにも同じメールアドレスのユーザが存在するとAttackerもGoogle Appsへログインできてしまいます。
(もちろん実際のOffice365/Azure ADではもう少し複雑な動きのはずですが、解説のためものすごく簡略化しています)

◆実際の動作

まず、各IdPに同じメールアドレスを持ったユーザを作成します。これは簡単ですね。Active Directoryのユーザとコンピュータからユーザのメールアドレス属性を編集してあげるだけです。

この状態でGoogle AppsへアクセスするとAzure ADに相当するAD FS(今回はHUBと呼びます)へリダイレクトされ、IdPの選択をするホームレルムディスカバリ画面が表示されます。これは、Office365の場合、メールアドレスのドメインパートで自動的に振り分けるような仕組みになっていますよね。


まずは正常系です。
ここでvictimを選択するとvictim側のAD FSへ再度リダイレクトされ、victim側のユーザでの認証が行われます。


もちろんここでログインすると問題なくGoogle Appsへアクセスできます。


今度は先ほどのIdP選択画面でattackerを選択してみましょう。
同じくattackerのログイン画面が表示されるので、attackerのユーザでログインしてみます。


すると、意図しないユーザであるにも関わらずGoogle Appsへのログインができてしまいます。

右上のユーザ名を見るとvictimのユーザとしてログインできていることがわかります。

これが問題です。


◆構成を見てみる

では、この環境がどのように構成されているのか見ていきましょう。

まずはHUBとなるAD FSの構成です。

Relying Partyには当然Google Appsが構成されています。

HUBとなっているので、IdPから渡ってくるEmailアドレス属性をNameIDへマッピングして出力を行うクレーム・ルールが設定されています。


次に、HUBのIdP(Claim Provider)設定を見てみます。マルチテナントで構成されているので当然victimおよびattackerがIdPとして登録されています。

そして、各IdPのクレーム・ルールを見ると単純に各IdPから渡ってくるEmailアドレスをパススルーしています。ここが大きな問題です。


取り敢えず問題は置いておいて、次に行きます。

次は各IdP側のRP設定を見ていきます。
当然、victim側にもattacker側にもRPとしてHUBが登録されています。

こちらがvictim側です。

こちらがattacker側です。

この辺りは特に不思議なところはありません。
クレーム・ルールも共通で以下の通り、ADのEmailアドレスをそのまま発行しています。



構成はこれで終わりです。
次はSAML Tracerを使って動きを見てみます。

◆SAML Assertionの中身の確認

まず、正常パターンです。victimで認証されてSAML ResponseがHUBへ返ります。


属性ステートメントにメールアドレス属性が正しく入っていることがわかります。

同様にattackerも見てみます。


先のルールだとattackerからもメールアドレス属性をそのまま発行することになるので、HUBへのSAML Responseにはメールアドレスが入ります。これは正常な動きです。

では、attackerからのResponseを受けたHUBがGoogle Appsへ返すSAML Responseを見てみます。


いけませんね。NameIDにvictimのメールアドレスが入ってしまっています。

Google Appsから見るとこのResponseはあくまでHUBから返ってきており、AssertionのIssuer(HUB)および署名(HUBのAD FS Token Sign)の検証が出来てしまうので、正しいAssertionだと認識してしまい、ログインが完了してしまいます。

◆どうやってなりすましを防ぐか?

では、ここからが対策です。
要するにHUBが配下のIdPから飛んでくるクレームを無条件に上位のアプリケーションへ発行してしまっているのが問題なので、フィルタリングを入れておきたいと思います。

具体的には、victimから飛んでくるメールアドレスはvictimの、attackerから飛んでくるメールアドレスはattackerの固有のドメインパートを持っている、という暗黙の前提の通りになっているかどうか?を確認し、正しければスルーしますし、異なっていたらフィルタリングしてしまいます。


AD FSにおいて、この設定はClaim Providerのクレーム・ルール設定で行います。

以下がvictim側の設定です。


次にattacker側の設定です。


この状態における実際のAssertionはどうなっているでしょうか?

まずは正常系(victim)です。メールアドレスがvictimorg.xyzで終わっているのでスルーされてAssertionに値が入ります。


しかし、attacker側ではメールアドレスがattackerorg.xyzで終わることが期待されるところにvictimorg.xyzが入ってきているのでフィルタされ、Assertionに値が入りません。

こうなるとGoogle Appsへのログインは失敗し、なりすましはできなくなりました。


◆対策とまとめ

結局のところは、「外部のIdPとフェデレーションを行う際はIdPの信頼性の担保が出来ているかどうかを確認すべし!」という話なんですが、「じゃあ、どうやって?」というところで例えばメールアドレスを使うOffice365やGoogle Appsなんかの場合は、暗黙の前提となっているドメインパートに正しい値が入ってくるであろう、という部分を排除してきっちりとフィルタリングをするという対策が必要になりますし、他の属性を使う場合でも、その属性に入ってくる値は当該のIdPで正しさが保証されているものなのか?を中間IdPやRP側でも確認をすることは必須である、ということが出来ます。

オンプレミスのActive Directoryの信頼関係でも同じですが、技術的につながるからと言って無条件につなぐと当然セキュリティ・ホールが出来上がるので、文字通り「信頼」をするためには必要な対策をちゃんとしましょう、ということです。

また、これはSAMLでもws-federationでもOpenID Connectでも全く同じことですので、うちのサービスはSAMLじゃないから大丈夫、と言ってスルーしないでください。



参考までに、ですがAD FSでは外部IdPから発行されたクレームを無条件にパススルーしようとすると以下のワーニングが表示されます。


ワーニングにはちゃんと意味があるので、みなさん従いましょうね。

2016年5月18日水曜日

[Azure AD Connect]Synchronization Rules Editorが大幅改善

こんにちは、富士榮です。

コンスタントにバージョンアップを続けるAzure AD Connectですが、これまで同期ルールがUserもGroupもDeviceも同列にずらずらと出てきてしまい、どのルールを編集すると何が起きるのか?の把握が非常に困難でした。

このUIについて、しばらく前から改善要求を挙げていたのですが、直近の1.1.180へのバージョンアップでSynchronization Rules Editorのユーザ・インターフェイスが大幅に改善、かなり使いやすくなりました。

◆以前の課題

先に書いた通り、ずらずらと同期ルールが並んでおり、どのルールを編集すると何が変わるのかがよくわかりませんでした。


◆Version 1.1.180での改善

対象のコネクタ、オブジェクトタイプ、属性等によってフィルタリングができるようになり、例えば「オンプレミスのADのユーザのメールアドレスを変更すると、どの同期ルールが適用されるのか?」といった影響範囲の把握が楽になりました。



例えば、オンプレミスのAD上のsAMAccountName属性が変更された場合に影響があるルールを特定したければ、
・Connector : オンプレミスのAD
・Connector Object Type : User
・Connector Attribute : sAMAccountName
という条件を設定すると以下のように関連するルールが出てきます。



特に実際の本番環境ではデフォルトのルールだけでは運用できないケースも多く、例えばAzure AD Connectのバージョンアップ時に新しいマッピングが追加されたりすることもあるので、カスタマイズの範囲や影響度合いをしっかり把握することは重要です。
今回のエンハンスはそのような環境においては非常に便利なので、上手に活用していきたいですね。

2016年4月17日日曜日

[MIM]Microsoft Identity Manager April 2016 Previewが公開

こんにちは、富士榮です。

先月に引き続き、Microsoft Identity Manager 2016の2016年4月版のCTPが公開されています。

※先月はこちら。
 [MIM]Microsoft Identity Manager April 2016 Previewが公開
 http://idmlab.eidentity.jp/2016/03/mimmicrosoft-identity-manager-march.html

先月は、環境面では、IE以外のブラウザのサポート、機能面では特権ID管理フォレストの既存のユーザ、グループをPAMロールへ追加することが出来る、という拡張でしたが、今月は新しいプラットフォームへの対応です。


  • MIM Sync/MIM ServiceデータベースとしてWindows Server 2012 R2上のSQL Server 2016 RC2をサポート
  • MIM Sync/MIM Serviceが使うメールサーバとしてWindows Server 2012 R2上のExchange Server 2016をサポート
  • MIM Portalのインストール先としてWindows Server 2012 R2上のSharePoint Server 2016をサポート
  • MIM Add-inのインストール先として、Windows 10上のOutlook 2016をサポート

まぁ、SharePoint Server 2016をサポート、と言っても互換レベルは15なので、2013相当のWebサイトを作るだけなんですけどね。

いずれにしても、製品が定期的に更新されていることが見えるのは使う側からすると安心ですね。投資が継続していることが見えるので。

2016年3月14日月曜日

[MIM]Microsoft Identity Manager March 2016 Previewが公開

こんにちは、富士榮です。

マイクロソフトの製品開発がサイクリックに細かいアップデートを出していく、という方法にかわり、Microsoft Identity Manager 2016(MIM)についても例外なく小さなアップデートがちょいちょい出てくる、という形になってきているようです。

今回はMarch 2016 CTPということでconnectサイトに登録してダウンロードするという形で提供されており、以下のシナリオが用意されています。

https://connect.microsoft.com/site433/Downloads/DownloadDetails.aspx?DownloadID=57668

1. MIM Portal end-user self-service from additional browsers
 FirefoxやChromeでMIMポータル・セルフサービス機能へアクセスする
2. PAM with activation into groups in the “PRIV” forest
 すでに特権フォレストに存在するユーザとグループをPAMロールに含める

時間作って触ってみないと。。

2016年3月10日木曜日

[小ネタ]Azure ADからGoogle Appsへのプロビジョニング

こんにちは、富士榮です。

今回は小ネタです。しかも事象からの推測ですのでタダの都市伝説かもしれません。

ご存知のとおり、Azure Active Directory(Azure AD)が持つアプリケーション連携の機能には「シングルサインオン」と「プロビジョニング(ID同期)」の2つがあります。

で、今回はプロビジョニングに関する小ネタです。
※プロビジョニングの細かい設定方法は以下の動画をどうぞ。(IdM実験室別館より)
 https://channel9.msdn.com/Blogs/IdM-Lab-Annex-MVP-for-Directory-Services-Naohiro-Fujie/AAD-Setup-App-3

Google Appsへユーザを新規にプロビジョニングした場合、作成されたユーザのステータスが「無効」になっている場合と「アクティブ」になっている場合があります。

<そもそものGoogle Appsの仕様は?>

Google Admin SDK Directory APIの仕様を見ると、新規に作成されたユーザはサスペンドされ(suspendedにtrueがセットされ)、サスペンド理由(suspensionReason)にWEB_LOGIN_REQUIREDがセットされ、初回ログイン時にアクティベートされる、と書いてあります。
https://developers.google.com/admin-sdk/directory/v1/reference/users
抜粋)
A new account is automatically suspended by Google until the initial administrator login which activates the account. After the account is activated, the account is no longer suspended

しかし、先に書いた通りAzure ADからユーザをプロビジョニングすると最初からsuspendedがfalseのユーザ(アクティブ)ができる場合と、仕様通りtrueのユーザ(無効)の両パターンができる場合があります。

<Google Apps上のユーザの状態>

<有効なユーザ>

Directory APIでGoogle Appsを直接見ると、suspendedがfalseになっています。

この状態でログインすると、規約への同意をすればすぐにサービスが使えます。



<無効なユーザ>

同様にAPIを直接たたくとsuspendedがtrue、suspensionReasonがWEB_LOGIN_REQUIREDとなっています。APIドキュメント通りです。

この状態だと、ログイン時に本人確認が走ります。



<Azure AD上でのアカウント状態の違い>

何が違うのか?を追うためにAzure AD上でのユーザの違いを眺めると、、、

最初からアクティブになるユーザ:オンプレミスのADから同期されてきたユーザ
無効となるユーザ:Azure AD上に直接作ったユーザ

という違いがありました。
本当にこれが原因なのかどうかはよくわかりませんが、少なくとも私のテナントではこの部分しかアカウントの違いがなく、何ユーザ試してみてもこの動きになったので、何か関係しているのかもしれません。

マイクロソフトやGoogleに確認した訳ではないので、厳密には良くわかりませんが。。。





2016年1月31日日曜日

[Windows 10/Azure AD]ハイブリッド環境におけるドメイン参加とシングルサインオン①

こんにちは、富士榮です。

Azure Active Directory(Azure AD)に参加したWindows 10デバイスでのデバイス・サービス間のシングルサインオンの仕組み(Microsoft Passport)については、これまでもidconや本ブログなどでも解説をしてきました。

 [Windows10]デバイス&サービス間のシングルサインオンの仕組み
  http://idmlab.eidentity.jp/2015/05/windows10.html
 [FIDO/Windows10]idcon vol.20(別名fidcon)が開催されました
  http://idmlab.eidentity.jp/2015/05/fidowindows10idcon-vol20fidcon.html


しかし、現実のエンタープライズ・シナリオでは一気にAzure ADへPCを参加させて、クラウドだけで生きていく、ということは考えにくく、まずは現存のオンプレミスのドメインとWindows 10をどうやって組み合わせて活用していくのか?が焦点になっていくものと思われます。

と、いうことで今回はオンプレミスのドメインにWindows 10のPCを参加させて、Azure ADと連携することで得られる利点について解説していきたいと思います。いわゆるハイブリッドID基盤をWindows 10を使うことで更に活用できますよ、というシナリオです。

ちなみに、やれることは単純にデバイスへのログインと社内アプリ、社外アプリへのシームレスなログイン(シングルサインオン)ですが、この環境を実現するためのシナリオとしては複数の方法があります。

1)AD FSを構築してAzure ADとID連携する方法
 現在も主流となっているオーソドックスな方法です。PCはあくまでオンプレのAD DSに参加、ログインをして利用しますので、社外で利用する場合は社内ネットワークへVPN接続するか、Web Application Proxy(WAP)を用意してForm認証する必要があり、AD FSがダウンすると全滅するという弱点がありました。

2)Azure AD WAPを使う方法
 上記1のパターンと似ていますが、PCはAzure ADに参加して社内アプリへのアクセス時だけAzure AD WAPを使うため、可用性の面では改善されたものの、社内にいても社内アプリケーションへのアクセスはあくまでAzure AD WAP経由となるため、ファイルサーバなどの非Webアプリケーションへの対応ができない、など機能面で現実的な選択ではありませんでした。

3)Windows Server 2016のAD FSを使い、Microsoft Passport for Workを利用する方法
 おそらく今後の本命になると思います。社外はAzure ADを使ったMicrosoft Passport、社内はMicrosoft Passport for Work、社内外のつなぎはAzure ADとAD FSの連携という形になるので、オンプレのAD DSに参加したPCでもAzure ADに参加したPCでもシームレスに社内外のアプリケーションを利用できます。非WebアプリケーションについてもMicrosoft Passport for Workではカバーする予定らしいので、そうなると無敵です。弱点は基盤構築が超面倒なところですかね。SCCMとかIntuneとかのMDMが必要になりそうです。

4)Azure AD Connectを使いMicrosoft Passportに使うデバイス情報をオンプレ・クラウド間で同期する方法
 今回紹介する方法です。PCはオンプレのADへ参加するので従来通り社内リソースは統合Windows認証で利用し、社外アプリケーションはAzure ADとMicrosoft Passportで利用する形をとります。認証する局面においてクラウド・オンプレの間で連携がないので、完全に環境を切り離すことが可能なので、可用性はあんまり気にしなくても良いのが利点です。ただ、この後解説しますが現状はちょっと環境を選びます。


では、さっそく解説します。

◆実現すること
おさらいですが、以下を実現します。
・ドメイン参加したWindows 10 PCがAzure ADと連携されているアプリケーションへSSO(PCログインとアプリログインのSSO)できるようにする
・社内ファイルサーバなどへのログインは従来通り統合Windows認証を利用
 ※つまり、Windows Server 2016のAD FSを使ったMicrosoft Passport for Workシナリオではありません。
・社外アプリ(Azure AD連携アプリ)へのログインはMicrosoft Passportを利用




◆前提および制限事項
実現するためには以下の前提や制限があります。
・Azure ADとAD DSはAzure AD ConnectでID同期を行っている
・Azure ADとAD DSはフェデレーションしていない(AD FSを使っていない)
・Azure ADとAD DSの間はパスワードハッシュ同期を行っている
・PCはWindows 10(TH2以降)
・ドメインコントローラはWindows Server 2012R2以降
・オンプレドメイン名とAzure ADドメイン名は同一であること
 (Azure AD ConnectでメールなどUPN以外の属性でオブジェクト・マッチングをするとNG。代替UPNでも良いので同一UPNが必要)
・実際にデバイスがAzure ADに登録されるまでには結構時間がかかります。(ログイン、Azure AD Connectによる同期、ログインの順で処理が走るので、同期の前後でログインをする必要があります)


◆準備作業
まず、準備として以下の2点を行います。
1.クライアントPCが自動的にデバイス登録(Workplace Join)を行うためのタスクの有効化

 グループポリシーの設定を行います。
 Windows Server 2016のドメインだと、
  コンピューターの構成
   ⇒ポリシー
    ⇒管理用テンプレート
     ⇒Windowsコンポーネント
      ⇒デバイスの登録
 から「ドメインに参加しているコンピューターをデバイスとして登録する」を有効にします。
 ※2012 R2サーバだと、「社内参加(Workplace Join)」という名前の項目になっています。





 このポリシーを有効にすることで、クライアントPCにユーザがログインしたタイミングでデバイスを登録するためのタスクスケジューラ(dsregcmd.exe)が起動するようになります。
 (このあたりの細かい動きは次回解説します)


2.有効化されたタスクがAzure AD DRSのドメイン、テナントを解決するためのエントリ(SCP:Service Connection Point)をAD DS上に登録

 1の作業で有効化したタスクがデバイスを登録する先となるAzure ADのサービス名(ドメイン名およびテナントID)をAD DS上に登録する作業です。
 実際の作業としてはAzure AD Connectに含まれるPowerShellのコマンドレット「Initialize-ADSyncDomainJoinedComputerSync」を実行することになります。

 こんな感じです。



 これを行うと、CN=62a0ff2e-97b9-4513-943f-0d221bd30080,CN=Device Registration Configuration,CN=Services,CN=Configuration,DC=example,DC=comにazureADNameとazureADIdという二つの情報が登録されます。先のタスクスケジューラはこの値を見てデバイス情報を登録する先のAzure ADを判別します。
 ※ちなみに、Azure ADのディレクトリ内に複数のドメインが存在する場合、意図しないドメイン名が登録されてしまうことがありますので、その場合は直接AD DS上の値を修正する必要がありそうです。(これが原因かどうかはわかりませんが、うまく動かないことがありました)




◆PCをドメインに参加させ、ドメインユーザでログイン、そして同期する
ここは特に何もいりません。通常の手順です。

ただ、グループポリシーが正常に適用されると「Automatic-Device-Join」というタスクが自動的に実行されているはずです。



結果、いくつかのことが発生します。

まずは、初回ログインの際、ドメインに登録されたコンピュータオブジェクトのuserCertificate属性に証明書がセットされます。(タスクの中で自己証明書を発行します)



このあとAzure AD Connectでデバイス情報の同期を行います。Azure AD Connectの同期ルールを見るとuserCertificateに値が入っていないとAzure ADへコンピューターオブジェクトを同期しないので、この段階で初めて同期対象となるためです。

同期されるとAzure AD上にデバイスが登録されます。登録状態はGraph Exploreで確認するしか方法がありません。



そして、再度ドメインユーザでログインします。
するとAzure AD上に登録されたデバイスとログイン時に実行されるタスクによる登録要求の突合が行われ、Microsoft Passportに必要なKey Registration Serviceエンドポイントでの認証に必要なクライアント証明書がダウンロードされます。
この後、Windows 10はキーペアを生成し、秘密鍵をTPMに、公開鍵をKey Registration Serviceへ登録し、Microsoft Passportのデバイス登録フェーズが完了します。

次回Azure ADへログインする際はTPM上の秘密鍵で署名したリクエストによりPrimary Refresh Token(PRT)が取得できるので、そのあとは必要なアクセストークンを取得してアプリケーションを利用、という流れでシングルサインオンが実現します。

この際、ユーザのアカウント設定のページにはAADTokenBrokerが発現、紐づけられたAzure AD上のアカウント情報が表示されます。




◆Azure ADと連携したアプリケーションへアクセスする
ここまで来れば、これまで紹介したものと同じです。
アクセスパネルにアクセスするとAzure ADでのログインを求められることなく、アクセスできます。





かなりややこしいフローになるため、次回は少し深いところの仕組みを解説し、なぜこのような動きをするのか?を解説したいと思います。

2016年1月8日金曜日

[MIM/FIM]間違ったオブジェクト削除を防ぐための仕組み

こんにちは、富士榮です。

ID管理システムを本番環境で運用していると一番気を遣うのが、人事システムからわたってくるデータの間違いへの対応です。

ID管理システム自体はデータを生成するわけではないので、人事システムなどの信頼できるデータソースから従業員や組織に関する元情報を受け取り、そのデータをあらかじめ決めたポリシーに従ってActive Directoryやアプリケーションなどへ渡していきます。

つまり、ID管理システムが正しく動作するためにはデータソースから正しいデータがわたってきていることが大前提となっているわけです。

しかし、人事システムもあくまで人が運用しているシステム。社員情報を登録するのも人なわけで、必ず入力ミスは起きますし、データの受け渡しをするインターフェイスにバグが絶対に無いとは誰も言い切れるものではありません。

そのような前提を踏まえてID管理システムを設計~構築する時は、入力データのバリデーションをするための前処理を入れる検討をするなど、色々と気を使います。

その際に、まだ氏名の漢字間違い等であれば、あまり影響はないのですが、役職や組織などアクセス権に関する属性の間違い(これが意外と多いんです!)や、データの欠損を含む在籍状態の間違いなど、非常にインパクトの大きな間違いがしばしば発生するのも事実です。
間違って退職扱いになってしまい、各アプリケーションからIDが消えてしまったりするとリカバリを行うのに非常に大きな手間がかかりますし、特にActive DirectoryではObjectSidでIDを識別しているので、同じ名前でユーザを再作成すればよい、というものではなく大惨事を招いてしまいがちです。


各社のID管理製品は特にこのようなデータ削除に関する保護措置を用意しているものが多く、Microsoft Identity Manager(MIM)においてもあらかじめ設定した閾値を超えたオブジェクトの削除が一気に発生するとジョブを停止する機能「Specify number of deletions to process」が用意されています。
(昔からある機能なので、当然まだForefront Identity Manager(FIM)を使っていてもこの機能は使えます)


早速みてみます。

シナリオとしては、以下を想定してみます。

  • ユーザデータをCSVからMIMに取り込んでいる
  • 前日までの取り込みで現在MIM上に10,000ユーザが存在している
  • 人事システムとのインターフェイスの不備で取り込むCSVの大多数のレコードが消えてしまった


◆入力データ

 正しい入力データ(前日のデータ)はこちら。10,000件レコードが存在します


 しかし、当日2レコードしかないCSVがわたってきてしまいます。



 データ取り込み前まではMIM上に10,000件データが取り込めています。



◆何も考えずにデータを取り込む

 インポートすると、当然のことながら9,998件がDelete対象として認識されてしまいます。このままMetaverseへの同期処理を実行すると本気であちこち消えていきます。。。


◆一括削除防止機能を設定する

 インポート処理で削除が一定の件数を超えたら処理を止めるための設定を行いますので、CSV取り込み用のConnector SpaceのRun ProfilesのImport処理の中に設定項目が存在します。
 Thresholdの項目の中の「Specify number of deletions to process」にチェックを入れて、とりあえず10に設定してみます。
 ちなみにこの設定、一度設定~保存しても、再度設定の編集画面を開くと保存した内容が「表示上」はクリアされてしまいます。キャンセルを行えば設定は残るのですが、間違えて保存をすると本当に設定がクリアされてしまうので、注意が必要です。(昔からのバグですね)


◆取り込んでみる

 先の間違ったデータを取り込んでみます。
 すると、Statusが「stopped-deletion-limit」でジョブが停止しているのがわかります。


 削除対象としてマークされた件数も先ほど設定した10件になっていることがわかります。


 このようにジョブが異常終了してくれるので、後続で同期ジョブを流す前にConnector Spaceの段階でリカバリができ、大惨事を防ぐことが可能になります。

特に期初の大規模人事異動時などはこのような機能をうまく使って、上手にID運用をしていくとよいと思います。