Katsuyuki Ohashi Ohashi's Blog

土曜日 11 08, 2008

金曜の朝、下道さんのアレンジで、 Liberty Alliance Dayのために 来日していたOpenSSOプロジェクトのリードアーキテクト Pat Pattersonとミーティングを 持ちました。こういうミーティングがあっさり実現できちゃうのが Sunで仕事をしていてよかったなって思える部分でもあります。

PatからはOpenSSOに関するアップデートをもらい、特にfedletに関する 説明とデモが興味深かったです。すごーく大雑把に言うと、fedletは Java EEアプリを手っ取り早くOpenSSO IDPによる認証の配下に入れる ための仕組みで、fedletを利用することによってSP側ではOpenSSOの セットアップが不要になります。fedletの詳細に関しては、 こことか、 kimimasaさん彼のwiki page でまとめているリンク集が役に立つと思います。

それから、OpenIDの話も聞きました。日本ではweb2.0系のアプリで OpenIDへの対応が盛んでOpenSSOとしても無視できない状況なのですが、 OpenID 2.0対応のOpenSSO extentionがもうすぐ出てくるらしいので今後の展開に 期待が持てます。Patには、extentionを開発している方に開発を スピードアップしてもらえるようプッシュしてねとお願いしておきました。

ミーティングの後、携帯でPatの写真を撮らせてもらったのですが、 保存するのを忘れてしまったようで写真が見つかりません... 今後、SunPSでもOpenSSOベースのソリューションをこれまで以上に 推進していきたいなと思っています。

土曜日 10 11, 2008

Liberty Alliance Day 2008が11月7日(金)に開催されます。 詳しくはイベントのwebページを ご覧いただくとして、私としては以下のパートに興味を持っています。
> 16:20-17:00              OpenSSO-オープンソースによるアイデンティティ管理
>                                   システムの構築
> 17:00-17:50             パネルディスカッション:
>                  「動き始めたアイデンティティ管理の相互運用」
>                  ~OpenID、SAML、CardSpaceは共存共栄できるか~
SAMLとOpenIDの連携のニーズは、例えば、既存のエンタープライズ環境に SAMLでかっちり作っている世界があり、そこに社内SNSのような最近のOSS系 お手軽アプリを導入し、そちらはOpenIDで認証&SSOという話になった場合に SAML側の世界のIDP (Identity Provider)とOpenIDのOP (OpenID Provider)が フェデレーションしてSSOできたらとても便利になります。 最近流行っているということもあり、OpenID RP (Relying Party)として 動作するSNSやナレッジシェア等のソフトウェアはこれから増えてくるでしょう。 SaaSが流行ってはいますが、社外に情報を流せないのでこうしたサービスは 社内環境に立てるというケースは今後も少なくないと思います。 これまでだと新しいサービスを既存のSAMLベースのSSO環境に追加する場合、 リバースプロキシの配下に入れるとか、個別にpolicy agentを設定して 既存のSSO環境に組み込むというアプローチでしたが、導入しようとしている ソフトウェアがOpenID 2.0に対応しているのであればOpenID 2.0で認証&SSOさせ、 かつOPとIDPをフェデレーションさせるというアプローチが今後は選択できるように なってくるわけです。それを実現するための有力な選択肢のひとつがOpenSSOなのです。

Liberty Alliance Dayは参加無料で、現在、 イベントのwebページで 事前登録受付中です。ぜひこの機会にOpenSSOに関する理解を深めてください。

金曜日 9 12, 2008

今回はディレクトリ・サーバについて書いてみたいと思います。 Sunのディレクトリ・サーバ Sun Java System Directory Server は元々 Netscape Directory Serverとして 販売されていたもので、機能/性能の強化と共に数回のブランディング変更を 受けて、現在もディレクトリ・サーバ界のデファクト・スタンダード製品として Solarisだけでなく、他のOS上でも数多く利用されています。

