この記事はAzure App Service Team BlogのZero 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の受信トラフィックと送信トラフィックを制限してアプリケーションをセキュアにする方法を説明します。
アプリケーションのトラフィックにはユーザーやAPI送信を行うクライアントからのトラフィックであるインバウンドトラフィック(受信トラフィック)とWEBアプリケーションからデータベースやキャッシュや外部サービスへのアクセスを行うアウトバウンドトラフィック(送信トラフィック)があります。
WEBアプリケーションの受信と送信両方のトラフィックを制御することでアプリケーションを保護する事ができます。
今回説明する制御方法は多くの方法のうちの一例となります。受信トラフィックはサービスエンドポイントを利用して、Application Gatewayからの受信のみ許可するように制御します。送信トラフィックはAzure Firewallを経由して送信先のFQDNやプロトコルを制御する事が可能となります。
Application GatewayとWeb Appを含めるためのVNETを作成します。VNET作成の詳細はこちらを参照してください。
今回作成したサブネットは上図のようになります。後々AzureFirewallも含めるのでAzureFirewallSubnet
という名前のサブネットも作成しておきます。
前回の記事と同様にApplication Gatewayを作成してWeb Appへのルーティングを作成します。
App Serviceのアクセス制限を利用してApplication Gatewayから含まれるサブネットからの受信を許可します。
Azureポータルで、[ネットワーク]メニューに遷移します。[アクセス制限を構成する]をクリックしてアクセス制限の設定画面を表示します。
[規則の追加]をクリックして以下のようにApplication Gatewayのサブネットのアクセス制限を許可してください。
以上のようにして、Webアプリは、すべての受信トラフィックがアプリケーションゲートウェイを介してアプリにルーティングされます。 Application GatewayでWebアプリケーションファイアウォール(WAF)サポートを有効にすることができます。Application Gateway以外から接続するとApp Serviceのアクセス制限の機能によりHTTPステータスが403が返却されます。
送信トラフィックを制御するにはApp ServiceのリージョンVNET統合の機能を利用する必要があります。この機能を利用する事で、すべての送信トラフィックをネットワークセキュリティグループ(NSG)とルートテーブル(UDR)の対象にすることができます。
Azureポータルで、[ネットワーク]メニューに遷移します。[構成するにはここをクリック]をクリックしてVNET統合の設定画面を表示して、App Serviceを含めるサブネットを選択します。
Azure Firewallを作成して、Azure Firewallのプライベートアドレスを控えておきます。
Azure Portalを開いてAzure サービスにある[リソースの作成] をクリックします。メニューで [ファイアウォール] を選んでファイアウォールを作るためのブレードが開いて作成します。
Azure Firewallは[概要]画面の項目で確認する事ができます。
App Serviceの送信トラフィックをAzure Firewallにルーティングするためのルートテーブルを作成して設定します。
Azure Portalを開いてAzure サービスにある[リソースの作成] をクリックします。メニューで [Route table] を選んでルートテーブル作成画面から作成します。
Route Tableの設定セクションにある[構成]をクリックして構成画面を開いた後に、[追加]をクリックして構成の追加を行います。
0.0.0.0/0
を入力しますRoute Tableの設定セクションにある[サブネット]をクリックしてサブネット一覧を開いた後に、[関連付け]をクリックしてルートテーブルとサブネットの関連付けを行います。
規定ではRFC1918のトラフィックのみがVNET経由で送信されますが、「WEBSITE_VNET_ROUTE_ALL」をApp Serviceに設定するとすべての送信トラフィックをVNET経由で送信されるようになります。設定方法はこちらを参考にしてください。
ここまでの操作でApp Serviceの送信トラフィックはAzure Firewall経由で送信される状態となりますが、規定ではすべてのトラフィックが拒否されるようになっています。そのため、送信可能なトラフィックをファイアウォールの設定に追加する必要があります。
ファイアウォールの設定セクションにある[ルール]をクリックしてルール一覧を開いた後に、[アプリケーションルールコレクション]タブを開いて[アプリケーションルールコレクションの追加]をクリックして送信を許可するルールを設定します。
今回は一例としてwww.sigmact.com
への送信は拒否して、それ以外のHTTP送信は許可するように設定してみました。Firewallのルールに関する詳細はこちらを参照してください。
名前 | 優先度 | アクション | ターゲットのFQDNの名前 | Source Type | Source | プロトコル:ポート | ターゲットのFQDN |
---|---|---|---|---|---|---|---|
AllowHttp | 1000 | 許可 | all | IP address | * | http,https | * |
DenyHttp | 100 | 拒否 | sigmact | IP address | * | http,https | www.sigmact.com |
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で詳細なルール設定も可能な構成となっています。
お問い合わせはこちらから
問い合わせる