はじめに
本記事の内容は「Azure App Service の静的なアクセス制限」機能が提供されたことで不要となりましたが、過去の記録のために残してあります。
Azure App Service の静的なアクセス制限は、スロット単位で指定でき、スワップ後もスロットに固定で機能するため、本記事の IP アドレス制限が標準機能で提供された事を意味します。
概要
Azure App Service (WebApps) は、ステージングパブリッシング機能を提供しています。これにより、WEB サイトの運用者は新しいバージョンの Web サイトを公開する前にステージングスロットでテストを実施し、検証完了後に本番スロットとステージングスロットをスワップする事が可能です。
ステージング環境の IP アドレス制限
多くの WEB サイトの運用者は検証用のステージングサイトの一般公開を制限したいという要望があります。このため Azure App Service においてもステージングスロットにのみ IP アドレス制限を実施し、本番スロットのみを公開したいという要望があります。またスワップ後もその状態(新しいステージングスロット = 以前の本番スロットの IP アドレス制限の実施)を維持出来なければなりません。
これを実現するには web.config のルールでホストの環境を識別し、ステージング環境に配置されている場合のみ IP 制限を設定するルールを組み込む方法があります。
サンプル例
正規表現のルールを環境に合わせて修正します。作成した web.config は、本番スロット、ステージングスロットの両方の Azure App Service の site/wwwroot に配置する必要があります。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="Block unauthorized traffic to staging sites" stopProcessing="true">
<match url=".*" />
<conditions>
<!-- 正規表現でステージグスロットの名前と一致するパターンを指定 -->
<add input="{HTTP_HOST}" pattern="^hogeogewebsite\-staging\." />
<!-- 正規表現で許可する IP アドレスパターンをホワイトリストで記述 -->
<add input="{REMOTE_ADDR}" pattern="167\.220\.232\.156" negate="true" />
</conditions>
<action type="CustomResponse" statusCode="403" statusReason="Forbidden" statusDescription="Site is not accessible" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>