最近、ディレクトリ・サーバ関連の引き合いとして多いのが、 これまで/etc/passwdやNISで行っていたUNIX/Linuxのユーザ認証を ディレクトリ・サーバを利用した認証に変更するという案件です。 管理対象のサーバが数百台という規模になると、これまでのように力技で なんとか管理しようというアプローチも限界です。 管理対象のアカウントは自社の社員だけでなく、社内の開発プロジェクト等で 作業する協力会社社員のアカウントも含まれてきますから、 取り扱うアカウントの数の多さだけでなく、出入りも激しいといった状況に うまく対処する方法が必要になります。

そういった状況の中、ディレクトリ・サーバでアカウント情報を集中管理し、 各サーバがディレクトリ・サーバに格納されたアイデンティティ情報に基づいて アカウント認証するというソリューションを選択されるお客様が増えてきています。 さらにこのディレクトリ・サーバをアイデンティティ管理システムによる プロビジョニングの配下に組み込むことによって、 アイデンティティ管理システムでの アカウント情報のメンテナンスの結果が各サーバのログイン認証にすぐに反映され、 より強固なソリューションとなります。どんなに素晴らしいアイデンティティ管理 システムを導入しても、末端での認証が追いついていなければ意味がありませんからね。

サンのアイデンティティ管理システムといえば Sun Java System Identity Manager (IDM) がすぐに思い浮かびますが、 これ以外にもActive Directory (AD) とのデータ同期を実現する Identity Synchronization for Windows (ISW) という ソフトウェアも提供しています。このISWを使うとAD側にモジュールを追加する ことなく、例えばAD側でのパスワード変更をディレクトリ・サーバへ伝播する なんてこともできるようになります。

アイデンティティ管理基盤の実現では、製品のスペックも大切ですが、 それだけでなく、技術的でない部分も含めて「どう作るか?」ということが とても大切です。 Sunのアイデンティティ管理製品の素晴らしさに加え、この分野でのSunPSの 技術、経験、ノウハウをお客様のアイデンティティ管理基盤構築に ぜひお役立てください。詳しくは こちらまで。

月曜日 9 08, 2008

ここのところOpenSSO絡みの話が多いので、 もう少し詳しく勉強してみようと SDCで工藤さんが書いた記事を参考に、OpenSSOのアイデンティティ・サービスを 利用したカスタムのログイン処理を実装してみました。 工藤さんはRuby on Railsでやってましたが、私はJavaer (Javaistではないです...) なのでServletフィルタで ログイン処理を実装し、NetBeansで作成したVisual Webアプリにセットするという アプローチです。

で、実装ですが、まずは工藤さんの記事で紹介されている OpenSSOFilter.java OpenSSOUtil.javaの中身を眺め、今回は超お手軽に実装ということで、 OpenSSOUtil.javaをほぼそのまま使ってフィルタ本体を以下のように簡易実装しました。

    private String serviceUrl = "http://sp.example.net:9090/opensso-sp";

    public void doFilter(ServletRequest xRequest, ServletResponse xResponse,
            FilterChain chain)
            throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) xRequest;
        HttpServletResponse response = (HttpServletResponse) xResponse;

       if (isAuthenticated(request)) {
            try {
                chain.doFilter(request, response);
            } catch (Throwable t) {
                problem = t;
                t.printStackTrace();
            }
        } else {
            response.sendRedirect(serviceUrl + "/UI/Login?goto=" +
                    request.getRequestURL().toString());
        }
    }


内容は簡単なので特に説明は不要だとは思いますが念のため書いておくと、 isAuthenticated()でクッキーからトークンを取得してバリデーションする 処理が走り、認証されればWebアプリ本体へ処理を渡し、認証されなければ gotoで戻り先を指定してOpenSSOにリダイレクトします。文章でさらっと書いて しまいましたが、isAuthenticated()の中身は OpenSSOUtil.javaを見てください。

NetBeansのVisual Webアプリケーションのプロジェクトでアプリとフィルタを 作っていったのですが本当に簡単ですね。 今回はOpenSSOUtil.javaからアイデンティティ・サービスをRESTで使ってみた のですが、NetBeansでアイデンティティ・サービスのWSDLを読み込んでWebサービス クライアントを自動作成し、さらにソースコードエディタ上で右クリックして Webサービス呼び出し部分のコードのテンプレートを自動作成してしまえば SOAP呼び出しも簡単に実装することができます。

