kokoni

クラウドおじさんの備忘録

Azure Application GatewayでWAF対策をしてみる 構築編

最近Applicaiton GatewayでWAF対策をしたので、その時の注意点や設定方法などをまとめていきたいと思います。前提として Applicaiton Gateway はWAF V2を指定しておりBackend PoolにAzure WebAppsを指定しています。Application Gatewayの基本的な部分については下記を参考にしましょう。docs.microsoft.com

※本記事は2019年6月22日時点での記事になります。

Application Gatewayの作成

まずはApplication Gatewayを作成します

レベルについて現在はV1とV2の二つが選択できますが必ずV2を選択しましょう。V1は古い仕組みになるので作成や更新に時間がかかります。StandardとWAFがありますがWAFの方を選択します。この二つの違いはWAFの機能がついているかいないかだけです。今回はWAF対策を含めるのでWAF V2を選択します。 容量の種類は自動スケーリングを選択します。これはスパイクアクセスなどがあった時に自動でインスタンスを増やしてくれます。最小インスタンスは冗長構成のため2を選択しています。最大インスタンスは通常時のアクセス数が多くないので3にしています。ここで注意ですが最小インスタンスと最大インスタンスを同じ値にしないようにしてください。サービス作成時にエラーになります。 リソースグループは任意のものにしてください。作成する場所は利用する地域になるので東日本を選択しています。可用性ゾーンについては利用しないためここでは設定していません。可用性を高める場合は任意に設定してください。

サブネット構成とフロンドエンドIP構成は必ず作成する項目です。ここはスキップ出来ないので作成する必要があります。サブネット構成は任意の設定で作成してください。フロントエンドIP構成も任意に作成します。DNS名だけ重複しないFQDNになる必要があります。 リスナーのプロトコルは要求に応じて設定しください、ここは後で変更可能です。 WAFを作るわけですからWebアプリケーションファイアウォールの設定は有効にしておきましょう。ファイアウォールのモードですが要求に合わせて任意に設定します。ここでは検出にしていますが後で変更可能です。

最後の確認を行い、問題がないようであれば作成をしましょう。

u_heading]Application Gatewayの設定 Application Gatewayを作成したら次は設定です。 ここでApplicaiton Gatewayコンポーネント要素を確認してみたいと思います。WAFを有効にしたApplicaiton Gatewayコンポーネント要素は下記のとおりです。・フロントエンドIP・ リスナー・ ルール・ バックエンドプール・ HTTP設定・ 正常性プローブ・ 書き換え(Rewrite)各項目の相関性については下記のドキュメントを参考にしてください。docs.microsoft.comこのコンポーネントの中で肝となる部分がルールの部分になります。ルールを作成するために、その他のコンポーネント要素を作成し設定する感じになります。それではそれぞれの項目を見ていきたいと思います。

フロントエンドIP

フロントエンドIPはApplicaiton Gateway作成時に一緒の作成したPublic IP Addressがデフォルトでバインドされています。 Public IP Address は個別のサービスになるので別で作成してApplicaiton Gatewayにバインドされる形になります。 基本的に静的IPとして作成するのでカスタムドメインを充てたい場合、このIPアドレスをAレコード登録する必要があります。Applicaiton Gatewayでパスベースのルーティングをする時にカスタムドメインを充てたい場合はフロントエンドIPの情報を外部のDNSサービスに登録するか、Azure DNSを作成してネームサーバを管理するかの2択になります。 私が試した時はお名前.comで管理しているドメインに静的IPアドレスをAレコード登録して利用しました。 Public IP Addressについては下記の公式ドキュメントを参照してください。 docs.microsoft.com

リスナー

