2008年12月26日金曜日

ActiveDirectoryへのパスワード変更をフックする

IdM案件をやっていると、どうしても出てくるのがパスワード同期のお話。
基本的にIdM側のパスワード変更画面を使ってもらうのがベターなのですが(システム構造的にも、機能面でも)、中にはやっぱりCTRL+ALT+DELでのパスワード変更がやめられない!というユーザさんもいらっしゃるのかと。

恐らくそのような要件を満たすためにパッケージベンダ各社はいろいろな努力をしていると思います。
例えば、
・Microsoft(Identity Lifecycle Manager 2007)
・SunMicrosystems(Sun Java System Identity Manager):
・SAP(NetWeaver Identity Management)
・エクスジェン・ネットワークス(LDAP Manager)
などではActiveDirectoryへのパスワード変更をIdM側へ取り込む機能を実装してきています。
※ILM"2"でのクライアント側へのモジュールインストールは反則かと・・・

今回はそのあたりの仕掛け(どうなっているのか?)をひも解いてみようと思います。
まず、Windowsのパスワード変更の仕組みを整理します。

ユーザからのパスワード変更要求があると、
1.Local Security Authority(LSA)が要求を受け付ける
2.レジストリに登録されているパスワードフィルタDLLでパスワード検査を行う
3.検査をパスしたらSecurity Account Manager(SAM)にパスワードを保管する
4.正常に保管できたらレジストリに登録されているパスワードフィルタDLLに変更通知を行う
という流れでパスワードが変更されます。













それぞれのプロセスを細かく見ていくと、以下のような流れになっています。

1.Local Security Authority(LSA)が要求を受け付ける
  lsass.exeというサービスプロセスが要求を受け付けます。

2.レジストリに登録されているパスワードフィルタDLLでパスワード検査を行う
  以下のレジストリに登録されているDLLに実装されているPasswordFilter()が順番に呼び出され、パスワードポリシーのチェックなどのフィルタリング処理が行われます。

  [レジストリエントリ]
  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\Notification Packages











  この関数がFALSEを返すとその時点でパスワードポリシー違反としてユーザへ通知されます。







3.検査をパスしたらSecurity Account Manager(SAM)にパスワードを保管する
  これは文字通りアカウントDBへのデータ更新です。

4.正常に保管できたらレジストリに登録されているパスワードフィルタDLLに変更通知を行う
  これも2と同じく各DLLのPasswordChangeNotify()が呼び出されます。


最後のPasswordChangeNotify()の引数に対象ユーザのユーザ名とクリアテキストのパスワードがわたってくるのを利用して、あたかもActiveDirectoryのパスワードを吸い出しているような動きに見せている、というのが各IdM製品の実際の仕掛けです。(たぶん)
また、この動きを見るとわかりますが、あくまでlsass.exeがローカルのDLLに実装された関数を使うので、パスワード変更要求を受け付けるコンピュータ上にフィルタを配置する必要があります。
つまり、ローカルユーザのパスワードをフックする場合はローカルコンピュータ上に、ActiveDirectoryユーザの場合はすべてのドメインコントローラ上に配置する必要があります。

※ちなみに2のPasswordFilter()の引数にもユーザ名とパスワードはわたってきますが、実際にパスワードが更新される前ですし、他のライブラリを使ったパスワードポリシーチェックが完了していないのでこの段階で吸い出してもあまり意味がありません。


ということで、実際の動きをみるためにもDLLを実装してみました。(久しぶりにベタベタなアンマネージコードを書いたので恥ずかしいのですが・・・)

開発環境は、
・OS/AD:Windows Server 2003 R2
・開発ツール:Visual Studio 2005/VC++
です。

ビルドし、出来たDLLをC:\Windows\system32(%systemroot%\system32)以下にコピーし、上記のレジストリに出来上がったDLLの拡張子を除いたファイル名を登録してシステムを再起動すると配置完了です。
上手くいけばパスワードを変更するとCドライブ直下に「PasswordChangeLog.txt」というファイルが出来上がります。
中身は、
 sAMAccountName=変更したユーザ名,unicodePwd=新しいパスワード
という形で、パスワード変更がどんどん記録されていきます。
※悪用厳禁ですね。。。

以下、実際のコードです。

■PasswordHook.cpp

#include
#include
#include

#define LOGFILE "C:\\PasswordChangeLog.txt"

#ifndef STATUS_SUCCESS
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
#endif

//
// ログ出力
//
void WriteToLog(const char* str)
{
 if (NULL == str)
 {
  return;
 }
 FILE* log;
 log = fopen(LOGFILE, "a+");
 if (NULL == log)
 {
  return;
 }
 fprintf(log, "%s\r\n", str);
 fclose(log);
 return;
}

//
// パスワードの変更・保管に成功した際に呼び出される
//
NTSTATUS NTAPI PasswordChangeNotify(
  PUNICODE_STRING UserName,
  ULONG RelativeId,
  PUNICODE_STRING NewPassword
)
{
 int nLen=0;

 // 文字列変換(ワイド文字列→マルチバイト文字列)
 // UserName
 nLen = wcslen(UserName->Buffer)+1;
 LPSTR username = (LPSTR)malloc(nLen * sizeof(CHAR));
 ZeroMemory(username,nLen);
 wcstombs(username, UserName->Buffer, nLen);

 // NewPassword
 nLen = wcslen(NewPassword->Buffer)+1;
 LPSTR password = (LPSTR)malloc(nLen * sizeof(CHAR));
 ZeroMemory(password,nLen);
 wcstombs(password, NewPassword->Buffer, nLen);

 // 記録用文字列生成
 LPSTR LogEntry = (LPSTR)malloc(strlen(username)+strlen(password)+28);
 ZeroMemory(LogEntry,sizeof(LogEntry));
 sprintf(LogEntry,"sAMAccountName=%s,unicodePwd=%s",username,password);
 WriteToLog(LogEntry);

 return STATUS_SUCCESS;
}

