セキュリティ承認 <authorization>

  • 概要
  • 互換性
  • セットアップ
  • 方法
  • 構成
  • サンプル コード

※本ページに挿入されている画像をクリックすると、画像全体が別ウィンドウで表示されます。

概要

<authorization> 要素を使用すると、サイトまたはアプリケーションにアクセスできるユーザー アカウントを構成できます。承認を認証と組み合わせて使用することで、サーバー上のコンテンツへのアクセスをセキュリティで保護することが可能です。認証でユーザーの ID を確認し、承認でどのリソースにユーザーがアクセスできるか、またはできないかを決定します。

IIS では、許可規則と拒否規則の 2 種類の承認規則を定義しています。

  • 許可規則を使用すると、サーバー上の特定のサイト、特定のアプリケーション、またはすべてのサイトにアクセスできるユーザー アカウントまたはユーザー グループを定義できます。
  • 拒否規則を使用すると、サーバー上の特定のサイト、特定のアプリケーション、またはすべてのサイトにアクセスできないユーザー アカウントまたはユーザー グループを定義できます。

互換性

  IIS 7.0 IIS 6.0
注意 <authorization> は IIS 7.0 で新たに導入された要素です。 <authorization> コレクションは、IIS 6.0 の AzEnable、AzStoreName、AzScopeName、および AzImpersonationLevel メタベース プロパティに代わるものです。

セットアップ

Web サーバー上のサイトやアプリケーションの承認をサポートおよび構成するには、URL 承認モジュールをインストールする必要があります。それには、次の手順を実行します。

Windows Server 2008

  1. タスク バーで [スタート] をクリックし、[管理ツール] をポイントして [サーバー マネージャー] をクリックします。

  2. [サーバー マネージャー] ウィンドウのツリー表示で、[役割] を展開して [Web サーバー (IIS)] をクリックします。

  3. [Web サーバー (IIS)] ウィンドウで、[役割サービス] セクションまでスクロールして [役割サービスの追加] をクリックします。

  4. 役割サービスの追加ウィザードの [役割サービスの選択] ページで、[URL 承認] を選択して、[次へ] をクリックします。

    拡大

  5. [インストール オプションの確認] ページで [インストール] をクリックします。

  6. [結果] ページで [閉じる] をクリックします。

Windows Vista

  1. タスク バーで [スタート] をクリックし、[コントロール パネル] をクリックします。

  2. [コントロール パネル] で、[プログラムと機能][Windows の機能の有効化または無効化] の順にクリックします。

  3. [Internet Information Services] を展開し、[URL 承認] を選択して [OK] をクリックします。

    拡大

方法

承認規則の追加方法

  1. タスク バーで [スタート] をクリックし、[管理ツール] をポイントして [インターネット インフォメーション サービス (IIS) マネージャー] をクリックします。

  2. [接続] ウィンドウで当該サーバー名を展開して [サイト] を展開し、承認を構成するサイトまたはアプリケーションを選択します。

  3. [ホーム] ウィンドウで [承認規則] をダブルクリックします。

    拡大

  4. 新しい承認規則を追加するには、[操作] ウィンドウで [許可規則の追加] または [拒否規則の追加] をクリックします。

  5. サイトまたはアプリケーションに必要な承認設定を適用し、[OK] をクリックします。次に例を示します。

    • 例 1 : 特定の HTTP 動詞に対して、次のようにすべてのユーザーに許可規則を追加します。

      拡大

    • 例 2 : すべての HTTP 動詞に対して、次のように特定のユーザーに拒否規則を追加します。

      拡大

    注 : 既存の規則を編集したり削除したりするには、[承認規則] ウィンドウで対象の規則を選択し、[操作] ウィンドウの [編集] または [削除] をクリックします。[編集] をクリックした場合は、ダイアログ ボックスが表示されて規則を編集することができます。このダイアログ ボックスは [許可の承認規則の追加][拒否の承認規則の追加] ダイアログ ボックスと似ています。

構成