後でSAML 2.0のフェデレーションも試してみたかったので、工藤さんの こちらこちらの 記事を参考にOpenSSOの環境を事前にセットアップし、完成したWebアプリをデプロイして動作を確認します。 NetBeansを使えばビルドからデプロイもとても簡単です。 ブラウザでURLを入力すると、OpenSSOのID/パスワード入力画面が表示され、 認証された後にWebアプリにアクセスが可能になります。認証されなければ Webアプリにアクセスできません。更に、別のWebアプリを作って、こちらにも フィルタをセットしてデプロイすれば、お手軽シングルサインオン環境が完成です。 あたりまえの動作ですが、こんな簡単でいいの?というのが実感ですね。

通常のWebアプリではOpenSSOが提供するポリシーエージェントを使えば カスタムな認証部分を作らなくて済むケースがほとんどだと思いますが、 例えば、これまでの社内標準化の取り組みで認証基盤を独自に手作りして使ってきたような ケースでは、OpenSSOのアイデンティティ・サービスをうまく使って既存の 認証基盤をOpenSSO配下に統合していくようなアプローチは有効だと思います。 一旦、OpenSSO配下に入ってしまえば、OpenSSOが提供する機能を利用して、 他のIDPとのフェデレーションであったり、WindowsログオンでのSSO、 いわゆるWindowsデスクトップ・シングル・サインオンの機能を実現したり、 今後の展開の可能性を大きく広げることができます。 OpenSSOが機能を提供している認証/認可の技術エリアは、アイデンティティ情報を管理する側と、 管理されたアイデンティティ情報をベースにサービスを提供する側の接点となり、 両側の思惑がぶつかる部分ですので、将来的に柔軟な対応が可能な作りにしておくことが とても重要だと思います。

最近、認証/認可に関するエリアの話が多くなってきているのですが、時々、 OpenID vs OpenSSO (正確にはOpenID vs SAML 2.0だと思いますが...) のような 話され方をしてしまうのは残念に思います。決して相反するものではなく、 互いに補完しあえるものだと思います。RubyとJavaのように。事実、OpenSSOでは OpenIDのextentionでOpenIDのOPを実現することも可能になっていますからね。

さぁ、次はフェデレーションにチャレンジだ。

木曜日 8 28, 2008

「短期間で、安く、プロジェクトを失敗することなく、 アイデンティティ管理システムを構築したい!」というお客様の ニーズにお応えするため、 サン・プロフェッショナル・サービス(SunPS)では、 アイデンティティ管理システム実現に必要な (1)アイデンティティ情報のプロビジョニング、(2)パスワード管理、(3)ロール管理の 3つの機能に関して基本的な機能を定型化して実現するソリューションを提供しています。
  • アイデンティティ情報のプロビジョニング (Sun HR Synchronization Service)
    人事情報システムから送られてくるアイデンティティ情報をもとに、 アイデンティティ情報を独自に保持する複数のリソースに対して 自動的にユーザ・アカウントの作成/変更/削除を行ってアイデンティティ 情報を伝播する機能を実現します。 このサービスで入出力として利用可能なリソースはCSVファイル、LDAP、 JDBC接続可能なDatabase、Active Directoryです。 このサービスを利用することで、例えば、SAP HRで出力されたCSVを 取り込んでLDAPやOracle DB、Active Directoryにアイデンティティ情報を 自動的に伝播するといったことが実現できます。 また、ユーザの退職や休職、IDの変更(rename)など、実際の業務で 必要となる処理フローも実装しています。

  • パスワード管理 (Sun Password Management Service)
    個々のユーザのパスワード管理に必要な基本機能を実現します。 複数のリソースに対する一括パスワードリセット機能や、パスワードを 忘れた場合にエンドユーザ自身でパスワードをリセットするための機能を 実現してヘルプデスクの負荷を軽減することができます。 また、パスワードの文字数や使用する文字種の指定等のルールによる パスワードポリシー違反チェックの機能も実現可能です(Identity Managerの 基本機能で設定可能なポリシーだけが対象です)。

  • ロール管理 (Sun Role Management Service)
    ロールベースのアクセスコントロールに必要な基本的なロール管理機能を実現します。 ロールの管理はビジネスロールとファンクショナルロールの2つのレベルで行われ、 個々のユーザに割り当てられたビジネスロールに対するファンクショナルロールの プロビジョニング処理では、アクセスコントロールの対象となるアプリケーションに 対してロール情報を自動的に伝播し、監査のための記録を残します。 なお、ロールの申請および承認のワークフローも含まれます。
