sidebarIdM実験室いろんなアイデンティティ管理系製品やサービスの実験の記録をしていきます。後は、関連するニュースなどを徒然と。2008年12月26日金曜日ActiveDirectoryへのパスワード変更をフックするIdM案件をやっていると、どうしても出てくるのがパスワード同期のお話。基本的にIdM側のパスワード変更画面を使ってもらうのがベターなのですが(システム構造的にも、機能面でも)、中にはやっぱりCTRL+ALT+DELでのパスワード変更がやめられない!というユーザさんもいらっしゃるのかと。そのような要件を満たすためにパッケージベンダ各社はいろいろな努力をしていると思います。Manager)などではActiveDirectoryへのパスワード変更をIdM側へ取り込む機能を実装してきています。今回はそのあたりの仕掛け(どうなっているのか?)をひも解いてみようと思います。Windowsのパスワード変更の仕組みを整理します。Manager(SAM)にパスワードを保管する4.正常に保管できたらレジストリに登録されているパスワードフィルタDLLに変更通知を行うという流れでパスワードが変更されます。それぞれのプロセスを細かく見ていくと、以下のような流れになっています。Authority(LSA)が要求を受け付けるlsass.exeというサービスプロセスが要求を受け付けます。2.レジストリに登録されているパスワードフィルタDLLでパスワード検査を行う以下のレジストリに登録されているDLLに実装されているPasswordFilter()が順番に呼び出され、パスワードポリシーのチェックなどのフィルタリング処理が行われます。Packagesこの関数がFALSEを返すとその時点でパスワードポリシー違反としてユーザへ通知されます。Manager(SAM)にパスワードを保管するこれは文字通りアカウントDBへのデータ更新です。4.正常に保管できたらレジストリに登録されているパスワードフィルタDLLに変更通知を行うこれも2と同じく各DLLのPasswordChangeNotify()が呼び出されます。最後のPasswordChangeNotify()の引数に対象ユーザのユーザ名とクリアテキストのパスワードがわたってくるのを利用して、あたかもActiveDirectoryのパスワードを吸い出しているような動きに見せている、というのが各IdM製品の実際の仕掛けです。(たぶん)また、この動きを見るとわかりますが、あくまでlsass.exeがローカルのDLLに実装された関数を使うので、パスワード変更要求を受け付けるコンピュータ上にフィルタを配置する必要があります。ローカルユーザのパスワードをフックする場合はローカルコンピュータ上に、ActiveDirectoryユーザの場合はすべてのドメインコントローラ上に配置する必要があります。※ちなみに2のPasswordFilter()の引数にもユーザ名とパスワードはわたってきますが、実際にパスワードが更新される前ですし、他のライブラリを使ったパスワードポリシーチェックが完了していないのでこの段階で吸い出してもあまり意味がありません。いうことで、実際の動きをみるためにもDLLを実装してみました。2005/VC++です。ビルドし、出来たDLLをC:\Windows\system32(%systemroot%\system32)以下にコピーし、上記のレジストリに出来上がったDLLの拡張子を除いたファイル名を登録してシステムを再起動すると配置完了です。上手くいけばパスワードを変更するとCドライブ直下に「PasswordChangeLog.txt」というファイルが出来上がります。中身は、sAMAccountName=変更したユーザ名,unicodePwd=新しいパスワードという形で、パスワード変更がどんどん記録されていきます。以下、実際のコードです。Directoryへ同期してみます。Directoryへ同期できるようにします。ポータル上で作成したユーザもMetaverseに取り込みたいので)の属性フローを設定します。Agentをするか、MA自体を再作成します。Serverサービスを再起動すれば直るとの情報がありました。試してみると確かに治ります。前回はExportのみを設定しましたが、今回は同じ属性についてImportも設定します。以下の通りMAを作成します。AttributesdisplayNamegivenNamemailmanagersAMAccountNamesntitleunicodePwduserAccountControl次に以下の実行プロファイルを作成しておきます。次はILM"2"ポータルの管理画面よりOSRを作成します。操作方法は前回のISR作成時とほぼ同じです。同期対象のユーザを絞り込むため、オブジェクトセットを作成します。ここではシステムユーザ以外は全員対象としたいので、ilm2adminとBuilt-inユーザ以外でセットを作成します。Nameがilm2adminではなく、Built-inで始まらないユーザのみを対象とします。Flow)OSRを実際に実行するためのアクションフローを作成します。Rule/MPR)の作成4て定義したオブジェクトセットに5で定義したアクションフローが実行できるようにMPRを作成します。実際に定義したルールを動かしてみます。Importを実行します。Importを行い、先ほど作成した同期ルールを含む情報をコネクタ空間へ取り込みます。その状態でILMSDBのコネクタ空間とMetaverseの同期を行います。MA(CS)へユーザが追加されます。MAでExportすればAD上へユーザが作成されます。8.AD上のユーザ確認ドメインコントローラにログインし、ActiveDirectoryユーザとコンピュータでユーザが作成されていることが確認できます。これで基本的に入方向と出方向の両方の同期ができました。他にもパスワードの同期や承認フローの設定など色々と試すことがあるので、いずれ解説したいと思います。(それよりもMPR、AW、SETの考え方、ERL属性の仕組みを整理した方が全体の理解が進むかもしれませんが。Microsoft2008年12月12日金曜日ASP.NETでOpenID対応サイト作成PerlやPHPでのOpenID対応サイトの作り方は結構あるので、ASP.NETで作ってみました。OpenIDのライブラリはGoogleが公開しているものを以下からダウンロードしました。Framework:2.0.50727です。以下の手順で作成・確認します。Studioで新規Webアプリケーションを作成2.参照設定にGoogleからダウンロードしたライブラリ(DLL)を設定3.ツールボックスにダウンロードした部品(OpenIdLogin)を追加し、Webページに追加ツールボックス→右クリック→アイテム選択→参照より先ほどのDLLを追加する。Webページ上へOpenIdLoginをドラッグ&ドロップする。4.認証状態を表示するための部品(ラベルなど)をWebページに追加ページがロードされたときに状態をラベルに表示するため、以下のコードを追加する。Class5.フォーム認証を使う様に環境を設定WebサイトメニューよりASP.NET構成を開き、Webサイト管理ツールより、セキュリティ→認証の種類の選択のリンクをたどり、ユーザがサイトにアクセスする方法を「インターネットから」へ変更する。6.ビルド、テスト実行すると、認証前の状態ではUserIDは空白、IsAuthenticatedはFalseになっているので、先日紹介したWindowsLiveのOpenIDを入力してLoginをクリックする。WindowsLiveの認証ページへリダイレクトされるので、パスワードを入力してサインインする。認証が成功すると、UserIDにOpenID、IsAuthenticatedにTrueが返される。いうこともあり単純にログインおよび状態の表示のみをしましたが、その他の機能もそのうち使ってみたいと思います。RC0環境構築「同期ルール設定編その2~ISR」しばらく間が空いてしまいました。出張続き&家族全員でノロにかかったりとばたばたしてました。前回の予告通り実際の同期ルールの設定を試してみます。Serviceへのエントリの取り込みを行います。流れとしてはシンプルに人事データの入ったCSVファイルを取り込んでいきます。用意したCSVファイル(hr.csv)は以下の通り。managerデリミタ:カンマクォート:なし例)empId,sn,givenName,department,title,managere0001,鈴木,一郎,開発部,部長,e0002,田中,二郎,開発部,,e0001e0003,斎藤,三郎,営業部,部長,e0004,武田,四朗,営業部,,e0003早速、設定をしていきます。Managerからの設定となります。MAを以下の通り作成します。Flowなどの設定はMA設定時には行わない、という点です。※ちなみにmanager属性は他のエントリへの参照となるのでreferenceタイプ属性として定義します。MAの定義が終わったら、実行プロファイルの作成はしておきます。今回作成したのは以下の2つです。Managerから作成します。ConnectionServer:.(ピリオド。Flowの設定を行います。expectedRulesList(これはお決まり)MAの定義が終わったら、実行プロファイルの作成はしておきます。今回作成したのは以下の2つです。Rule)設定さていよいよILM"2"からの新しい設定です。Rulesを開き、[NEW]より新しい同期ルールを作成します。今回はHR.CSVからの入り方向の同期ルールを設定します。Extensionをガリガリ書く、というのは減ったかもしれません。MIISやILM2007では「同期」と「プロビジョニング」が明確にわかれていしたが、今回からコードを書かなくてもプロビジョニングしてもらえます。manager属性値の結合や固定文字列の挿入もWebダイアログで定義します。4.同期の準備(初期化)MAとISRの作成が完了したら実際に取り込みを行ってみます。以下の実行プロファイルを実行し、実際の同期の準備を行います。次に実際のHR.CSVを取り込んで見ます。それぞれのMAにて以下の順番でプロファイルを実行します。Portalのユーザ管理ページを見るとユーザが作成されているのがわかります。取り込み側の同期Ruleはそれほど難しくないので、問題はOSR(外向きの同期)です。こちらも現在いろいろと試しているので、まとまったらアップしていきます。IdMの最新版が12月5日にリリースされるようです。※7.0はロゴをMaXwareからSAPに変えたくらいだったので。NetWeaverポータルとのデータ連携を容易にするテンプレートを大幅に追加し、導入時における作業の低減、導入期間の短縮、それによるコスト削減が可能です。従来のユーザー情報、権限情報の管理から、権限情報の設定も可能となり、より統一されたID情報管理が可能となります。ACで双方向に連携することができるようになり、職務分掌を実現するための、アプリケーション使用権限管理、リスク分析の機能を双方向で呼び出すことができます。IdMのマルチベンダー環境への柔軟なユーザー・権限管理機能を包括的に利用することで、企業内に存在するITシステムのリスクを削減し、強固なセキュリティを実現します。企業内において、人事情報とシステムユーザー情報は社員IDと密接に関係しており、連動した管理の重要性が高まっております。IdMでは、人事異動など変更情報のみ取得することで、よりリアルタイムなID情報管理が可能になります。IdMを包括的に利用することで異各システムに対し企業内の人事イベントに即した迅速なID情報提供が可能になります。基本機能はMaXware時代にほぼ完成されていたと思うので、SAPが買収した意義を出すためにもERPベンダの得意技?であるテンプレートの強化(上記1)をしてきたんだと思いますが、はたして日本でどこまで使えるのか・・・(MaXware製品は良くも悪くもフレームワーク製品だったので”ある意味”何でも出来る製品でした)後は、GRCなどのSAPコンポーネントとの連携については当然の流れでしょう。この流れで他社のIdM製品とのSAPコンポーネント群との連携が非サポートになったりしなければ良いのですが。RC0環境構築「同期ルール設定編その1」さて、サーバサイドコンポーネントのインストールが完了したので、実際のレポジトリの同期を試してみたいと思います。その前にILM"2"ではこれまでのMIIS、ILM2007とは同期の考え方が大幅に変わっているので、考え方を整理しておく必要があります。Agent)のプロパティとして設定をしてきました。Rule(OSR)という考え方が導入されており、MAの定義と同期のルールが分離されています。Serviceの設定として作成したMAに対する同期ルールとして定義を行う形になります。Manager上からMAの定義として設定する必要があったりします。具体的な設定の流れを次回は解説したいと思います。ILM2008年11月19日水曜日ActiveDirectoryのunicodePWDをLDAPSで変更するとあるIdM製品ベンダの知り合いの方から「ADのunicodePWD属性ってLDAPSで変更できますよね?」と言われて、そういえば以前やったことあるな~というのを思い出しました。3年ほど前に別blogに書いたネタがあるので転記しておきます。(いささか古いネタなので最近の環境での動作は微妙?)■タイトルActiveDirectoryのunicodePWD属性の変更をSolarisから行なう■内容とサンプルスクリプト(当時のまま転記)簡単に書くと、1.サーバ証明書の発行(Windows証明書サービスで実施)2.証明書をSolarisへインストール3.Perl等のスクリプトでLDAPS接続して属性更新となる。注意点は、Windowsで証明書を発行する際に「Webサーバ」のテンプレートを使用して証明書を発行することくらい。必要物は以下のとおり。RC0インストール「サーバサイドコンポーネントセットアップ編その1」まずは、今回インストールするサーバサイド環境は以下の3台のサーバで構成します。※ドメインコントローラ、Exchangeサーバの構築はここでは省略しますので、ILM"2"サーバのインストールを始めます。1.必要アカウントの作成1ドメイン上に以下のアカウントを作成します。Users2Exchange上にメールボックスを作成します。対象はとりあえず・ilm2admin・ilm2serviceです。以下の順に必要環境をセットアップします。・Administrator@ilm2.local(WSSインストール用)・ilm2admin@ilm2.local(ILMインストール用)にsysadmin権限を与える。注意)ilm2admin@ilm2.localのデフォルトの言語をEnglishにしておかないとILMインストール中に以下のようなエラーが出る。・ilm2syncservice・ilm2service・ilm2maについて・バッチジョブとしてログオンを拒否する・ターミナルサービスを使ったログインを拒否する・ネットワークで経由コンピュータへアクセスを拒否するの設定を実施する。?がある模様で正常に設定できない。install.logjapaneseのみを選択する(RC0ではどちらか片方しかインストール出来ない)IEの言語設定を日本語(ja-JP)優先にする→マニュアルによるとこれで日本語化されるとのことだが、現状ならない。IEの言語設定を日本語優先にするとSyncRule設定などのボタン類が正常動作しなくなるのでやはり英語環境しかない?次回は、簡単なシナリオをベースに実際のデータ同期の設定方法を書こうと思います。RC0インストール「サーバサイドコンポーネント準備編その2」インストールに先出ち、必要なアカウントと権限の確認をしておきます。※今回はILM"2"のコンポーネントのインストールに必要なユーザに限定しますので、以下とは別にExchangeやSQL、WSSをセットアップするアカウントが必要になります。※すべてActiveDirectory上に作成します。・バッチジョブとしてログオンを拒否する・ターミナルサービスを使ったログインを拒否する・ネットワークで経由コンピュータへアクセスを拒否するの設定を行っておきます。次回はいよいよインストールを開始します。Providerになるという発表がありましたが、当初はホワイトリスト方式でRPを選ぶ、という変な制限がついていました。これはOpenIDの考え方にアンマッチだな~と思っていたんですが(逆ならわかりますが)、やっぱり制限が撤廃されました。http://google-code-updates.blogspot.com/2008/10/moving-another-step-closer-to-single.htmlまぁ実情はホワイトリストに載りたいRPの申請が大量に来たから、というところみたいです。RC0インストール「サーバサイドコンポーネント準備編その1」(11/14追記)最初に宣言してから早1ヶ月半。ILM"2"の導入記録をまとめていきます。サーバサイドコンポーネントのインストールを実施する前に必要な環境の確認をします。サーバサイドは以下の4つのコンポーネントで構成されます。Portalそれぞれをインストールするのにに必要なソフトウェア環境は下記の通りです。64bitSP1英語版+言語パック(11/14追記。日本語版を使うとインストールに失敗する)今回は上記の全コンポーネントを1台のサーバにインストールする予定なので、以下をインストールします。管理コンソール(11/14追記。64bitSP1英語版+言語パック(11/14追記。日本語版を使うとインストールに失敗する)次回はインストールの準備作業編の予定です。2008」に参加してきました。Ecosystem」ということで、アイデンティティ管理に関連する信頼性確保やプライバシー保護に関する話がメインでした。Framework」の話をしたり、相互運用性に関するパネルではLiberty、OpenID、CardSpaceについて、セキュリティ、プライバシー保護という観点での取り組みを紹介したりと盛りだくさんでした。ポイントはそれぞれこんな感じ。AllianceではIAF、OpenIDではReputation、PAPEのようにIdP/OPの信頼性を保証するための枠組みの策定に注力している(実際に商用利用するにはまだまだ、といったところですが)・プライバシー保護SPへ提供する属性情報をユーザに選択/確認させる、という仕組みが実装されてきつつある。CardSpaceのデモもあり、InfoCardの中のどんな属性が実際にSPに提供されるかをユーザがあらかじめ確認する様子がみれました。後は、こういうイベント恒例の新技術、プロジェクトの発表。11/14リリース・Genevaの(おそらく)国内初の発表(LibertyだけにSAML2.0サポート※がポイント)※どこまでサポートするかは未定とのことですが。RC0リリース久しぶりにconnectサイト(http://connect.microsoft.com)を見たらILM"2"がRC0版がリリースされていました。ダウンロードはしたので、セットアップしてみようと思います。packも合わせてダウンロードできるようになっており、やっと日本語環境が使えるようになりそうです。64bit版しかダウンロードできないみたいです。MSのプランとしては32bit版も出てくる予定らしいのですが・・・。(検証するのに64bit環境が用意しにくいので出来れば32bit版が手に入るとうれしいんですが)ILMチームのblogへはとりあえは32bitイメージのリクエストをしてみました。・メジャー海外製品はべらぼうに高い・何となく国産は安心?なんて言われるし、ベンダ側もそれに同調している(当たり前か)。国産か否かという次元ではなく何のためにIdMを導入するのかという視点にたつと、上のような話は選定基準としてまったく意味がなくなってしまいます。私見ですが、まだまだ国産のIdM製品はライフサイクル管理、同期、プロビジョニングを中心機能として考えていると思いますが、対して洋物のメジャー製品は一歩進んだ?IdMを考えていると思います。・IDが沢山あるから自動管理できるシステムを導入しましょう、というアプローチ→レガシーなID管理(同期、プロビジョニング)・IDが沢山あるから出来るだけIDを減らすためのシステムを導入しましょう、というアプローチ→SSOやFederationをプロダクトの中心に据えつつある?の違い。どちらが根本的な課題を解決しているか、というとやっぱり後者だと思います。サービス側の対応が前提になる点で後者の導入はそれなりにハードルも高いし、技術仕様などもまだまだ完全に整備されているとは言えない状態です。国産IdMパッケージベンダさんもなるべく早い段階で後者のアプローチにシフトしていって欲しいもんです。国産は安心だし(笑)国産品の代表?どれも一長一短だとは思いますが、やっぱりインターフェイスが日本語なのが最高です。Manager当Blogの主題の各プロダクトのレビューはまた時間のあるときに。CameronのセッションでMicrosoftのアイデンティティ関連のソフトウェアとサービスのロードマップが発表されていました。今回のPDCのテーマはどうやら「Software+Services」だそうです。クラウドコンピューティングを強く意識しているようですね。今回発表されたのは、以下の枠組み。ServerのSAML2.0サポート。サードパーティSTSとのフェデレーションができるようになりました。Managerとの連携デモも見せてました。Framework上で動くアプリケーションのゲートウェイをしてくれるらしいです。PassportではMicrosoftがInternet上の唯一のIdPになろうとして失敗したので今回はあくまで”サービス”に徹するということでしょうか?二の舞にならないことに期待??です。IDがOpenIDをサポートなかなか時間がとれずILM"2"に触れていないのでニュースから。関連URL:http://winliveid.spaces.live.com/blog/cns!AEE1BB0D86E23AAC!1745.entry?wa=wsignin1.0早速試してみました。IDはすでに取得しているので、https://login.live-int.com/beta/ManageOpenID.srfへアクセスしてサインイン(右)LiveIDに紐付されたOpenIDが表示されます(初回はエイリアスを登録します)このOpenIDをコピーして、サンプルRPサイトへアクセス。http://openidenabled.com/ruby-openid/trunk/examples/consumer先程のOpenIDを入力してVerify。succeeded.と表示されればめでたしめでたし。始めてみますはじめまして。これまでを含めいろいろと関わったIdM製品の検証結果などを書いていくつもりです。2007(ILM2007)の後継のILM"2"β3について書いていこうと思います。よりアクセス解析を行っています。品質向上のみを目的とし、個人の特定などを目的とはしておりません。中で公開されることはあります。問い合わせ不明点等は管理人までご連絡ください。本プライバシーポリシーは予告なく変更/削除することがあります。プライバシーに関するトラブルについては一切の責任を負いかねますのでご了承ください。