連載
Enterprise Library概説

柔軟なセキュリティ機能を実装しよう

アバナード株式会社 市川 龍太(patterns & practices Champion
2006/06/03
Page1 Page2 Page3

●AzMan ポリシー・ストアの作成

 まずコマンド・プロンプトあるいは[スタート]メニューの[ファイル名を指定して実行]で“azman.msc”と入力して[Authorization Manager]MMCスナップインを開き、以下の手順で設定する。

  1. メニュー・バーから[操作]−[Options]をクリックして、表示される[Options]ダイアログで「Developer mode」を選択する。

  2. 次に[操作]−[New Authorization Store]を選択し、表示される[New Authorization Store]ダイアログで[許可ストアのタイプ](authorization store type)を「XML File」に設定してから、[Store name]に「C:\SampleStore.xml」と入力する。

  3. [Authorization Manager]のツリービューで、[Authorization Manager]−[SampleStore.xml]を右クリックしてから[プロパティ]を選択する。これにより、[SampleStore.xml Properties]ダイアログが表示されるので、[Security]タブをクリックして開き、[Authorization Manager user role]を「Administrator」に設定してから、[Add]ボタンをクリックする。そして、これにより表示される[ユーザー、コンピュータ または グループ の選択]ダイアログで上記サンプル・プログラムを実行するWindowsユーザーを追加する。

  4. 再びツリービューで[Authorization Manager]−[SampleStore.xml]を選択してから、メニュー・バーから[操作]−[New Application]を選択する。表示された[New Application]ダイアログの[Name]に任意のアプリケーション名(ここでは「z」)を入力し、[OK]ボタンを押下する

 ここまでの手順でAuthorization Managerは以下のような構成になっているはずである。

Authorization ManagerによるAzManポリシー・ストアの作成例
本稿の手順でAzManポリシー・ストアを作成するとこのような内容になる。

●タスクとオペレーションの設定

 次にタスクとオペレーションを作成する手順を以下に示す。この設定も先ほどと同じ[Authorization Manager]MMCスナップインを使う。

  1. [Authorization Manager]のツリービューの[Authorization Manager]−[SampleStore.xml]−[SampleApp]−[Definitions]−[Task Definitions]ノードを右クリックして[New Task Definition]を選択する。これにより表示された[New Task]ダイアログの[Name]に“SampleTask”と入力する。

  2. 次に再びツリービューの[Authorization Manager]−[SampleStore.xml]−[SampleApp]−[Definitions]−[Operation Definitions]を右クリックして[New Operation Definition]を選択する。これにより表示される[New Operation Definition]ダイアログの[Name]に“SampleOperation”と入力し、さらに[Operation number]に「1」と入力する。

  3. 次に[Authorization Manager]−[SampleStore.xml]−[SampleApp]−[Definitions]−[Task Definitions]ノードを選択し、右ペインに表示されている「SampleTask」をダブルクリックする。これにより表示される[SampleTask Definition Properties]ダイアログの[Definition]タブを開き、[Add]ボタンを押下する。そこで表示される[Add Definition]ダイアログの[Operations]タブを開き、「SampleOperation」にチェックを入れる。

 タスクとオペレーションの設定が終わったら、最後にロールへユーザーを割り当てる必要がある。

●ロールの作成とユーザーの割り当て

 最後に、ユーザーとタスク、オペレーションをロールに割り当てよう。

  1. [Authorization Manager]のツリービューのルート・ノード([Authorization Manager]ノード)を選択し、メニュー・バーから[操作]−[Options]を選択する。表示される[Options]ダイアログの「Administrator mode」を選択し、[OK]ボタンを押下する。

  2. ツリービューの[Authorization Manager]−[SampleStore.xml]−[SampleApp]−[Definitions]−[Role Definitions]を右クリックして、[New Role Definition]を選択する。これにより表示される[Role Definition]ダイアログの[Name]に“Developer”と入力する。

  3. 次にツリービューの[Authorization Manager]−[SampleStore.xml]−[SampleApp]−[Role Assignments]ノードを右クリックして、[Assign Roles]を選択する。これにより表示される[Add Role]ダイアログで「Developer」にチェックを入れて[OK]ボタンを押下する。

  4. ツリービューの[Authorization Manager]−[SampleStore.xml]−[SampleApp]−[Role Assignments]−[Developer]ノードを右クリックして、[Assign Windows Users and Groups]を選択する。これにより表示される[ユーザー、コンピュータ または グループ の選択]ダイアログで上記サンプル・プログラムを実行するWindowsユーザーを追加する。

  5. ツリービューの[Authorization Manager]−[SampleStore.xml]−[SampleApp]−[Definitions]−[Role Definitions]を選択して、右ペインに表示されているDeveloperをダブルクリックする。表示される[Developer Definition Properties]ダイアログの[Definition]タブを開き[Add]ボタンを押下する。そこで表示される[Add Definition]ダイアログの[Tasks]タブを開き、「SampleTask」にチェックを入れる。続いて[Operations]タブを開き、「SampleOperation」にチェックを入れる。

 これでSampleStore.xml内にAzManポリシー・ストアが作成されることになる。

●AzMan Authorization Provider用アセンブリの作成

 SecurityABはデフォルトではAzMan Authorization Provider用アセンブリ・ファイルが提供されていないため、AzManポリシー・ストアを作成しただけでは、まだ利用することができない。そのため、手動でアセンブリ・ファイルを作成する必要がある。

 これを行うには、まず[スタート]メニュー−[プログラム]−[Microsoft patterns & practices]−[Enterprise Library - January 2006]−[Application Blocks for .NET]−[Security Application Block]−[Security Application Block (VSTS Tests)]または[Security Application Block (NUnit Tests)]を選択し、SecurityABのソリューションを開く。

 次に「Security Application Block」ソリューション・フォルダ内の「Security.AzMan」プロジェクトでAzMan COMオブジェクト用プライマリ相互運用アセンブリ(Microsoft.Interop.Security.AzRoles.dll)への参照を設定する。

 具体的には、「Microsoft.Interop.Security.AzRoles.dll」ファイルへの参照を追加し、さらに(GAC内のアセンブリを使用するので)先ほど追加した「Microsoft.Interop.Security.AzRoles」という参照項目を右クリックして[プロパティ]を選択して表示された[プロパティ]ウィンドウで[ローカル コピー]を「False」に設定する。

プライマリ相互運用アセンブリへの参照設定を追加した後のプロジェクト内容
Visual Studio 2005のソリューション・エクスプローラで「Security Application Block」ソリューション・フォルダの内容を展開したところ。なお、SecurityABのプロジェクトが読み取り専用の場合があるので、その場合は読み取り専用属性を解除したうえで作業すること。

 ソリューションをリビルドした後で、[スタート]メニュー−[プログラム]−[Microsoft patterns & practices]−[Enterprise Library - January 2006]−[Copy Assemblies to bin Folder]を選択し、binフォルダ直下に全アセンブリ・ファイルをコピーしてから、Configurationコンソールを起動すると、「AzMan Provider」を選択できるようになっている。

AzMan Providerが登録されたConfigurationコンソール
新規のアプリケーションにSecurityABを追加したところに、「AzMan Provider」を追加しようとしているところ。

 次に、先ほどの「 ルールベース認定機能」と同じようにConfigurationコンソールでSecurityABの構成を設定する。その手順はほぼ同じだが、ルールベース認定機能ではSecurityABを追加した後、Authorization Rule Providerを追加したが、ここ( AzManを活用した認定機能)では「AzMan Provider」を追加しなければならい。その後は、以下の表のとおりプロパティを設定すれば、すべての手続きは終了である。

ノード プロパティ 設定値
Security Application Block Default
Authorization
Instance
AzMan Provider
DefaultSecurity
Cache
Instance
(なし)
Name Security Application Block
Authorization Name Authorization
AzMan Provider Application SampleApp
AuditIdentifier
Prefix
AzMan Authorization Provider
Name AzMan Provider
Scope
StoreLocation msxml://c:/SampleStore.xml
AzMan Provider利用時のSecurity Application Block配下の各ノードのプロパティ設定例
表中の太字の個所がデフォルト設定を変更した設定値である。

 以上の内容は、「App.config」(アプリケーション構成ファイル)として、この内容を利用するアプリケーションの(Visual Studioの)プロジェクト・フォルダに保存する(メニューバーの[File]−[Save Application]を実行)。

 先ほどの「SecurityABを使用した場合のサンプル・プログラム」でこのAzManによる認定機能を活用するには、そのプロジェクトにさらにMicrosoft.Practices.EnterpriseLibrary.Security.AzManアセンブリへの参照を追加し、そのコードの中にあるAuthorizeメソッドの第2パラメータの値を“SampleTask”に変更して実行すればよい。これによりコンソール画面には「Authorized User」と表示されるはずである。

Caching Application Blockを利用したキャッシュ機能の利用方法

 リクエストのたびにロール情報へアクセスしていたのでは、パフォーマンス上の問題が発生することもあるため、先述したようにASP.NET 2.0ではクッキーにロール情報をキャッシュするようになっている。それに対してSecurityABでは、デフォルトでメモリ上にキャッシュするようになっている。

 しかしデフォルトの設定ではルール情報がアプリケーション構成ファイルにそのまま記述されてしまうため、セキュリティの面で問題になることもあるのだが、SecurityABではそれらキャッシュの制御をCache Managerで行うようになっているため(Configurationコンソールで指定)、データのキャッシュ先をデータベースや分離ストレージに変更することによってルール情報を暗号化して格納することができるようになっている。

 それでは以下の画面にCache Managerを利用する手順を示す。

ConfigurationコンソールでのCache Managerの追加
新規のアプリケーションにSecurityABと「RuleProvider」を追加したところに、さらに「Cache Manager」を追加しようとしているところ。
  まずは「Caching Store Provider」を追加する。これを行うには、SecurityABを追加するときに同時に追加される「Security Cache」ノードの上で右クリックしてコンテキスト・メニューを表示し、そこから[New]−[Caching Store Provider]を選択すればよい。これにより「Caching Application Block」ノードが「Application Configuration」ノードの下に追加される。
  次に「Cache Manager」に「Database Cache Storage」を追加する。これを行うにはで追加された「Caching Application Block」−「Cache Managers」−「Cache Manager」ノードの上で右クリックしてコンテキスト・メニューを表示し、そこから[New]−[Database Cache Storage]を選択すればよい。これにより「Data Access Application Block」ノードが「Application Configuration」ノードの下に追加される。

 このようにSecurityABのキャッシュ機能は依存関係にあるCaching Application Block、さらにData Access Application Blockも利用するようになっている。

 以上ここまでSecurityABの各機能について解説してきたわけだが、最後にASP.NET 2.0のロール管理機能ではなく、SecurityABを使うための指針をまとめると、以下のものが挙げられるだろう。

  • ルール情報を暗号化して保持したい場合
  • ルールベースの認可機能を簡単に利用したい場合
  • ASP.NET 2.0の認証機能が利用できない場合

 逆にSQL Serverなどでロール情報を管理したい場合などは、ASP.NET 2.0のロール管理機能を利用するとよいだろう。

 以上、今回はSecurityABの概要説明と各機能の利用手順、さらにAzManの利用手順について解説した。次回はCryptography Application Blockを使った暗号化処理について解説する予定である。End of Article


 INDEX
  連載:Enterprise Library概説
  柔軟なセキュリティ機能を実装しよう
    1.ASP.NET 2.0セキュリティ機能
    2.ルールベース認定機能の利用方法
  3.AzManを活用した認定機能の利用方法
 
インデックス・ページヘ  「Enterprise Library概説」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)
- PR -

注目のテーマ

Insider.NET 記事ランキング

本日 月間
ソリューションFLASH