これら3つの基本機能を要件定義からインプリ完了まで8~12週程度で実現します。 細かい条件によっては期間がぶれる可能性もありますが、約3ヶ月で、 PoC (Proof of Concept)ではなく、実業務で使えるレベルのシステムが できあがります。

お客様の要件が上記ソリューションで提供される機能の範囲におさまらない ケースもあると思いますが、その場合にはプロジェクトのフェーズを分ける のがよいでしょう。 まずは基本機能を上記ソリューションで短期間に立ち上げ、 次のフェーズで基本機能に対するオプションとして追加機能を開発する という、いわゆる Incremental & Iterative なアプローチです。 プロジェクトを確実に成功へ導くため、Start Small, Build Big. の 考え方を取り入れてはいかがでしょうか。

SunPSでは上記のサービスだけでなく、お客様の要件に応じてサービス内容を 規定するカスタム・コンサルティングも提供しています。 サンのアイデンティティ管理ソリューションの詳細に関しましては こちらのページをご覧ください。

火曜日 8 19, 2008

プロジェクトFujiスクリーンキャストを 見ました。久々に「おーっ、すごい!」って感じです。デモではRSSを入力にRubyでフィルタした結果を XMPPでIMに流したり、ファイルにアーカイブして出力していて、 Yahoo! Pipesっぽいデモになっていましたが、 JBI準拠のBCとSEを使えばinput/output、フィルタとして何でも使えて、 何でもできちゃうってことですから、これはすごい!

プロジェクトFujiの成果は、 GlassFish v3 + Open ESB v3 + Project Fuji = GlassFish ESB としてまもなく最初のリリースが行われる予定です。 GlassFishが単なるアプリケーションサーバではなく、Composite Application Developmentにおける 開発/実行の基盤となり、しかも、"The open source ESB with commercial support"と明言していて、 必用なお客様には有償の製品サポートも提供されるということなので、 私たちPSとしてもオープンソースベースのソリューション展開をしていく上で 今後のGlassFishプロジェクトに大きな期待をしています。

それにしても、オープンソースでここまでできるってすごいなと思います。 過去のサンのアプリケーションサーバのことを思えば、オープンソースにしたからこそ、 ここまで来れたと言ったほうがいいのかもしれませんね。

木曜日 3 08, 2007

月曜日に大阪へ行ってきました。Identity Manager(IDM)案件の打合せに 行ったのですが、内容的には空振りという感じで、ちょっとがっかりだった のですが、まぁ、たまにはこんなこともあります。

行きの新幹線はいつものようにラップトップを取り出して、NetBeansで いろいろ作って試してみました。ものを作っているとあっという間に 時間が過ぎていくので、移動の時間もそれほど苦になりません。今回は NetBeansの機能をいろいろと試しながら、Java EE 5でEntity EJBとそれの CRUD処理のFacadeとなるSession EJBを作り、それをWebサービス化して、 Visual Web Packで作ったJSFのWebアプリから呼び出すところまで作りました。 JSFのWebアプリとWebサービスの間にBPELをはさんで動かしてみようかなと 思ったところで残念ながらバッテリの残量が無くなってきてしまいました。

帰りはIDMグループのリードをしてもらっている神人(かみと)さんと話を しながら帰ってきました。いろんな話をしたのですが、最近、気になって いるIDM案件の構築コストの問題についても話をしました。 アイデンティティ管理基盤は、一人のユーザに対してシステム毎に割り当て られた複数のIDを互いに紐付けて一元的に管理するためのフレームワークを 提供するわけですが、一般的には、連携するシステムの数と連携の複雑さ、 作りこむワークフローの数がコストに対して大きな影響を与えます。

