2012年3月17日土曜日

[FIM2010] R2 で強化されたパスワード管理機能 - その2


前回から時間があいてしまいました。前回は Web ベースでの QA ゲート(秘密の質問と答え)によるパスワードリセット機能を紹介しましたが、 FIM2010 R2 からは他にも、
・ワンタイム パスワードの電子メール ゲート
・ワンタイム パスワードの SMS ゲート
が新たに追加されています。

簡単に言うとあらかじめ登録した電子メールや SMS(携帯電話のテキストメッセージ)へワンタイムパスワードを通知し、そのワンタイムパスワードを利用してパスワードをリセットする、という機能です。

しかし、通常パスワードを忘れている環境では電子メールを見ることが出来ないことが多いと思いますので、今回は SMS への通知の機能の使い方を紹介します。
※参考URL)http://technet.microsoft.com/en-us/library/hh824692(v=ws.10).aspx

通常、SMS は携帯電話キャリアのネットワークに依存する世界なので電子メールと同じようにインターネット経由でメッセージを送信することが出来ません。
やり方としては、サーバにモデムを接続して公衆回線経由でメッセージを送信する、という方法と SMS プロバイダと呼ばれるインターネット経由での SMS 送信サービスを提供している業者のサービスを使う方法が考えられます。
今回は後者の SMS プロバイダのサービスを利用することにしました。

尚、FIM2010 R2 から SMS へメッセージを送信するには SMS プロバイダが公開しているメッセージ送信 API を利用することになるので SMS プロバイダを選択するときは API を提供しているかどうかを調べる必要があります。
また、先にも書きましたが携帯キャリアのネットワークに依存する話なので、 SMS プロバイダが利用したい携帯キャリアに対応しているかどうかについても調べる必要があります。

今回は「イージー SMS」という SMS プロバイダを試しに使ってみました。
ここは API を公開していますし、国内の携帯キャリアでは Docomo と Softbank に対応しています。
(1通のメッセージを送るのに50円ほどかかります)

さて、早速手順を紹介します。
(イージー SMS への登録手順は省略します。詳細は Web サイトを参照してください)


■準備作業
手順1.SmsServiceProvider.dllを作成する

 FIM2010 R2 から SMS メッセージを送信するには SMS プロバイダが提供している API を呼び出すためのクラスライブラリを作成する必要があります。

 FIM2010 R2 では SmsServiceProvider.dll という名前で DLL を作成し、そのライブラリが SendSms というメソッドを公開していれば良いので、まずはクラスライブラリを作成します。(今回はVisual Studio 2010 を使って作成しました)

 Visual Studio 2010 を開いてプロジェクトを作成します。
 プロジェクトは以下の様に作成します。
 ・.NET Framework 3.5(FIM2010 R2 が .NET Framework 3.5 で開発されているので)
 ・クラスライブラリ
 ・名称:SmsServiceProvider
 ・参照設定:FIMインストールメディア内に存在するMicrosoft.IdentityManagement.SmsServiceProviderContract.dll
  ※Service and Portal\Program Files\Microsoft Forefront Identity Manager\2010\Service\GAC以下に存在

 [プロジェクトの作成]



























 [参照設定]
































 イージー SMS を使う場合のコードは以下の様な形になります。
using System;
using System.Collections.Generic;
using Microsoft.IdentityManagement.SmsServiceProvider;
using System.Net;
using System.IO;

namespace SmsServiceProvider
{
    public class SmsServiceProvider : ISmsServiceProvider
    {

