セキュリティ上の都合などから、あるWebページの閲覧を特定のアクセス元(ソースIPアドレス)だけに制限したいことがしばしばある。これをMicrosoft Azure Webサイトで実現するには?
対象サービス:Microsoft Azure Webサイト
Webサイトを構築・運用していると、あるWebページの閲覧を特定のアクセス元だけに許可して、その他は禁止する、というように制限したいことがある。例えばコンテンツ管理に関わるページはよく脆弱性を狙う攻撃に晒されやすいので、一般に広く公開せず、管理拠点からのアクセスだけに限定したいところだ。この場合、特定のソースIPアドレスからのアクセスだけ許可して、その他のIPアドレスからのアクセスを拒否することになる。
Apache Webサーバーであれば、こうした制限は「httpd.conf」や「.htaccess」という設定ファイルに記述することで実現できる(関連記事)。では、Microsoft AzureのWebサイトではどのように設定すればよいのだろうか?
Microsoft Azure WebサイトでソースIPアドレスによるアクセス制限をするには、対象のWebページを含むフォルダーに、「web.config」というテキストベースの設定ファイルを保存する必要がある(この設定方法はもともとWindows ServerのIIS 7.0から実装されている)。例えば「/admin」というフォルダーへのアクセスを制限したい場合は、次のようなXML形式のテキストをUTF-8コードでweb.configファイルに記述し、/adminフォルダーに配置する(具体的な記述内容については、すぐ後で説明する)。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<security>
<ipSecurity allowUnlisted="false" denyAction="NotFound">
<add allowed="true" ipAddress="192.168.0.101" />
<add allowed="true" ipAddress="172.16.0.0" subnetMask="255.255.255.240" />
</ipSecurity>
</security>
</system.webServer>
</configuration>
すでにweb.configファイルが存在する場合は、その「<system.webServer>」の「<security>」セクション内に、上記の「<ipSecurity>〜</ipSecurity>」を追加挿入すること。
すると/adminフォルダーとその中のファイルはもちろん、/admin以下のサブフォルダーにも、このweb.configに記述した制限が適用される。
Azure Webサイトはデフォルトでは、どのIPアドレスからでもアクセスを許可している(制限していない)。これを、原則はアクセスを拒否し、例外として特定のIPアドレスだけ許可するように変更するには、次のように「<ipSecurity>〜</ipSecurity>」を記述する。ここでは「192.168.0.101」と「172.16.0.0〜172.16.0.15」からのアクセスのみ許可している。
<ipSecurity allowUnlisted="false">
<add allowed="true" ipAddress="192.168.0.101" />
<add allowed="true" ipAddress="172.16.0.0" subnetMask="255.255.255.240" />
</ipSecurity>
上記とは逆に、原則はアクセスを許可し、例外として特定のIPアドレスだけ拒否するように変更するには、次のように「<ipSecurity>〜</ipSecurity>」を記述する。ここでは「10.1.1.0〜10.1.1.255」からのアクセスを拒否し、その他は許可している。
<ipSecurity allowUnlisted="true">
<add allowed="false" ipAddress="10.1.1.0" subnetMask="255.255.255.0" />
</ipSecurity>
アクセスを許可していないソースIPアドレスからアクセスされたとき、デフォルトではHTTPステータスコードとして「403 Forbidden」がクライアントに返される。このステータスコードを変更するには、「<ipSecurity>」にdenyAction属性を設定する。例えば「404 Not Found」を返すには、次のように記述する
<ipSecurity denyAction="NotFound">
ステータスコード | denyAction属性の設定 |
---|---|
401 Unauthorized | denyAction="Unauthorized" |
403 Forbidden | denyAction="Forbidden" |
404 Not Found | denyAction="NotFound" |
502 Bad Gatewayなど(応答中止) | denyAction="AbortRequest" |
アクセス拒否時に返されるステータスコードの指定 <ipSecurity>にdenyAction属性を指定することで、デフォルトの「403 Forbidden」以外のステータスコードを返すように変更できる。 |
前述のようにweb.configに記述したIPアドレス制限の設定は、それを配置したフォルダーのサブフォルダーにも適用される。その場合、特定のサブフォルダーでIPアドレス制限の設定を変更するには、そこにもweb.configファイルを配置する。
例えば/adminフォルダーに次の「<ipSecurity>〜</ipSecurity>」を含むweb.configを保存し、「192.168.0.101」と「172.16.0.0〜172.16.0.15」からのアクセスのみ許可したとする。
<ipSecurity allowUnlisted="false">
<add allowed="true" ipAddress="192.168.0.101" />
<add allowed="true" ipAddress="172.16.0.0" subnetMask="255.255.255.240" />
</ipSecurity>
ここで「/admin/blogadmin」というフォルダーに対し、「172.16.0.0〜172.16.0.15」からのアクセスを禁止して、代わりに「10.1.1.0〜10.1.1.255」を許可するには、次の「<ipSecurity>〜</ipSecurity>」を含むweb.configを/admin/blogadminフォルダーに保存すればよい。
<ipSecurity allowUnlisted="false">
<remove ipAddress="172.16.0.0" subnetMask="255.255.255.240" />
<add allowed="true" ipAddress="10.1.1.0" subnetMask="255.255.255.0" />
</ipSecurity>
このように、サブフォルダー側で適用したくないIPアドレス制限は、「<remove 〜 />」を用いることで削除できる。
もし親フォルダーによるIPアドレス制限が全て不要なら、次のように「<clear/>」を指定する。
<ipSecurity allowUnlisted="true">
<clear/>
</ipSecurity>
この場合、上記を含むweb.configを配置したサブフォルダーは、その親フォルダーでのIPアドレス制限に関係なく、全てのIPアドレスからアクセスできる。
また、「<clear/>」の直後に「<add 〜 />」を書き連ねていくことで、親フォルダーでのIPアドレス制限をキャンセルしつつ、独自の制限を加えることも可能だ。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.