連載 XML Webサービスのセキュリティ実装

第2回 承認と偽装によるアクセス制御

矢嶋 聡
2003/05/28
Page1 Page2

2-2 ファイル承認

 ファイル承認は、ファイルやフォルダに対するアクセスを制御する仕組みで、厳密にいえば、ASP.NET固有の機能ではなく、実質的にはNTFSファイルシステムを使用した機能です。アクセス制御に関する設定は、通常のNTFSファイルシステムのセキュリティ設定を使います。読者の皆さんが、必ずしもドライブをNTFSでフォーマットしているとは限らないので、ここでは基本的な考え方について説明します。むしろ、重要なのはファイル承認そのものではなく、この機能の背後にある仕組みを理解することです。

 この仕組みを利用すると、XML Webサービスなどのプログラムから、ファイルなどのリソースにアクセスする際、ユーザーごとにアクセスを制御できます。ただし、ファイル承認を利用するには、注意する点があります。XML Webサービスのプログラムがファイルにアクセスするとき、Windows OSにしてみれば、ファイルにアクセスしているのは、あくまでASP.NETランタイムであり、このランタイムは「ASPNET」というユーザー・アカウントで実行されています。つまり、XML WebサービスやWebフォームのプログラムがファイルにアクセスするとき、NTFSにアクセスする評価対象はASPNETユーザー・アカウントです。各ユーザーがログオンに利用したアカウントではありません。

 各ユーザーがログオンに使用したアカウントを使って、NTFSのファイルにアクセスするには、「偽装(Impersonation)」と呼ばれる設定が必要です。本来、ASPNETユーザーがアクセスすべきところを、特定のログオン・ユーザーに化けるのです。ログオン・ユーザーに偽装するには、Web.configに<identity>要素を含めて次のように記述します。

<configuration>
    <system.web>
    <identity impersonate="true" />
  </system.web>
</configuration>
例 ログオン・ユーザーに偽装する

 impersonate属性をtrueに設定すると、ASP.NETランタイムはリソースにアクセスする際に、既定のASPNETユーザー・アカウントではなく、ログオン・ユーザーのふりをしてリソースにアクセスします。その結果、ユーザーごとにNTFSセキュリティが作用します。ただし、ファイル承認を使うには、Windowsユーザー・アカウントを使用した認証方法で認証されなければなりません。

 ファイル承認において、ユーザーごとに制御する説明は以上ですが、この<identity>要素には、もう1つの使い方があります。偽装の際に、ログオン・ユーザーでアクセスさせるのではなく、一定のユーザー・アカウントで常にアクセスさせることもできます。この場合は、userName属性とpassword属性を追加して次のように記述します(XMLは、大文字・小文字を区別します。userNameはNだけ大文字なので注意してください)。

<configuration>
  <system.web>
    <identity impersonate="true"
     userName="taro" password="pass" />
  </system.web>
</configuration>
例 特定のアカウントに偽装する

 このように指定すると、ASP.NETランタイムは既定のASPNETアカウントを使わずに、指定されたアカウントでアクセスします。

 実は、この<identity>要素はファイル承認に限らず、ASPNETランタイムが外部リソースにアクセスする際の偽装に利用できます。例えば、SQL Serverにアクセスする際に、XML WebサービスからWindows認証を使って透過的にアクセスしようとすると、既定ではログオン・ユーザーではなく、ASPNETアカウントでSQL Serverへのアクセスを試みます。NTFSファイルシステムに限らず、外部リソースにWindows認証を使ってアクセスする場合には、偽装に関して考慮する必要があります。

 結局、<identity>要素の設定によって、外部リソースへのアクセス方法が、次の3つの中から選択することになります(図8)。

(1)ASPNETアカウントを使用する。
(2)ログオン・ユーザーのアカウントを使用する。
(3)特定のユーザー・アカウントを使用する。

図8 <identity>要素の設定によってアクセス方法が変わる

 なお、ASP.NETランタイムがASPNETアカウントで動作しているということは、厳密にいえば、「ワーカー・プロセス」がASPNETユーザー・アカウントで動作しているという意味です*2。ワーカー・プロセスのアカウントは変更することもできます。変更するには、マシン全体の構成を行うmachine.configファイル内で、<processModel>要素を修正します。詳しくは、ドキュメントで<processModel>を検索して参照してください。

*2 編集部注: ワーカー・プロセスは、IISに対して要求が来たときにASP.NETのプログラム実行用に起動されるプロセスです。転載元の「VB.NETによるXML Webサービス開発」では、6-1-3「実行環境の特徴」でワーカー・プロセスについて解説しています。

 また、前述の3つの方法のうち(3)の方法は、Windows 2000ではもう1つ設定を変更する必要があります(Windows XPでは変更不要)。Windows 2000の既定の構成では、ログオン・アカウントに偽装することはできますが、特定の任意のアカウントに偽装する(3)の方法ができません。(3)を行うには、ASPNETアカウントに「オペレーティング・システムの一部として機能」というユーザー権利を与える必要があります。この権利をアカウントに与えるには、「ローカル・セキュリティ設定」などの管理ツールが必要です(図9)。

図9 「ローカル・セキュリティ設定」ツール

 詳しい設定方法は、このツールのヘルプをご覧ください(左ペインで「ユーザー権利の割り当て」を選択すると、右ペインの先頭行にこのユーザー権利が表示されるはずです。この行をダブルクリックすると、ユーザー権利の割り当てができます)。End of Article

VB.NETによる XML Webサービス開発

  本記事は@ITハイブックスシリーズ「VB.NETによる XML Webサービス開発」(インプレス)から、一部の内容を編集し転載したものです。本書の詳細は「@ITハイブックス」サイトでご覧いただけます。
 

 INDEX
  連載 XML Webサービスのセキュリティ実装
  第2回 承認と偽装によるアクセス制御
    2-1 URL承認(URL Authorization)
  2-2 ファイル承認
 
インデックス・ページヘ  「連載 XML Webサービスのセキュリティ実装」


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メールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間