        public void SendSms(string mobileNumber,
                            string message,
                            Guid requestId,
                            Dictionary<string, object> deliveryAttributes)
        {
            StreamWriter writer = new StreamWriter("c:\\tmp\\SMSLog.txt");
            writer.WriteLine("開始");

            System.Collections.Specialized.NameValueCollection ps = new System.Collections.Specialized.NameValueCollection();
            ps.Add("recipient", mobileNumber);
            ps.Add("sender", "+81901234567"); // 送信元
            ps.Add("message", message);
            ps.Add("password", "xxxxx"); // イージー SMS の契約パスワード
            WebClient wc = new WebClient();

            try
            {
        // API KEY はイージー SMS 契約時に入手できる
                byte[] resData = wc.UploadValues(@"https://api.ezsms.biz/{API KEY}/messages/send/", ps);
                wc.Dispose();
                string[] a = System.Text.Encoding.UTF8.GetString(resData).Split('\n');
                Boolean flg = false;
                foreach (string str in a)
                {
                    writer.WriteLine(str);
                    // 結果取得
                    if (str.Contains("OK") == true)
                    {
                        flg = true;
                        break;
                    }
                }
                if (flg == false)
                {
                    // エラー
                    throw new Exception("Could not send SMS message.");
                }
            }
            catch (System.Net.WebException ex)
            {
                //HttpWebResponseを取得
                System.Net.HttpWebResponse errres =
                    (System.Net.HttpWebResponse)ex.Response;
                writer.WriteLine("SMSプロバイダへ接続できない");
                throw new Exception("Could not connect to the SMS Provider.");
            }
            finally
            {
                wc.Dispose();
                writer.Close();
            }
        }
    }
}


後はビルドして完成した DLL ファイルを FIM2010 R2 サーバの Service 以下に配置すれば OK です。
(デフォルトインストールで C:\Program Files\Microsoft Forefront Identity Manager\2010\Service 以下)


手順2.SMS Gateの有効化

 次は SMS ゲートを使う様に FIM2010 R2 を設定します。

 設定を行うのは管理ポリシールール(MPR)の Password Reset AuthN Workflow です。
 管理ポリシールールのワークフローから当該のワークフローを探して編集します。




























 アクティビティとして「ワンタイム パスワードの SMS ゲート」を追加します。SMS ゲートだけを使うのであれば他のゲートは消してしまっても構いません。


































 追加したアクティビティの設定を行います。今回はテストなのでそのまま保存をしました。


































これでサーバ側の設定作業は完了です。次はユーザ自身による通知先の設定です。


手順3.通知先携帯電話番号の登録(ユーザ自身による作業)

 ユーザ自身によりパスワード登録画面を開き、通知先の携帯電話番号を登録します。(イージー SMS の場合、国番号から電話番号を登録する必要があるので +81 から登録します)





















■リセットの実行
では、実際にリセットをしてみます。

パスワードリセット画面へアクセスし、ユーザ名を「ドメイン名\ユーザ名」という形で入力します。































次へ、をクリックすると携帯電話へメッセージが送信されます。












































メッセージ内のワンタイムパスワードを画面に入力します。































正しいコードを入力するとパスワードのリセット出来ます。

2012年3月1日木曜日

[Windows Server 8]ベータ版上の AD FS を見てみる


2/29 にリリースされた Windows 8 Consumer Preview / Windows Server 8 beta ですが、どうやら周りを見ていると Windows 8 Consumer Preview ばかりが目立ってしまっているので、あえて Server 8 を触ってみました。

・ダウンロードURL
 http://technet.microsoft.com/ja-jp/evalcenter/hh670538.aspx

ちなみに MVP Global Summit の会場ではこんな USB メモリが配布されていました。
(中に ISO を入れて配っていたところもあったようですが、私がもらったのは空でした。。。)



















さて、さっそく簡単に確認をしてみたところ、 Windows Server 2008 / R2 の時の AD FS / AD FS 2.0 との差は以下の通りでした。
・役割の追加で AD FS 2.0 と同等のものが入る(ただし、「2.0」という番号はついていない)
・サーバだけでなく、AD FS Web Agents( Claims-aware Agent / Windows Token-based Agent )および Federation Service Proxy も追加できる
・Windows Identity Foundation は自動的には追加されない(追加しなくても AD FS は動作する)
・機能の追加から Windows Identity Foundation 3.5 を追加できる

まだ機能面は試せていませんが、軽く Claim Rule の記述部分などを見てみても変わっている雰囲気がなかったので、現行の AD FS 2.0 Update 1 をベースに組み込まれているのだと思われます。
今後、追って検証結果なども紹介していこうと思います。

簡単に画面ショットを載せておきます。

[役割の追加]





























[管理コンソール]



