リスナーではフロントエンドIPとPortの紐づけ設定を行います。基本的にApplicaiton Gatewayには複数の同一ポートを設定できません。当たり前といえば当たり前ですが。 ポート別にリスナーを追加する必要があり、Applicaiton Gateway作成時に指定したポート番号が初期値として設定されています。また、HTTPステータスの403と502が発生した場合にリダイレクト先URLを設定できます。デフォルトで振られるフロントエンドポートの名称を変更したいときは別のポートを作成してからポートを削除して、新しい名称で元のポート番号を作成しましょう。これはすべてのコンポーネントで同じなのですが、各コンポーネントには最低でも一つの設定値が必要になるため手間のかかる方になります。

バックエンドプール

バックエンドプールは振り分けされるサイトの設定になります。現在では下記の4つの項目を選択できます。・IPアドレスまたはホスト名・仮想マシン・VMSS・AppService IPアドレスまたはホスト名を利用すればAzure上で作成されていない外部サイトを利用することが可能です。仮想マシン・VMSSはApplication Gatewayと同じVNETに居ることが前提になります。App ServiceはApplication Gatewayが作成された同一リージョン内に存在するApp Serviceの中から選択することができます。基本的に一つのバックエンドプールにはサイトやサーバを1:1や1:Nで選択することが可能です。例えば仮想マシンとAppServiceみたいに種類が違うサイトを同一バックエンドプールに設定することができませんので、その場合は複数のバックエンドプールを構築することで実現可能です。サイト別にルーティングルールを変えたい場合などはバックエンドプールとサイトを1:1で構築する方法もあるので要件に沿って選択する必要があります。

正常性プローブ

正常性プローブはバックエンドプールにあるすべてのリソースに対して正常性確認を行うものです。プローブの機能により正常性が確認とれないリソースに関しては自動的にバックエンドプールから外し、正常性が確認取れたらバックエンドプールに戻します。カスタム設定を行うことは可能ですが、設定しない場合はデフォルトの設定が割り振られます。基本的に複雑なカスタマイズは不要ですが要件によっては個別に設定する必要のある機能になります。プローブの詳細については下記のドキュメントを参照してください。docs.microsoft.com

HTTP設定

HTTP設定ではバックエンドプールに贈られる要求の設定を行います。各項目についての詳細については下記のドキュメントを参照してください。

docs.microsoft.com

ここではハマりやすいポイントについて記載します。バックエンドパスのオーバライドですがこの設定には何も設定する値がない場合は必ず「/」を入力するようにしてください。画面にあるインフォメーションにも記載がありますが「/」を入力しないとURLパスベースでルールを設定した時に、URLが想定外の上書きにより正常にルーティングされなくなります。AppService用に使用するを選択した場合は「カスタムプローブの使用」と「バックエンドアドレスからホスト名を選択します」がデフォルト設定になります。 「バックエンドアドレスからホスト名を選択します」 が選択されている場合にカスタムドメインを利用すると、WebAppsが持つFQDNがホストヘッダーに入りカスタムドメインじゃない方にリダイレクトされるパターンがあります。この場合はAppService用のチェックを外して 「バックエンドアドレスからホスト名を選択します」 のチェックも外して「ホスト名の上書き」で指定のカスタムドメインを充てる必要があります。

docs.microsoft.com

ルール

ルールはApplicaiton Gatewayの中で一番肝となる設定です。ルールによってリスナーのルーティング規則やバックエンドプールへの振り分け、HTTP設定による制限をすべて紐づけることになります。ルールにはBasicとパスベースの2つの設定があります。Basicは基本的なルーティングの設定になります。パスベースはURLパスでルーティングを行う設定になるのでBasicより少し複雑な設定になります。例えばHTTP(80)のHTTPS(443)リダイレクトを設定する場合なんかはBasicを利用して作成します。80のリスナーにアクセスがきたら443のリスナーに301リダイレクトするようにルールを設定することができます。URLパスベースの場合はパスに応じてバックエンドプールとHTTP設定を紐づける必要があるため設定方法の難易度は若干高めになります。また、カスタムドメインを利用した場合のURLパスベースルーティングの設定はちゃんと設計を行ったうえで作成しないとわかりづらくなるので注意しましょう。

次回予告

次回はWAFの設定とペネトレーションテストの方法について説明します。