Freigeben über


[Windows Azure] Web Role 初回配置時にサイトにアクセスすると 403 Forbidden - Access Denied が表示される

こんにちは、マイクロソフト デベロッパー サポート チームです。本日案内する内容は、比較的簡単な内容ではありますが、結構多くお問い合わせいただくご質問と、その対処方法について紹介します。

問題

Web Role を新規にアップロードし、配置先の URL (例: <xxxx.cloudapp.net>) をウェブ ブラウザで開くと、配置したページが表示されず、Access Denied が表示される。

現象のエラーメッセージは以下の通りです。

 403 - Forbidden: Access is denied.
You do not have permission to view this directory or page using the credentials 
that you supplied.

日本語のエラーメッセージは以下の通りです。

 403 – 許可されていません: アクセスが拒否されました。
指定した資格情報を使用して、このディレクトリまたはページを表示するアクセス許可がありません。

原因

多くの場合、既定のドキュメントを配置していないのが原因です。作成したアプリケーションが ASP.NET の場合、配置したプロジェクトの中に default.aspx や index.html があれば、ルートを表示した場合は自動でこれらのファイルが選択され表示されますが、存在しない場合は、Access Denied が表示されます。

そのため、ウェブ ブラウザの URL 指定で直接ファイルを指定することにより、ウェブページは問題なく表示されるかと思います。(例:<xxxx.cloudapp.net/sample.aspx> )

- 補足
Visual Studio でデバッグした時は、上記のようにファイル指定しなくても自動でページが表示されることがありますが、実は Visual Studio は、現在編集中や作業中のページを自動でデバッグ時に表示してくれます。

対応策

IIS はローカルからアクセスした場合はさらに詳細なエラーを表示するよう設計されています。Guest OS にリモート デスクトップで接続してローカル環境からアクセスすると以下のエラーが表示されます。

 HTTP エラー 403.14 – Forbidden
Web サーバーは、このディレクトリの内容の一覧を表示しないように構成されています。
...

つまり、IIS は既定のドキュメントが存在しないので、URL 末尾を省略してアクセスするとディレクトリ一覧を表示しようとします。しかし、IIS の設定上それが許可されていないために発生しています。IIS ログから、この HTTP ステータスコード 403、およびサブステータスコード 13 を確認する事でも同じ原因だと特定できます。

したがって、対処は既定のドキュメントを正しく設定/配置するか(推奨)、ディレクトリの一覧を許可するか(セキュリティ上のリスクが考えられます)、のいずれかとなります。

対応策 1 : 既定のドキュメント設定

ASP.NET アプリケーションを配置した場合、AzureOS 1.13での既定のドキュメントは以下の通りです。下記いずれかのファイルがプロジェクトルートに存在すればこのエラーは表示されません。

 Default.htm
Default.asp
index.htm
index.html
iisstart.htm
default.aspx

Web Role を使って表示している場合には、IIS の規定のドキュメントを変更することで、ルートを指定したときに自動で表示するドキュメントを変更することが可能です。規定のドキュメントは、web.config 中に <defaultDocument> タグを追加すること設定変更が可能です。

既定のドキュメント <defaultDocument>
technet.microsoft.com/ja-jp/library/ee431582.aspx

 <?xml version="1.0"?>
  <configuration>
  ...
    <system.webServer>
    ...
      <defaultDocument enabled="true">
        <files>
          <add value="sample.html" />
        </files>
      </defaultDocument>
    </system.webServer>
</configuration>

対応策 2 : ディレクトリ一覧を表示

web.config にて以下の設定をする事で、ディレクトリの一覧が許可できます。

 <?xml version="1.0"?>
  <configuration>
  ...
    <system.webServer>
    ...
      <directoryBrowse enabled="true" />
    </system.webServer>
</configuration>

この設定を施して URL 末尾を省略してアクセスすると、例えば以下のようにクライアントへ表示されます。これによって、データファイル等の直接アクセスを意図してないファイルを閲覧されてしまうなど、セキュリティ上のリスクが考えられます。

 xxxx.cloudapp.net - /
________________________________________
8/11/2011 0:00 AM <dir> bin
8/11/2011 0:00 AM 92 Global.asax
8/11/2011 0:00 AM 1494 Web.config
8/11/2011 0:00 AM 673 WebForm1.aspx

以上についてご参考いただければ幸いです。

--
デベロッパー サポート
平原