[サーバマネージャのダッシュボード]

























[サービス一覧]
























[メトロスタイルのスタート画面]


[FIM2010]ECMA2.0 対応のLotus Domino 8.x コネクタがリリース


昨日もよく似たようなポストをしましたが、今回はベータではなく RTM です。
そして対象が Lotus Domino 8.x です。

・ダウンロードURL
 http://www.microsoft.com/download/en/details.aspx?id=29038
・ドキュメントURL
 http://technet.microsoft.com/en-us/library/hh859750(v=ws.10).aspx

まぁ海外製品の純正アダプタなので国内でよく使われる DJX テーブルへの対応はしていませんが、一通りの機能はそろっています。


先日の Update 2 以降、本格的に ECMA 2.0 対応のコネクタがリリースされてきていますし、今後は既存の接続先システムへの接続もこの新しいフレームワークで開発がされていくことになると思われますので、今のうちに ECMA 2.0 でのコネクタ開発に慣れておきましょう。
関連する技術リソースもそれなりに出てきていますし。
・Extensible Connectivity 2.0 Management Agent Reference
 http://msdn.microsoft.com/en-us/library/hh859557.aspx
・API リファレンス
 http://msdn.microsoft.com/en-us/library/microsoft.metadirectoryservices.aspx
・以前紹介した ECMA 2.0 のイントロ
 http://idmlab.eidentity.jp/2012/01/fim2010-r2.html

2012年2月29日水曜日

[FIM2010]ECMA2.0 対応のWeb Serviceコネクタ(ベータ)がリリース

昨日の FIM 2010 RTM Update 2 のリリースに含まれる ECMA 2.0 に合わせて Web Services コネクタ(SAP)のベータ版が Connect サイトにリリースされています。

- コネクトサイト
 https://connect.microsoft.com/site433/Downloads

ECMA 2.0 からこれまでの Management Agent ではなく Connector という様に呼び名が変わっています。これはこれまでの管理エージェント(MA)に当たる部分(MetaVerse との同期部分、Connector Space、対象システムとの同期部分)のうち、共通化できる部分はなるべく共通化し、システム固有の部分を独立させよう、というコンセプトによるもので、これまでの管理エージェントのうち、対象システムとの同期部分に取り出したような作りになります。

結果、若干管理エージェント開発の負荷は減りましたが、逆に Web Service の設定を行うために別のツール( Web Service Configurator )を使うことになります。
流石に手元に SAP の環境がないので、実際の接続を試すことはできそうにありませんが、今後の共通パーツになるであろう Web Service Configurator の操作イメージなどはこれから試してみようと思うので、そのうち blog でも紹介させてもらおうと思います。

FIM 2010 Update Rollup 2 がリリース


今ちょうど MVP Global Summit 2012 に参加するためにシアトルに来ているのですが、そんな最中 FIM 2010 の Update Rollup 2 がリリースされました。

Microsoft Update を経由して「重要な更新」として提供されるため、既存の FIM ユーザは適用が推奨されます。

修正内容は以下の通りです。
・ECMA 2.0 ( Extensible Connectivity Management Agent 2.0 Framework ) のサポート
・動的グループメンバシップや条件ベースのセットメンバシップにおける特定環境下におけるパフォーマンス問題の改善
・先の HotFix での SQL ワイルドカード問題のリバート(もとに戻りました)
・その他の問題の解消

※ダウンロードおよび詳細は以下 URL から。
 http://support.microsoft.com/kb/2635086/en-us

大きな点としては、議論を呼んだ先の HotFix の内容を元に戻した点とついに ECMA 2.0 を正式にリリースした点ですね。
先のポストでも紹介しましたが、今後の MA はすべて ECMA 2.0 ベースで開発されることになると思われますので、早い段階で新しい MA の考え方に慣れ親しんでおいた方が良いかと思います。

Global Summit の内容そのものは NDA なので何も書けませんが、情報がオープンになったものから順番に今後も紹介していきます。

ではでは。(時差で眠い)

2012年2月15日水曜日

[FIM2010]ユーザ作成時に属性のユニーク性をチェックする


Forefront Identity Manager 2010 (FIM2010) の小ネタシリーズです。