連携というのは、ひとつのID情報が変更された場合に、そのIDに紐付く他の ID情報に対して変更を伝播する処理で、入力がひとつで単方向の連携というのが 最もシンプルな形です。複数の入力があって、しかも双方向の連携という ことになると、入力となるべき複数のデータ間で矛盾があった場合の処理など、 カスタムで作り込まなければならい部分の量が増えてしまうので、当然、コストに 影響します。IDM導入後も現状のアイデンティティ情報の伝播フローのまま運用する ことを前提とするのでなく、連携の仕方を見直してうまく整理することができれば 構築コストも押さえられるし、システムの安定化という面でもメリットがあります。

また、IDの割り当てやIDの利用形態を見直すこともとても大切です。一人に ひとつのIDということを前提とすればID情報の紐付けは1対1のシンプルな マッピングで済むのですが、現実には一人で複数のIDを使っていたり、ひとつの IDを複数人で使っているケースもあり、IDM導入後もその運用を変えたくないと いう話になってしまうとマッピングが複雑になってID情報の連携処理のために カスタムで作り込まなければならない部分が増えてしまったり、それどころか、 本当にIDMで実現できるのか?といった話になってしまう可能性もあります。 構築プロジェクト的にはコストも増えるし、実現のリスクも高くなってしまう ので、こういった状況になることは可能な限り避けたいのですが、プリセールスや 要件定義の段階で話が決まってしまった後では、要件をひっくり返すことは簡単ではなく、 調整にかなりの手間と工数が必要になってしまうかもしれません。

アイデンティティ管理基盤の整備というのはシステムを導入することだけでなく、 アイデンティティ管理の運用自体もキレイにしていく必要があるはずです。 どうしてもITの話が先行しがちですが、To-Beのアイデンティティ管理のモデルに ついても(遅くとも)並行して話を進め、シンプルで管理しやすいモデルが作れれば、 それを実現するためのツールであるITの部分もシンプルになり、より低い構築コストで より安定したシステムを実現するという話につながっていきます。

今回は久々の大阪だったんですが、それにしても、551のぶたまんっておいしいですね。 また買っちゃいました。

金曜日 2 23, 2007

この四半期ももう半分終わってしまいました。今期の数字作りに忙しい 毎日ではありますが、そんな中、来期以降の案件としてアイデンティティ 管理基盤構築関連の案件が次々とパイプラインに入ってきています。

大雑把に言うと、アイデンティティ管理基盤構築はアイデンティティ情報 そのものの管理に関する部分の整備と、管理されたアイデンティティ情報を 使ったアクセス制御およびシングルサインオン(SSO)の部分の整備から成り、 前者をIdentity Manager (IDM)、後者をAccess Manager (AM)というサンの ミドルウェア製品を中心にシステムを構成する案件となります。 どちらか一方だったり、両者を連携する形で導入したりとお客様の要件によって 案件の形は変わってきますが、IDM/AMともに製品が持つ機能の優位性に加え、 内部統制目的という背景から両製品の豊富な過去実績が高く評価され、IDM/AMを 使った案件の引き合いが増えているのだと思います。SunPSでは更なる案件増に きちんと対応できるように体制を整えていますので、安心してアイデンティティ 管理基盤構築案件を売ってきてください。 >> 営業のみなさま

IDM/AMの素晴らしさはサンの Webページ、 あるいはtkudoさんkimimasaくんのブログをどうぞ。

水曜日 1 10, 2007

あけましておめでとうございます。今年もよろしくお願いします。 今年はカレンダにも恵まれて今日(1/9)が仕事始めだったわけですが、 2007年の仕事の幕開けはIDM案件のリソースアサイン調整でした。 うれしいことにスタッフのアサインが追いつかないぐらいのペースで 順調にIDM案件が増えてきていて、うれしい悲鳴といった感じです。

SunのIdentity Managerを使ったシステム構築はSunのパートナー様が行う ケースと、Sunが直接エンドユーザ様から発注いただくケースがあり、私たち プロフェッショナル・サービス(SunPS)ではパートナー様に対する構築支援 サービスとエンドユーザ様に対する構築サービスの両方を提供しています。