//
// パスワード変更要求があった際に呼び出される
// パスワードポリシー等のフィルタがある場合はここに記載する
//
BOOL NTAPI PasswordFilter(
  PUNICODE_STRING AccountName,
  PUNICODE_STRING FullName,
  PUNICODE_STRING Password,
  BOOLEAN SetOperation
)
{
 return TRUE;
}

//
// DLLロード時に呼び出される(lsass.exeより呼び出される)
//
BOOL NTAPI InitializeChangeNotify(void)
{
 return TRUE;
}


■PasswordHook.def

LIBRARY "PasswordHook"

EXPORTS
 InitializeChangeNotify
 PasswordChangeNotify
 PasswordFilter

2008年12月18日木曜日

ILM"2" RC0環境構築「同期ルール設定編その3~OSR」(12/28 追記)

さて、前回はCSVファイルからILM"2"へのユーザの取り込み設定を行いましたが、今回はCSVから取り込んだユーザをActive Directoryへ同期してみます。また、同時にILM"2"ポータル上でユーザ情報を編集した場合もCSVファイル上のユーザ情報と合わせてActive Directoryへ同期できるようにします。

1.Identity Lifecycle Manager用MAの設定
 前回のISR設定時に定義したILMSDB MAに逆方向(ILM"2" ポータル上で作成したユーザもMetaverseに取り込みたいので)の属性フローを設定します。 ただ、RC0では既存のMAのプロパティを変更して保存しようとするとエラーが出るので、Export Management Agent→手動でXMLファイルの編集→Update Management Agentをするか、MA自体を再作成します。(私の環境の問題かも知れませんが・・・)
12/28 connectサイトにMicrosoft Identity Integration Serverサービスを再起動すれば直るとの情報がありました。試してみると確かに治ります。が、何をトリガーに事象が発生するのかは依然不明です・・・








 変更箇所はAttribute Flow部分です。前回はExportのみを設定しましたが、今回は同じ属性についてImportも設定します。
 Configure Attribute Flow
  Datasource(ILMSDB) Metaverse
  AccountName → accountName
  LastName → sn
  FirstName → givenName
  DisplayName → displayName
  Email → email
  Department → department
  JobTitle → title
  Manager → manager














2.Active Directory Domain Service用MAの作成

 以下の通りMAを作成します。
  MA名:ADDS MA
  Connect to Active Directory Forest
   Forest name:ilm2.local
   User name:Administrator
   Password:xxx
   Domain:ilm2.local
  Configure Directory Partitions
   Select directory partitions:DC=ilm2,DC=local
   Select containers for this partition:OU=ilm2users,DC=ilm2,DC=local
  Select Object Types
   userを追加でチェック
  Select Attributes
   displayName
   givenName
   mail
   manager
   sAMAccountName
   sn
   title
   unicodePwd
   userAccountControl

 次に以下の実行プロファイルを作成しておきます。
  Full Import
  Full Synchronization
  Export

3.Outbound Synchronization Rule(OSR)の作成

 次はILM"2"ポータルの管理画面よりOSRを作成します。操作方法は前回のISR作成時とほぼ同じです。

 General Information
  Name:OSR ADDS
  Flow Type:Outbound
 Scope
  Metaverse Object Type:person
  Connected System:ADDS MA
  Connected Object Type:user
 Relationship
  Relationship Criteria
   MetaverseObject:person(Attribute):accountName
   ConnectedSystemObject:user(Attribute):sAMAccountName
  Object Creation in Connected System:True
 Outbound Attribute Flow
  Metaverse    ADDSコネクタ空間
  ○accountName → sAMAccountName
  ○"CN="+accountName+",ou=ilm2users,dc=ilm2,dc=local" → dn
  ○512(数値) → userAccountControl
  ○"P@ssw0rd" → unicodePwd
   email → mail
   sn → sn
   givenName → givenName
   manager → manager
   displayName → displayName
   department → department
   title → title
  ※○は初期同期のみ











4.同期対象ユーザセットの作成

 同期対象のユーザを絞り込むため、オブジェクトセットを作成します。 ここではシステムユーザ以外は全員対象としたいので、ilm2adminとBuilt-inユーザ以外でセットを作成します。

 Basic Info
  Name:[SET]NonSystemUsers
 Dynamic Membership
  対象:people
  条件:match all
     Display Name is not ilm2admin
     Display Name not starts with Built-in
   →Display Nameがilm2adminではなく、Built-inで始まらないユーザのみを対象とします。










5.OSR適用フローの作成(Action Flow)

 OSRを実際に実行するためのアクションフローを作成します。
 Basic Information
  Workflow Name:AW ADDS
  Workflow Type:Action
 Activities
  Activity Picker:Synchroniozation Rule Activity
  Synchronization Rule:OSR ADDS
  Action Selection:Add











6.管理ポリシールール(Management Policy Rule/MPR)の作成

 4て定義したオブジェクトセットに5で定義したアクションフローが実行できるようにMPRを作成します。

 General Information
  Display Name:MPR ADDS
 Requesters and Operations
  Requesters:Specific Set of Requesters:[SET]NonSystemUsers
  Operation:Create resource、Modify resource attributes
 Target Resources
  Target Resource Definition Before Request:
   Specific Set of Objectes:[SET]NonSystemUsers
  Target Resource Definition After Request:
   Specific Set of Objectes:[SET]NonSystemUsers
 Policy Workflows
  Action:AW ADDS


7.同期の実行

 実際に定義したルールを動かしてみます。
 まず、Active Directoryのツリー構造を一旦コネクタ空間へ取り込むため、ADDS MAのFull Importを実行します。
 次にILMSDBのFull Importを行い、先ほど作成した同期ルールを含む情報をコネクタ空間へ取り込みます。
 その状態でILMSDBのコネクタ空間とMetaverseの同期を行います。 すると、OSRが実行されるので、ADDS MA(CS)へユーザが追加されます。
 そこまで来たら後はADDS MAでExportすればAD上へユーザが作成されます。