デフォルト状態では FIM ポータルでユーザを作成する際、キー属性となるアカウント名の重複のチェックは全属性を入力してサブミットした時に初めて実施されます。管理者はエラーが出て初めてアカウント名の重複に気が付くのであまり作業効率は良くありません。

#指定したアカウント名がすでに存在する状態でユーザを作成するとサブミット後に以下のエラーが出る









































そこで今回は属性の値を入力した段階でユニーク性を確認する、という設定を入れてみたいと思います。
FIM ポータル上でのリソース(ユーザやセキュリティ・グループ、管理ポリシールールなど管理・設定対象となる全てのオブジェクト)の構成するための画面を構成するのは「リソースコントロールの表示構成(Resource Control Display Configration / RCDC)」と言われる設定です。


では、早速設定してみます。
管理者で FIM ポータルへログインし、管理メニューより「リソースコントロールの表示構成」を選択します。











































今回はユーザを作成する際に属性のユニーク性を確認したいので、RCDC の一覧から「ユーザーの作成の構成」を選択します。




































するとユーザの作成を行う画面の構成情報が表示されるので、まずは現在の構成情報をエクスポートします。


































構成情報が XML ファイルとして出力されるので、その中の AccountName 属性に関するブロック(<my:Control my:Name="AccountName" ~で始まるブロック)の中に以下の行を追記します。
<my:Property my:Name="UniquenessValidationXPath" my:Value="/Person[AccountName='%VALUE%' and not(ObjectID='%ObjectID%')]" />














編集した XML ファイルを保存し、再度 RCDC の構成画面から今度はインポートします。


































最後に iisreset コマンドで IIS を再起動します。
これで設定は終了です。

先ほどと同様にユーザを作成してみます。
すると、今度は[次へ]をクリックした段階で属性のユニーク性が確認され、エラーとしてハイライトされます。


































RCDC の設定次第では他にも色々とカスタマイズが出来るので今後も小ネタを公開していこうと思います。


参考資料:
http://technet.microsoft.com/en-us/library/ee534918(v=ws.10).aspx

2012年2月5日日曜日

アイデンティティ・プロバイダにおける身元保証と岩波書店の縁故採用宣言


たまには時事ネタも、ということで。

岩波書店が2012年度の採用を縁故採用に限る、という宣言をしたことが賛否両論を呼んでいますね。

岩波書店の採用ページ
http://www.iwanami.co.jp/company/index_s.html







色々な意見があるのは確かだと思いますので、ここでは特に何の意見も述べるつもりはないので、少しだけWeb上の反応を紹介しておきます。
(私の周りには結構肯定的な意見が多いかも)

・雑種路線でいこう
 http://d.hatena.ne.jp/mkusunok/20120204/p1
・常識的に考えた
 http://blog.livedoor.jp/jyoushiki43/archives/51836165.html
・ドラゴンの抽斗
 http://ameblo.jp/nitta-ryo/entry-11153856843.html


で、ここからアイデンティティの話(およびサービスプロバイダの話)です。
先日の Kantara Initiative Seminar 2012 Winter でも Japan WG 議長の山田さんが紹介していましたが、現在 Kantara Initiative が生き残りを賭けて?力を注いでいるのが Identity Assurance Framework です。
※山田さんの講演資料はこちら:
 http://kantarainitiative.org/confluence/pages/viewpage.action?pageId=57606150


背景を含め簡単に説明すると、、、
特にパブリック・クラウドなど事業者をまたがってサービスを使う様な場合、「サービス・プロバイダの信頼」というものが非常に重要になってきます。
※これまでこの blog で紹介してきた AD FS2.0 などで言う証明書を使った信頼関係の実装とはレイヤが違う意味での「信頼」です。事業者同士の信頼をITシステムの中で表現するための一つの方法が証明書ベースでのIdP/RP間の信頼です。

例えば、アプリケーションを提供する側としては、外部のアイデンティティ・プロバイダからの認証結果や属性情報を受け入れるには普通に考えて結構な覚悟が要るはずです。本当に認証は正しく実行されているんだろうか?パスワードが漏れていて実際は本人以外の人がアカウントを使っているんじゃないだろうか?実は退職した後でもアカウントが消されていなくて不正利用をされているんじゃないだろうか?など考えただけで色々な懸念があるはずです。