パートナー様が構築するケースでは、以前はパートナー様が単独で構築される ケースが多かったのですが、最近はSunPSの構築支援サービスをご利用いただける ケースが増えてきています。IDMシステム構築はIDMサーバソフトをインストールして 設定すれば終わりというものではなく、むしろ、プロビジョニングやワークフローの 設計/実装等、業務アプリケーション開発に近いものです。ServletやEJBのプログラミングを 勉強しただけで業務システムを構築するのが難しいのと同じように、IDMの製品 トレーニングを受けただけでIDM構築案件を進めることには大きなリスクがあります。 例えば、要件として何を定義すればよいのかとか、どういうプロセスで開発を進めていけば よいのかとかわかりませんよね。SunPSのIDM構築支援サービスでは製品の利用に関する 技術支援だけでなく、こういった部分でも構築のお手伝いをさせていただいています。

2つ前のエントリでネットショッピングのことを書きましたが、 2006年最後の買い物は「シュレッダーはさみ」でした。年末の大掃除で 自宅のパーソナルシュレッダーのトロさに我慢できず、ついつい買って しまいました。2007年最初の到着品となったわけですが、はさみの刃が 9枚平行に並んでいる形状で短冊状にザクザクと切っていくことができ、 セキュリティ対策だけでなく、ストレス発散にもけっこう役立ちそうです。

木曜日 6 08, 2006

インスタントメッセージング(IM)サーバの話です。

サンの IMサーバeXtensible Messaging and Presence Protocol (XMPP)という オープンなプロトコルを使っているので、製品提供されているクライアントだけでなく、 世の中に存在するXMPP対応クライアントプログラムを利用したり、カスタムのクライアントを 開発して利用することが可能です。 XMPP対応のクライアントはここに まとめられています。Java/J2MEを含めて、いろんなプラットフォームに対応したものがありますねー。

リスト中の全てを詳しく見たわけではないのですが、この中の Gaimを使ってサンのIMサーバに接続してみました。 まずはアカウントを設定して接続。パスワードを入力してログインが完了し、仲間リストが表示されます。 おー、ちょうどいい、山下さんがいるぞ!ということで 彼を捕まえてみました。



さすが、山下さん。ここに貼られることを知って いたかのような絶妙なレスポンスです。 サンの IMサーバ が提供するクライアントはJava Web Startを利用してクライアント プログラムのインストールが不要というメリットがあり、私たちとしても最もオススメなことは 間違いないのですが、使用可能なクライアントがたくさんあり、使用する環境やお客様の 好みにあわせてベストなものを選択できるということはいいことですよね。

日曜日 4 16, 2006

ここにはSOAやJavaアプリケーションプラットフォーム関連のネタばかり 書いていますが、私はアイデンティティ管理&コミュニケーションプロダクトの チームも兼任で担当しているので、今日は インスタントメッセージングサーバ(IMサーバ)の 話を書いてみようと思います。

IMサーバ に関しては、ちょうど今、大きめな 案件が進んでいることもあり、私たちのチームとしても積極的にプロモーション していこうということで、Business Developmentチームの 田中さん達と 準備を進めています。 サンの社内でもIMサーバを立てていて、外部のネットワークからVPNを 使うこと無しに利用することができるようになっています。ブラウザから指定のURLにアクセス するとJava Web Start経由で クライアントが起動され、本当に簡単に利用できます。 私も毎週金曜はお客様のサイトで作業しているのですが、社内あるいは社外に出ている スタッフとのコミュニケーションの手段として電話、メール、IMを用途に応じて 使い分けています。正直なところ、IMは最近になって使い始めたのですが、 複数の人と同時に離せるということと、会話のログが残るという部分が便利ですね。 特にログに関しては最近流行のキーワードである「内部統制」という観点からの引き合いもあります。 サンのIMサーバはNetscapeのIMサーバがベースで、大規模運用の実績もあるというのが強みの ひとつです。

我々のチームで主にコミュニケーション関連製品を担当している 山下さんも最近ブログを書き始めたので、 これから メッセージング(メール)サーバ インスタントメッセージング(IM)サーバに関しておもしろいネタを提供してくれるでしょう。 彼自身が 書いているように、 彼は一度サンを辞めて戻ってきたいわゆる「出戻り」なのですが、外の空気を吸って客観的に サンを眺めた経験が私たちのこれからのビジネスにとってきっとプラスになると思っています。