App Service の受信トラフィックと送信トラフィックを制限してアプリケーションを保護する

Kazunori Hamamoto Kazunori Hamamoto
App Service の受信トラフィックと送信トラフィックを制限してアプリケーションを保護する

はじめに

この記事はAzure App Service Team BlogZero to Heroシリーズの記事に感銘を受けて、和訳&改変&自分で新規執筆した記事です。 この記事を通してWeb Appsの基礎から実運用の方法まで、筆者自身が見直す機会としてシリーズ化して掲載する事にしました。 本家の「Zero to Hero」というフレーズの通り、Azure App Serviceを使ったことの無い方は一人前になれるように、すでに利用している方は知識のアップデートに役立てていただければと思います。

なお、連載の5回目からは筆者オリジナルのコンテンツを掲載しています。目次からまとめて読めますので、是非どうぞ。

【Azure初心者から上級者まで!】Azure App Service を使いこなしてゼロからヒーローになる

概要

この記事は App Service でゼロからヒーロー シリーズの第7回です。 この記事を読むためには初回記事を読み終えていることを想定しています。

今回はAzure App Service Team Blogの「Securing your web app」の記事を参考にして作成しています。Web Appの受信トラフィックと送信トラフィックを制限してアプリケーションをセキュアにする方法を説明します。

WEBアプリケーションを保護する

アプリケーションのトラフィックにはユーザーやAPI送信を行うクライアントからのトラフィックであるインバウンドトラフィック(受信トラフィック)とWEBアプリケーションからデータベースやキャッシュや外部サービスへのアクセスを行うアウトバウンドトラフィック(送信トラフィック)があります。

WEBアプリケーションの受信と送信両方のトラフィックを制御することでアプリケーションを保護する事ができます。

Web Appのトラフィック制御

今回説明する制御方法は多くの方法のうちの一例となります。受信トラフィックはサービスエンドポイントを利用して、Application Gatewayからの受信のみ許可するように制御します。送信トラフィックはAzure Firewallを経由して送信先のFQDNやプロトコルを制御する事が可能となります。

受信トラフィックを保護する

1. Application GatewayとWeb Appを含めるためのVNETを作成する

Application GatewayとWeb Appを含めるためのVNETを作成します。VNET作成の詳細はこちらを参照してください。

VNETのサブネット構成

今回作成したサブネットは上図のようになります。後々AzureFirewallも含めるのでAzureFirewallSubnetという名前のサブネットも作成しておきます。

2. Application Gatewayを作成する

前回の記事と同様にApplication Gatewayを作成してWeb Appへのルーティングを作成します。

3. App Serviceのアクセス制限を設定する

App Serviceのアクセス制限を利用してApplication Gatewayから含まれるサブネットからの受信を許可します。

Azureポータルで、[ネットワーク]メニューに遷移します。[アクセス制限を構成する]をクリックしてアクセス制限の設定画面を表示します。

アクセス制限の構成

[規則の追加]をクリックして以下のようにApplication Gatewayのサブネットのアクセス制限を許可してください。

以上のようにして、Webアプリは、すべての受信トラフィックがアプリケーションゲートウェイを介してアプリにルーティングされます。 Application GatewayでWebアプリケーションファイアウォール(WAF)サポートを有効にすることができます。Application Gateway以外から接続するとApp Serviceのアクセス制限の機能によりHTTPステータスが403が返却されます。

送信トラフィックを保護する

送信トラフィックを制御するにはApp ServiceのリージョンVNET統合の機能を利用する必要があります。この機能を利用する事で、すべての送信トラフィックをネットワークセキュリティグループ(NSG)とルートテーブル(UDR)の対象にすることができます。

1. リージョンVNET統合を行う

Azureポータルで、[ネットワーク]メニューに遷移します。[構成するにはここをクリック]をクリックしてVNET統合の設定画面を表示して、App Serviceを含めるサブネットを選択します。

VNET統合

2. Azure Firewallを作成する

Azure Firewallを作成して、Azure Firewallのプライベートアドレスを控えておきます。

Azure Portalを開いてAzure サービスにある[リソースの作成] をクリックします。メニューで [ファイアウォール] を選んでファイアウォールを作るためのブレードが開いて作成します。

Azure Firewallを作成

Azure Firewallは[概要]画面の項目で確認する事ができます。

Azure FirewallのプライベートIPを確認

3. ルートテーブルを作成する

App Serviceの送信トラフィックをAzure Firewallにルーティングするためのルートテーブルを作成して設定します。

Azure Portalを開いてAzure サービスにある[リソースの作成] をクリックします。メニューで [Route table] を選んでルートテーブル作成画面から作成します。

Route Tableの設定セクションにある[構成]をクリックして構成画面を開いた後に、[追加]をクリックして構成の追加を行います。

Route Tableの作成

  • アドレス プレフィックス : 0.0.0.0/0 を入力します
  • 次ホップの種類 : 仮想アプライアンスを選択します
  • 次ホップアドレス:Azure FirewallのプライベートIPアドレスを入力します

Route Tableの設定セクションにある[サブネット]をクリックしてサブネット一覧を開いた後に、[関連付け]をクリックしてルートテーブルとサブネットの関連付けを行います。

Route Tableの関連付け

4. App Serviceの送信トラフィックをすべてAzure VNET経由で送信されるように変更する

規定ではRFC1918のトラフィックのみがVNET経由で送信されますが、「WEBSITE_VNET_ROUTE_ALL」をApp Serviceに設定するとすべての送信トラフィックをVNET経由で送信されるようになります。設定方法はこちらを参考にしてください。

5. Azure Firewallで送信を許可するトラフィックを設定します

ここまでの操作でApp Serviceの送信トラフィックはAzure Firewall経由で送信される状態となりますが、規定ではすべてのトラフィックが拒否されるようになっています。そのため、送信可能なトラフィックをファイアウォールの設定に追加する必要があります。

ファイアウォールの設定セクションにある[ルール]をクリックしてルール一覧を開いた後に、[アプリケーションルールコレクション]タブを開いて[アプリケーションルールコレクションの追加]をクリックして送信を許可するルールを設定します。

今回は一例としてwww.sigmact.comへの送信は拒否して、それ以外のHTTP送信は許可するように設定してみました。Firewallのルールに関する詳細はこちらを参照してください。

ターゲットのFQDN設定内容
名前 優先度 アクション ターゲットのFQDNの名前 Source Type Source プロトコル:ポート ターゲットのFQDN
AllowHttp 1000 許可 all IP address * http,https *
DenyHttp 100 拒否 sigmact IP address * http,https www.sigmact.com

6. 送信トラフィックの設定を確認する

App Serviceのコンソールからcurlコマンドを利用する事で簡単に確認をすることができます。App Serviceの開発ツールセクションにある[コンソール]をクリックしてコンソール画面を表示します。

curl -Ss ifconfig.io と入力すると送信IPアドレスが表示されます。Azure FirewallのパブリックIPアドレスと同様のアドレスになっているはずです。

curl -Ss www.sigmact.comと入力するとアクセスは拒否されるはずです。

コンソールの実行結果

まとめ

おめでとうございます。App Serviceの受信トラフィックと送信トラフィックを制御して保護する事ができるようになりました。Application GatewayのWAFを有効にしたり、Azure Firewallで詳細なルール設定も可能な構成となっています。

お問い合わせはこちらから

問い合わせる
TOP