8.AD上のユーザ確認

 ドメインコントローラにログインし、ActiveDirectoryユーザとコンピュータでユーザが作成されていることが確認できます。






















これで基本的に入方向と出方向の両方の同期ができました。
他にもパスワードの同期や承認フローの設定など色々と試すことがあるので、いずれ解説したいと思います。(それよりもMPR、AW、SETの考え方、ERL属性の仕組みを整理した方が全体の理解が進むかもしれませんが。。。このあたりがこの製品をややこしくしている根源な気がします)

2008年12月12日金曜日

ASP.NETでOpenID対応サイト作成

PerlやPHPでのOpenID対応サイトの作り方は結構あるので、ASP.NETで作ってみました。
OpenIDのライブラリはGoogleが公開しているものを以下からダウンロードしました。
http://code.google.com/p/dotnetopenid/downloads/list

開発環境は、
OS:WindowsXP Pro SP3
IDE:Visual Studio 2005 Professional Edition
.NET Framework:2.0.50727
です。

以下の手順で作成・確認します。
1.Visual Studioで新規Webアプリケーションを作成








2.参照設定にGoogleからダウンロードしたライブラリ(DLL)を設定









3.ツールボックスにダウンロードした部品(OpenIdLogin)を追加し、Webページに追加








ツールボックス→右クリック→アイテム選択→参照より先ほどのDLLを追加する。








Webページ上へOpenIdLoginをドラッグ&ドロップする。










4.認証状態を表示するための部品(ラベルなど)をWebページに追加








ページがロードされたときに状態をラベルに表示するため、以下のコードを追加する。(Default.aspx.vb)

Partial Class _Default
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Lbl_UserID.Text = User.Identity.Name
lbl_IsAuthenticated.Text = IIf(User.Identity.IsAuthenticated, "True", "False")
End Sub

End Class


5.フォーム認証を使う様に環境を設定

WebサイトメニューよりASP.NET構成を開き、Webサイト管理ツールより、
セキュリティ→認証の種類の選択のリンクをたどり、ユーザがサイトにアクセスする方法を「インターネットから」へ変更する。









6.ビルド、テスト

実行すると、認証前の状態ではUserIDは空白、IsAuthenticatedはFalseになっているので、先日紹介したWindowsLiveのOpenIDを入力してLoginをクリックする。









WindowsLiveの認証ページへリダイレクトされるので、パスワードを入力してサインインする。









認証が成功すると、UserIDにOpenID、IsAuthenticatedにTrueが返される。











とりあえずということもあり単純にログインおよび状態の表示のみをしましたが、その他の機能もそのうち使ってみたいと思います。

2008年12月6日土曜日

ILM"2" RC0環境構築「同期ルール設定編その2~ISR」

しばらく間が空いてしまいました。
出張続き&家族全員でノロにかかったりとばたばたしてました。

さて、前回の予告通り実際の同期ルールの設定を試してみます。
今回はその中でもISR(Inbound Synchronization Rules)、要するにMetaverseおよびILM Serviceへのエントリの取り込みを行います。

流れとしてはシンプルに人事データの入ったCSVファイルを取り込んでいきます。

0.準備
 用意したCSVファイル(hr.csv)は以下の通り。

  カラム ヘッダ列
  -------------------------
  従業員ID empId  
  姓 sn  
  名 givenName
  組織名 department
  役職 title
  上長 manager

  デリミタ:カンマ
  クォート:なし

  例)
  empId,sn,givenName,department,title,manager
  e0001,鈴木,一郎,開発部,部長,
  e0002,田中,二郎,開発部,,e0001
  e0003,斎藤,三郎,営業部,部長,
  e0004,武田,四朗,営業部,,e0003


早速、設定をしていきます。

1.CSV取り込み側のMA(Management Agent)設定

 これまでと同様にIdentity Managerからの設定となります。

 まずはMAを以下の通り作成します。
  MA名:HR CSV MA
  MAタイプ:Delimited text file
  Anchor:empId
  ObjectType:person








 


 ポイントは、設定する内容は
 ・入力ファイルの定義
 ・取り込む属性の定義
 ・マッピングするオブジェクトタイプの定義
 のみが必要で、それ以外のAttribute Flowなどの設定はMA設定時には行わない、という点です。
 ※ちなみにmanager属性は他のエントリへの参照となるのでreferenceタイプ属性として定義します。

 MAの定義が終わったら、実行プロファイルの作成はしておきます。
 今回作成したのは以下の2つです。
 ・Full Import
 ・Full Synchronization

2.ILM側のMA(Management Agent)設定

 次はILM用のMAを同じくIdentity Managerから作成します。

 MA名:ILMSDB MA
 MAタイプ:Identity Lifecycle Manager
 Primary Connection
  Server:.(ピリオド。DBサーバ同居構成なので)
  Database:MSILM(これはお決まり)
 Authentication mode
  Windows integrated authentication
  Usernamae:ilm2admin
  Domain:ilm2.local
 Configure Object Type Mappings
  Person:person










 こちらは他のMAとは違い、従来通りのAttribute Flowの設定を行います。

 Configure Attribute Flow
  Datasource(ILMSDB) Metaverse
  AccountName ← accountName
  LastName ← sn
  FirstName ← givenName
  DisplayName ← displayName
  Email ← email
  Department ← department
  JobTitle ← title
  Manager ← manager
  ExpectedRulesList → expectedRulesList(これはお決まり)










 MAの定義が終わったら、実行プロファイルの作成はしておきます。
 今回作成したのは以下の2つです。
 ・Full Import
 ・Full Synchronization
 ・Export