サーバー レベルでの <authorization> 要素の構成は ApplicationHost.config ファイルで、サイトまたはアプリケーション レベルでの構成は該当する Web.config ファイルで、それぞれ設定できます。

既定の承認規則をサーバー全体に対して設定するには、承認規則をサーバー レベルで構成します。これらの規則を削除、クリア、または無効にするには、サイトまたはアプリケーションでより詳細な規則を構成します。

属性

属性 説明
bypassLoginPages オプションの Boolean 属性。

フォーム認証のログイン ページとして指定したページの承認チェックを省略するかどうかを指定します。これにより、認証されていないユーザーがログイン ページにアクセスして、ログオンできるようになります。

既定値は true です。

子要素

要素 説明
add オプションの要素。

承認規則のコレクションに承認規則を追加します。
remove オプションの要素。

承認規則のコレクションから特定の承認規則に対する参照を削除します。
clear オプションの要素。

承認規則のコレクションから承認規則に対するすべての参照を削除します。

構成サンプル

次の構成例が Web.config ファイルに含まれる場合は、既定の IIS 承認設定が削除され、すべてのユーザーが Web サイトまたはアプリケーションのコンテンツにアクセスできるようになります。次に、承認規則を構成し、管理者特権を持つユーザーのみがコンテンツにアクセスできるようにしています。

<configuration>
   <system.webServer>

      <security>
         <authorization>
            <remove users="*" roles="" verbs="" />
            <add accessType="Allow" users="" roles="Administrators" />
         </authorization>
      </security>

   </system.webServer>
</configuration>

サンプル コード

次の例では、許可の承認規則を追加し、administrators グループ内のユーザーが Contoso という名前の Web サイトにアクセスできるようにしています。

AppCmd.exe

appcmd.exe set config "Contoso" -section:system.webServer/security/authorization /+"[accessType='Allow',roles='administrators']"

: AppCmd.exe を使用してこれらの設定を構成する際には、commit パラメーターを任意に APPHOST に設定することができます。それにより、Web.config ファイルの代わりに ApplicationHost.config ファイル内の該当する location セクションに構成設定が適用されます。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {
         Configuration config = serverManager.GetWebConfiguration("Contoso");
         ConfigurationSection authorizationSection = config.GetSection("system.webServer/security/authorization");
         ConfigurationElementCollection authorizationCollection = authorizationSection.GetCollection();

         ConfigurationElement addElement = authorizationCollection.CreateElement("add");
         addElement["accessType"] = @"Allow";
         addElement["roles"] = @"administrators";
         authorizationCollection.Add(addElement);

         serverManager.CommitChanges();
      }
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetWebConfiguration("Contoso")
      Dim authorizationSection As ConfigurationSection = config.GetSection("system.webServer/security/authorization")
      Dim authorizationCollection As ConfigurationElementCollection = authorizationSection.GetCollection
      Dim addElement As ConfigurationElement = authorizationCollection.CreateElement("add")
      addElement("accessType") = "Allow"
      addElement("roles") = "administrators"
      authorizationCollection.Add(addElement)
      serverManager.CommitChanges()
   End Sub
End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Contoso";
var authorizationSection = adminManager.GetAdminSection("system.webServer/security/authorization", "MACHINE/WEBROOT/APPHOST/Contoso");
var authorizationCollection = authorizationSection.Collection;

var addElement = authorizationCollection.CreateNewElement("add");
addElement.Properties.Item("accessType").Value = "Allow";
addElement.Properties.Item("roles").Value = "administrators";
authorizationCollection.AddElement(addElement);

adminManager.CommitChanges();

VBScript

Set adminManager = CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST/Contoso"
Set authorizationSection = adminManager.GetAdminSection("system.webServer/security/authorization", "MACHINE/WEBROOT/APPHOST/Contoso")
Set authorizationCollection = authorizationSection.Collection

Set addElement = authorizationCollection.CreateNewElement("add")
addElement.Properties.Item("accessType").Value = "Allow"
addElement.Properties.Item("roles").Value = "administrators"
authorizationCollection.AddElement(addElement)

adminManager.CommitChanges()