はじめに
本記事の内容は「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>