3.ISR(Inbound Synchronization Rule)設定

 さていよいよILM"2"からの新しい設定です。
 ILM"2" Portal(http://ILM Portalサーバ/identitymanagement/default.aspx)を開き、AdministrationリンクからSynchronization Rulesを開き、[NEW]より新しい同期ルールを作成します。

 今回はHR.CSVからの入り方向の同期ルールを設定します。










 General Information
  Name:HR CSV
  Flow Type:Inbound
 Scope
  Metaverse Object Type:person
  Connected System:HR CS MA(Identity Managerで先ほど作成したMAが選択できるようになっている)
  Connected Object Type:person(こちらもMAに定義したObject Typeを選択する)










 Relationship
  Relationship Criteria
   accountName=empId(CSとMVのエントリの紐付け条件)
  Object Creation in ILM:true(ILMポータル上にユーザを作成するかどうか)











 ここからがこれまでMAに設定してきたAttribute Flowの設定です。
 ある程度の文字列操作関数などはあらかじめ用意されているのでRules Extensionをガリガリ書く、というのは減ったかもしれません。またMIISやILM2007では「同期」と「プロビジョニング」が明確にわかれていしたが、今回からコードを書かなくてもプロビジョニングしてもらえます。











 Inbound Attribute Flow
  Source → Destination
  empId → accountName
  sn → sn
  givenName → givenName
  givenName+" "+sn → displayName
  empId+"@ilm2.local" → email
  department → department
  title → title
  manager → manager

 属性値の結合や固定文字列の挿入もWebダイアログで定義します。










4.同期の準備(初期化)

 MAとISRの作成が完了したら実際に取り込みを行ってみます。
 以下の実行プロファイルを実行し、実際の同期の準備を行います。

 ILMSDB MA
  Full Import
  Full Synchronization
  Export

5.同期の実行

 次に実際のHR.CSVを取り込んで見ます。

 それぞれのMAにて以下の順番でプロファイルを実行します。

 HR CSV MA
  Full Import
  Full Synchronization
 ILMSDB MA
  Full Synchronization
  Export

6.画面で確認
 ILM Portalのユーザ管理ページを見るとユーザが作成されているのがわかります。











さて、取り込み側の同期Ruleはそれほど難しくないので、問題はOSR(外向きの同期)です。こちらも現在いろいろと試しているので、まとまったらアップしていきます。

2008年11月27日木曜日

SAP NetWeaver Identity Management 7.1

SAPよりNetWeaver IdMの最新版が12月5日にリリースされるようです。
http://www.sap.com/japan/about/press/press.epx?pressid=10507

2007年5月にMaXware買収を発表してから1年半、買収直後のSAPブランドでのリリース(NetWeaver IdM7.0)からはたしてどのくらいの進化をしたのか・・・
※7.0はロゴをMaXwareからSAPに変えたくらいだったので。

さて、新機能は以下の通り。

1. システムに対し簡単なID配信を可能にする機能を強化
SAP ERP HCM、SAP GRC Access ControlなどのSAP製品やSAP NetWeaverポータルとのデータ連携を容易にするテンプレートを大幅に追加し、導入時における作業の低減、導入期間の短縮、それによるコスト削減が可能です。さらに、従来のユーザー情報、権限情報の管理から、権限情報の設定も可能となり、より統一されたID情報管理が可能となります。
 
2. SAP GRC Access Controlとの連携強化
最新版では、SAP NetWeaver IdMとSAP GRC ACで双方向に連携することができるようになり、職務分掌を実現するための、アプリケーション使用権限管理、リスク分析の機能を双方向で呼び出すことができます。
SAP GRC ACのSAPシステムに対するユーザー・権限管理機能と、SAP NetWeaver IdMのマルチベンダー環境への柔軟なユーザー・権限管理機能を包括的に利用することで、企業内に存在するITシステムのリスクを削減し、強固なセキュリティを実現します。
 
3. SAP ERP Human Capital Managementとの連携強化
企業内において、人事情報とシステムユーザー情報は社員IDと密接に関係しており、連動した管理の重要性が高まっております。従来人事情報の取得が全データ単位で行われていたのに対し、SAP NetWeaver IdMでは、人事異動など変更情報のみ取得することで、よりリアルタイムなID情報管理が可能になります。SAP ERP HCMとSAP NetWeaver IdMを包括的に利用することで異各システムに対し企業内の人事イベントに即した迅速なID情報提供が可能になります。


まぁ基本機能はMaXware時代にほぼ完成されていたと思うので、SAPが買収した意義を出すためにもERPベンダの得意技?であるテンプレートの強化(上記1)をしてきたんだと思いますが、はたして日本でどこまで使えるのか・・・(MaXware製品は良くも悪くもフレームワーク製品だったので”ある意味”何でも出来る製品でした)
後は、GRCなどのSAPコンポーネントとの連携については当然の流れでしょう。
この流れで他社のIdM製品とのSAPコンポーネント群との連携が非サポートになったりしなければ良いのですが。。。

2008年11月23日日曜日

ILM"2" RC0環境構築「同期ルール設定編その1」

さて、サーバサイドコンポーネントのインストールが完了したので、実際のレポジトリの同期を試してみたいと思います。

と、その前にILM"2"ではこれまでのMIIS、ILM2007とは同期の考え方が大幅に変わっているので、考え方を整理しておく必要があります。

これまでは同期時の属性マッピングなどはすべて各MA(Management Agent)のプロパティとして設定をしてきました。











ところが、ILM"2"では新しく
・Inbound Synchronization Rule(ISR)
・Outbound Synchronization Rule(OSR)
という考え方が導入されており、MAの定義と同期のルールが分離されています。
(ややこしいですが・・・)

これからは同期設定の流れとしては、従来のIdentity ManagerからMA自体の作成と実行プロファイルの作成は行いますが、属性同期(Attribute Flow)設定はILM PortalからILM Serviceの設定として作成したMAに対する同期ルールとして定義を行う形になります。
ただ、ILM Serviceだけは新しく定義されたMAタイプのIdentity Lifecycle Managerを使って属性同期設定をIdentity Manager上からMAの定義として設定する必要があったりします。。。











具体的な設定の流れを次回は解説したいと思います。

2008年11月19日水曜日

ActiveDirectoryのunicodePWDをLDAPSで変更する

とあるIdM製品ベンダの知り合いの方から「ADのunicodePWD属性ってLDAPSで変更できますよね?」と言われて、そういえば以前やったことあるな~というのを思い出しました。
 
3年ほど前に別blogに書いたネタがあるので転記しておきます。(いささか古いネタなので最近の環境での動作は微妙?)

■タイトル
 ActiveDirectoryのunicodePWD属性の変更をSolarisから行なう
■内容とサンプルスクリプト(当時のまま転記)

簡単に書くと、
1.サーバ証明書の発行(Windows証明書サービスで実施)
2.証明書をSolarisへインストール
3.Perl等のスクリプトでLDAPS接続して属性更新
となる。
注意点は、Windowsで証明書を発行する際に「Webサーバ」のテンプレートを使用して証明書を発行することくらい。

尚、必要物は以下のとおり。
【Windows側】
・ActiveDirectory
・証明書サービス
・IIS(証明書サービス用)
【Solaris側】
・OpenSSL
・Perl::LDAPSモジュール

【サンプルPerlスクリプト】
#!/usr/bin/perl -wuse strict;
use Net::LDAPS;

my($Ad, $mesg, $uid, $pass, $npass, $dn, $rtn);
$uid = "test";
$pass = "hoge";

print "Trying to set $uid to password $pass\n\n";
# Bind to the AD server
$Ad = Net::LDAPS->new("server.hoge.local",port => 636,capath => '/usr/local/ssl/certs/cacert.pem') or print "error connecting ad\n", exit 2;
$Ad->bind("CN=Administrator,CN=Users,DC=hoge,DC=local",password=>"password") or print "Unable to bind to AD server\n", exit 2;

# Do a AD lookup to get the dn for this user
# then change their password.
$mesg = $Ad->search(base => "ou=test,dc=hoge,dc=local", scope => "sub", filter => "(CN=test)");
if($mesg->count != 1) {
print "AD lookup failed for user $uid\n";
exit 3;
}
$dn = $mesg->entry(0)->dn;
map { $npass .= "$_\000" } split(//, "\"$pass\"");
print $dn;
$rtn = $Ad->modify($dn,replace=>["unicodePwd",$npass]);
if($rtn->{'resultCode'} != 0) {
print "User $uid, setting password failed\n";
exit 2;
}
print "Password for $uid changed in AD\n";
exit 0;

2008年11月18日火曜日

ILM"2" RC0インストール「サーバサイドコンポーネントセットアップ編その1」

まずは、今回インストールするサーバサイド環境は以下の3台のサーバで構成します。
・ドメインコントローラ
・Exchangeサーバ
・ILM"2"サーバ

-サーバコンポーネント構成










※ドメインコントローラ、Exchangeサーバの構築はここでは省略しますので、ILM"2"サーバのインストールを始めます。

1.必要アカウントの作成
 ①ドメイン上に以下のアカウントを作成します。
 ・SQL Serverインストールアカウント
  sqladmin@ilm2.local(Domain Users)
 ・ILM"2"インストールアカウント
  ilm2admin@ilm2.local(Domain Admins)
 ・ILM Synchronization Serviceアカウント
  ilm2syncservice@ilm2.local(Domain Admins)
 ・ILM Serviceアカウント
  ilm2service@ilm2.local(Domain Admins)
 ・ILM MAアカウント
  ilm2ma@ilm2.local(Domain Users

 ②Exchange上にメールボックスを作成します。
  対象はとりあえず
  ・ilm2admin
  ・ilm2service
  です。

2.必要ソフトウェア類のセットアップ 以下の順に必要環境をセットアップします。
 ①OSコンポーネントのセットアップ
  ・Windows Server 2008 64bit Enterprise Editionのインストール
  ・ドメインに参加
  ・役割の追加
   ・Webサーバ(IIS)
    デフォルトでは以下の役割サービスにチェックが入っていないのでチェックする
     HTTP基本機能
     ・HTTPリダイレクション
     アプリケーション開発
     ・ASP.NET
     ・.NET拡張性
     ・ISAPI拡張
     ・ISAPIフィルタ
     状態と診断
     ・トレース
     セキュリティ
     ・基本認証
     ・Windows認証
     管理ツール
     ・IIS6管理互換
      ・IIS6 メタベース互換性
      ・IIS6 WMI互換
      ・IIS6 管理コンソール
  ・機能の追加
   ・.NET Framework 3.0の機能
   ・Windows Powershell 1.0

 ②その他コンポーネントのセットアップ
  ・Microsoft .NET 3.5 SP1 Framework+Language Pack
  ・Microsoft Visual Studio 2008
   以下のコンポーネントをインストール(好み次第ですが)
   ・Visual Web Developer
   ・Visual Basic
   ・Visual C#
  ・Visual Studio 2008 SP1の適用
  ・Exchange 2007 SP1 管理コンソール
   ※Administrator@ilm2.localでセットアップ実行(UAC環境の場合は「管理者として実行」)

 ③データベースのセットアップ
  ・SQL Server 2008 64bit Enterprise Editionのインストール
   ※ILMサーバのローカルAdministratorグループに所属するドメインユーザでセットアップ実行(UAC環境の場合は「管理者として実行」)
   以下のコンポーネントをインストール
   ・データベースエンジンサービス
   ・管理ツール(基本)
  ・インストール完了後、SQLインストール実施ユーザでSQL Server Management Studioを起動し、
   ・Administrator@ilm2.local(WSSインストール用)
   ・ilm2admin@ilm2.local(ILMインストール用)
   にsysadmin権限を与える。

   注意)ilm2admin@ilm2.localのデフォルトの言語をEnglishにしておかないとILMインストール中に以下のようなエラーが出る。








 ④アプリケーションサーバのセットアップ
  ・Windows SharePoint Services 3.0 SP1(英語版)
   ※Administrator@ilm2.localでセットアップ実行(UAC環境の場合は「管理者として実行」)
  ・インストール後「SharePoint製品とテクノロジ構成ウィザード」を実行
   DBは③でセットアップしたSQL Serverを指定。
  ・http://ilm2rc0/でWebアプリケーション、空のサイトコレクションを作成
   ※サイトへのilm2admin@ilm2.localの管理者権限を与えておく

3.ILM"2"サーバサイドコンポーネントのセットアップ
 ①利用ユーザのセキュリティ設定
  ILMサーバのローカルセキュリティポリシーより、
  ・ilm2syncservice
  ・ilm2service
  ・ilm2ma
  について
  ・バッチジョブとしてログオンを拒否する
  ・ターミナルサービスを使ったログインを拒否する
  ・ネットワークで経由コンピュータへアクセスを拒否する
  の設定を実施する。

 ②ILM Synchronization Serviceのセットアップ
  ※ilm2admin@ilm2.localで実行(UAC環境の場合は「管理者として実行」)
  ・展開ディレクトリ\Metadirectory Services and User Provisioning\Setup\setup.exe
  ・自動的にログオフされるので再度ログオン
  ・MIISAdminsにilm2ma@ilm2.localをメンバ追加する


-setup.exeを起動した画面













-サービスアカウントはilm2syncserviceを使用











-MIIS関連のグループはとりあえずデフォルトを使用










-証明書配置先を指定(任意のフォルダ)











 ③ILM Service、ILM Portal、ILM Password Portalのセットアップ
  ※ilm2admin@ilm2.localで実行
  ・SQL Agentが実行されていることを確認し、実行されていない場合は起動する
  ・ブラウザの設定を以下の通り行う
   セキュリティ設定:JavaScriptの実行を許可する
   言語設定:en-usを追加し、優先設定する
  ・展開ディレクトリ\ILM以下でmsiexec /i ILM-Server-64bit.msi /log install.log
  ・インストール完了後、
   Microsoft Identity Integration Serverサービスを再起動する
   Microsoft ILM Common Servicesを起動する

-ilm-server-64bit.msiを起動した画面










-コンポーネントの選択(今回はすべて選択)










-サービスアカウントの設定(ilm2serviceを指定)











-Synchronization Service関連設定(ilm2maを指定)










-インストール実施ユーザがILM Portalの最初のユーザになるのでメールアドレスを入力)











 ④インストール後の設定
  ・WSSへのアクセス権限設定
   ilm2admin:FullControl
   ドメインユーザ:Contributor
  ・passwordportalへの匿名アクセスを許可する
  ・ILMサーバがインターネットへアクセスできない場合は以下の設定を実施
   レジストリエディタで
   HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\CodeBaseSearchPathの値を以下のように変更
   ・変更前:CODEPATH;http://activex.microsoft.com/objects/ocget.dll
   ・変更後:CODEPATH;
  ・Exchange Web Serviceと証明書の設定
   ・ilm2admin@ilm2.localでIEを起動(UAC環境の場合は「管理者として実行」)
   ・https://ex/EWS/Exchange.asmxを開く
   ・セキュリティの警告ダイアログで証明書を表示を選択し、証明書をインストールする

 ⑤日本語化設定
  ※現状、不具合?がある模様で正常に設定できない。
  ・WSSの日本語化(WSS言語パックのインストール)
   ※Administrator@ilm2.localで実行
   IEの言語設定を日本語(ja-JP)優先にする
   画面右上の「ようこそ」だけ日本語になる
  ・ILM Portalの日本語化(言語パックのインストール)
   ※Administrator@ilm2.localで実行(WSSのCentral Administraionへアクセス権限が必要)
   ・展開フォルダでmsiexec /i ilm-server-language-pack.msi /log install.log
    japaneseのみを選択する(RC0ではどちらか片方しかインストール出来ない)
    IEの言語設定を日本語(ja-JP)優先にする
    →マニュアルによるとこれで日本語化されるとのことだが、現状ならない。。
     また、IEの言語設定を日本語優先にするとSyncRule設定などのボタン類が正常動作しなくなるのでやはり英語環境しかない?

次回は、簡単なシナリオをベースに実際のデータ同期の設定方法を書こうと思います。

2008年11月15日土曜日

ILM"2" RC0インストール「サーバサイドコンポーネント準備編その2」

インストールに先出ち、必要なアカウントと権限の確認をしておきます。
※今回はILM"2"のコンポーネントのインストールに必要なユーザに限定しますので、以下とは別にExchangeやSQL、WSSをセットアップするアカウントが必要になります。
※すべてActiveDirectory上に作成します。

・ILM"2"インストール用ユーザ
 OS権限:Domain Admins
 SQL Server権限:sysadmin
 メールボックス:必要
・ILM Synchronization Serviceアカウント
 OS権限:Domain Users
 SQL Server権限:sysadmin
 メールボックス:-
・ILM Serviceアカウント
 OS権限:Domain Users、ILM"2"サーバのローカルAdministrators
 SQL Server権限:-
 メールボックス:必要
・ILM MAアカウント
 OS権限:Domain Users、MIISAdmins(インストール過程で作成される)
 SQL Server権限:-
 メールボックス:-

また、セキュリティ上の理由から
・ILM Synchronization Serviceユーザ
・ILM Serviceユーザ
・ILM MAユーザ
に関してはILM"2"サーバのローカルセキュリティポリシーより、
・バッチジョブとしてログオンを拒否する
・ターミナルサービスを使ったログインを拒否する
・ネットワークで経由コンピュータへアクセスを拒否する
の設定を行っておきます。

次回はいよいよインストールを開始します。

2008年11月11日火曜日

Google OpenID

先日GoogleがOpenID Providerになるという発表がありましたが、当初はホワイトリスト方式でRPを選ぶ、という変な制限がついていました。
これはOpenIDの考え方にアンマッチだな~と思っていたんですが(逆ならわかりますが)、やっぱり制限が撤廃されました。

http://google-code-updates.blogspot.com/2008/10/moving-another-step-closer-to-single.html

まぁ実情はホワイトリストに載りたいRPの申請が大量に来たから、というところみたいです。

ILM"2" RC0インストール「サーバサイドコンポーネント準備編その1」(11/14追記)

最初に宣言してから早1ヶ月半。やっとILM"2"の導入記録をまとめていきます。

まずはサーバサイドコンポーネントのインストールを実施する前に必要な環境の確認をします。

サーバサイドは以下の4つのコンポーネントで構成されます。

 ・ILM Service
 ・ILM Synchronization Service
 ・ILM Portal
 ・ILM Password Portal


それぞれをインストールするのにに必要なソフトウェア環境は下記の通りです。

・ILM Synchronization Service

 OS:Windows Server 2008 64bit Standard or Enterprise Editions
   Terminal Serviceをインストールしないこと

 OS追加設定
 ・機能の追加
  Windows Powershell 1.0

 DB:SQL Server 2008 64bit Standard or Enterprise Editions
 開発ツール:Microsoft Visual Studio 2008
 Exchange:Exchange 2007 SP1 Management Console

・ILM Service

 OS:Windows Server 2008 64bit Standard or Enterprise Editions
    Terminal Serviceをインストールしないこと

 OS追加設定
 ・役割の追加
  Webサーバ(IIS)
   デフォルトでは以下の役割サービスにチェックが入っていないのでチェックする
   HTTP基本機能
   ・HTTPリダイレクション
   アプリケーション開発
   ・ASP.NET
   ・.NET拡張性
   ・ISAPI拡張
   ・ISAPIフィルタ
   状態と診断
   ・トレース
   セキュリティ
   ・基本認証
   ・Windows認証
   管理ツール
   ・IIS6管理互換
    ・IIS6 メタベース互換性
    ・IIS6 WMI互換
 ・機能の追加
  .NET Framework 3.0の機能

 DB:SQL Server 2008 64bit Standard or Enterprise Editions

 その他:Microsoft .NET 3.5 SP1 Framework

・ILM Portal / Password Portal

 OS:Windows Server 2008 64bit Standard or Enterprise Editions
    Terminal Serviceをインストールしないこと

 OS追加設定
 ・役割の追加
  Webサーバ(IIS)
   デフォルトでは以下の役割サービスにチェックが入っていないのでチェックする
   HTTP基本機能
   ・HTTPリダイレクション
   アプリケーション開発
   ・ASP.NET
   ・.NET拡張性
   ・ISAPI拡張
   ・ISAPIフィルタ
   状態と診断
   ・トレース
   セキュリティ
   ・基本認証
   ・Windows認証
   管理ツール
   ・IIS6管理互換
    ・IIS6 メタベース互換性
    ・IIS6 WMI互換
 ・機能の追加
  .NET Framework 3.0の機能

 その他:Microsoft .NET 3.5 SP1 Framework

 APサーバ:Windows SharePoint Services 3.0 64bitSP1英語版+言語パック(11/14追記。日本語版を使うとインストールに失敗する)


今回は上記の全コンポーネントを1台のサーバにインストールする予定なので、以下をインストールします。

 OS:Windows Server 2008 64bit Standard or Enterprise Editions
    Terminal Serviceをインストールしないこと

 OS追加設定
 ・役割の追加
  Webサーバ(IIS)
   デフォルトでは以下の役割サービスにチェックが入っていないのでチェックする
   HTTP基本機能
   ・HTTPリダイレクション
   アプリケーション開発
   ・ASP.NET
   ・.NET拡張性
   ・ISAPI拡張
   ・ISAPIフィルタ
   状態と診断
   ・トレース
   セキュリティ
   ・基本認証
   ・Windows認証
   管理ツール
   ・IIS6管理互換
    ・IIS6 メタベース互換性
    ・IIS6 WMI互換

    ・IIS6 管理コンソール(11/14追記。Exchange管理コンソールインストール時に必要)

 ・機能の追加
  .NET Framework 3.0の機能
  Windows Powershell 1.0

 DB:SQL Server 2008 64bit Standard or Enterprise Editions
 開発ツール:Microsoft Visual Studio 2008
 Exchange:Exchange 2007 SP1 Management Console
 その他:Microsoft .NET 3.5 SP1 Framework
 APサーバ:Windows SharePoint Services 3.0 64bitSP1英語版+言語パック(11/14追記。日本語版を使うとインストールに失敗する)

次回はインストールの準備作業編の予定です。

2008年11月8日土曜日

Liberty Alliance Day 2008 @ Tokyo

今日(といっても深夜をまわってしまったので、昨日)、ベルサーレ九段で開催された「Liberty Alliance Day 2008」に参加してきました。

テーマは「Trust and Harmony for the Emerging Identity Ecosystem」ということで、アイデンティティ管理に関連する信頼性確保やプライバシー保護に関する話がメインでした。
基調講演ではOracleのRoger Sullivan氏がLiberty Allianceが注力するポイントの一つとしてIAF(Identity Assurance Framework」の話をしたり、相互運用性に関するパネルではLiberty、OpenID、CardSpaceについて、セキュリティ、プライバシー保護という観点での取り組みを紹介したりと盛りだくさんでした。

ポイントはそれぞれこんな感じ。
・信頼性確保
 Liberty AllianceではIAF、OpenIDではReputation、PAPEのようにIdP/OPの信頼性を保証するための枠組みの策定に注力している(実際に商用利用するにはまだまだ、といったところですが)
・プライバシー保護
 SPへ提供する属性情報をユーザに選択/確認させる、という仕組みが実装されてきつつある。Geneva CardSpaceのデモもあり、InfoCardの中のどんな属性が実際にSPに提供されるかをユーザがあらかじめ確認する様子がみれました。

後は、こういうイベント恒例の新技術、プロジェクトの発表。
今回は、
・OpenSSO 8.0 Enterprise Edition : 11/14リリース
・Genevaの(おそらく)国内初の発表(LibertyだけにSAML2.0サポート※がポイント)
 ※どこまでサポートするかは未定とのことですが。
でした。

まぁ400人くらいの参加があったようなので、それなりに盛況だったんではないでしょうか?

2008年11月4日火曜日

ILM"2" RC0リリース

久しぶりにconnectサイト(http://connect.microsoft.com)を見たらILM"2"がRC0版がリリースされていました。

とりあえずダウンロードはしたので、セットアップしてみようと思います。
ダウンロードサイト: http://technet.microsoft.com/ja-jp/evalcenter/cc872861(en-us).aspx

今回から日本語を含むlanguage packも合わせてダウンロードできるようになっており、やっと日本語環境が使えるようになりそうです。
ただ、やっぱり64bit版しかダウンロードできないみたいです。
MSのプランとしては32bit版も出てくる予定らしいのですが・・・。(検証するのに64bit環境が用意しにくいので出来れば32bit版が手に入るとうれしいんですが)

ILMチームのblogへはとりあえは32bitイメージのリクエストをしてみました。
http://blogs.technet.com/jpilmblg/archive/2008/09/25/ilm2007-windows-server-2008.aspx

2008年11月3日月曜日

国産IdMパッケージに想う

お客さんと話をしていると、相手が情報システム部門の人だと
・兼務など日本企業の慣習になじむのはやっぱり国産
・メジャー海外製品はべらぼうに高い
・何となく国産は安心?
なんて言われるし、ベンダ側もそれに同調している(当たり前か)。

でも、国産か否かという次元ではなく何のためにIdMを導入するのかという視点にたつと、上のような話は選定基準としてまったく意味がなくなってしまいます。
私見ですが、まだまだ国産のIdM製品はライフサイクル管理、同期、プロビジョニングを中心機能として考えていると思いますが、対して洋物のメジャー製品は一歩進んだ?IdMを考えていると思います。

要するに、
・IDが沢山あるから自動管理できるシステムを導入しましょう、というアプローチ
 →レガシーなID管理(同期、プロビジョニング)
・IDが沢山あるから出来るだけIDを減らすためのシステムを導入しましょう、というアプローチ
 →SSOやFederationをプロダクトの中心に据えつつある?
の違い。
どちらが根本的な課題を解決しているか、というとやっぱり後者だと思います。

もちろん、サービス側の対応が前提になる点で後者の導入はそれなりにハードルも高いし、技術仕様などもまだまだ完全に整備されているとは言えない状態です。
国産IdMパッケージベンダさんもなるべく早い段階で後者のアプローチにシフトしていって欲しいもんです。やっぱり国産は安心だし(笑)

国産品の代表?どれも一長一短だとは思いますが、やっぱりインターフェイスが日本語なのが最高です。。

インテック(http://www.intec.co.jp/service/network/idms.html
・束人(そくと)
・結人(ゆいと)

ソフトバンクテクノロジー(http://www.tech.softbank.co.jp/solution/security/accountone/index.html
・Secure Account One

京セラコミュニケーションシステム(http://kccs.co.jp/products/directory/
・GreenOffice Directory

エクスジェンネットワークス(http://www.exgen.co.jp/overview.html
・LDAP Manager


当Blogの主題の各プロダクトのレビューはまた時間のあるときに。。(そんなんばっかりです)

2008年10月30日木曜日

Microsoft PDC2008

PDC2008のKim CameronのセッションでMicrosoftのアイデンティティ関連のソフトウェアとサービスのロードマップが発表されていました。今回のPDCのテーマはどうやら「Software+Services」だそうです。やっぱりクラウドコンピューティングを強く意識しているようですね。
今回発表されたのは、以下の枠組み。


<ソフトウェア>
・"Geneva" Server
・Microsoft Service Connector
・Geneva Framework, CardSpace
・Live Framework
<サービス>
・Live Identity Services
・Microsoft Federation Gateway
・.Net Access Control Service


ソフトウェア側で大きなポイントは"Geneva" ServerのSAML2.0サポート。サードパーティSTSとのフェデレーションができるようになりました。セッション内ではTivoli Access Managerとの連携デモも見せてました。
後はサービス側ですが、Microsoft Federation Gateway。Microsoftが提供するサービスで、LiveIDやAD DS+Microsoft Service Connectorなどを含むいろんなSTSと"Geneva" FrameworkやLive Framework上で動くアプリケーションのゲートウェイをしてくれるらしいです。
.NET PassportではMicrosoftがInternet上の唯一のIdPになろうとして失敗したので今回はあくまで”サービス”に徹するということでしょうか?二の舞にならないことに期待??です。

2008年10月29日水曜日

Windows Live IDがOpenIDをサポート

なかなか時間がとれずILM"2"に触れていないのでニュースから。



関連URL:
http://winliveid.spaces.live.com/blog/cns!AEE1BB0D86E23AAC!1745.entry?wa=wsignin1.0

早速試してみました。 Windows Live IDはすでに取得しているので、https://login.live-int.com/beta/ManageOpenID.srfへアクセスしてサインイン(右)



LiveIDに紐付されたOpenIDが表示されます(初回はエイリアスを登録します)









このOpenIDをコピーして、サンプルRPサイトへアクセス。
http://openidenabled.com/ruby-openid/trunk/examples/consumer

先程のOpenIDを入力してVerify。




Windows Live IDの認証ページへ




















Verification of http://openid.live-int.com/xxxx succeeded.
と表示されればめでたしめでたし。

2008年10月2日木曜日

早速始めてみます

はじめまして。
これまでを含めいろいろと関わったIdM製品の検証結果などを書いていくつもりです。

早速ですが、まずは今遊んでいるMicrosoftのIdentity Lifecycle Manager 2007(ILM2007)の後継のILM"2"β3について書いていこうと思います。