また、逆にアイデンティティ・プロバイダ側からすると利用したいアプリケーション・サービスが本当に大丈夫なのか?については同様に気を使います。管理レベルが低くて提供したメールアドレスなどの属性情報をリスト化してスパム業者に売り払っているんじゃないだろうか?作成したデータを盗み見られているんじゃないだろうか?などなど、こちらも多くの懸念があります。

こうなってくると「何を持ってアイデンティティ・プロバイダ、サービス・プロバイダを信頼するか」の基準の確立が非常に大切になってきます。これを「トラスト・フレームワーク」と言います。
現在、Kantara InitiativeOpen Identity Exchange(OIX)と並んでポリシー策定者である米国調達庁(GSA/ICAM)の認定したトラスト・フレームワーク・プロバイダとなっています。
GSA が行う電子調達においては OIX や Kantara Initiative が認定したアイデンティティ・プロバイダで認証された利用者 / 企業であることが必要となります。



ちょっと話がそれましたが、このトラスト・フレームワークの認定基準を見るとアイデンティティ・プロバイダ、サービス・プロバイダで事業に従事する人員の採用に関する要件についても規定されています。

Kantara Initiative Identity Assurance Framework
Identity Assurance Framework:Service Assessment Criteria

LoA2 ( Level of Assurance 2 )
AL2_CO_OPN#030 Personnel recruitment
Demonstrate that it has defined practices for the selection, evaluation, and contracting of all service-related personnel, both direct employees and those whose services are provided by third parties.

LoA3/4 ( Level of Assurance 3/4 )
AL3_CO_OPN#030/AL4_CO_OPN#030 Personnel recruitment
Demonstrate that it has defined practices for the selection, vetting, and contracting of all service-related personnel, both direct employees and those whose services are provided by third parties. Full records of all searches and supporting evidence of qualifications and past employment must be kept for the duration of the individual's employment plus the longest lifespan of any credential issued under the Service Policy.

特に LoA3や4(信頼レベル高)ともなると過去の従事者が資格を満たしていることのエビデンスや雇用履歴の調査など、かなり厳密な管理が必要となります。
それもそのはず、例えばイギリスでは LoA4 を要求するサービスとして生命や医療、国防にかかわるサービスをあげていたりします。


Kantara Initiative の他にも Cloud Security Alliance(CSA)でも Cloud Control Matrix(CCM)を定めており、その中にも従事者の採用に関する項目が規定されています。

CSA / Cloud Control Matrix(CCM)
https://cloudsecurityalliance.org/research/ccm/

HR-01
Pursuant to local laws, regulations, ethics and contractual constraints all employment candidates, contractors and third parties will be subject to background verification proportional to the data classification to be accessed, the business requirements and acceptable risk.

HR-02
Prior to granting individuals physical or logical access to facilities, systems or data, employees, contractors, third party users and tenants and/or customers shall contractually agree and sign equivalent terms and conditions regarding information security responsibilities in employment or service contract.

HR-03
Roles and responsibilities for performing employment termination or change in employment procedures shall be assigned, documented and communicated.

特に HR-01 では身元確認の重要性を強調しています。



色々と書きましたが、岩波書店の話に戻すと特に公共性の高いサービスにおいては「身元のしっかりした人を採用する」ことの重要性が認識され始めているのかも知れません。
しかし、これには色々と問題があるのも確かで、特にプライバシーの観点から見ると過去の犯罪歴や家族構成などが原因で仕事に就けない、といった事象を生む可能性も否めません。
※この辺りは崎村さんの blog で。
 http://www.sakimura.org/2010/12/686/

クラウドを含め単一の企業ネットワークに閉じた境界防御ではなく複数の事業者にまたがるビジネス・スキームが主流になってくると必ず話題に上る、いわゆる「セキュリティ vs プライバシー」の議論の典型的な例だと思いますので、岩波書店の例に関する結果がどうなるのか?は要ウォッチかも知れません。