Azure Application Gateway及びWAF設定マニュアル

10.1K Views

July 07, 23

スライド概要

【公式】 OnTime Group Calendar for Microsoft ページ
https://ontimesuite.jp/forms/
Azure Application Gateway は、簡単にいうとWeb トラフィックを制御する ロードバランサーです。更に、WAF(Web Application Firewall)の実装も可能です。
本マニュアルの手順ではDNS切替前に動作確認を行えるよう、一旦バックエンドはHTTPで作成し、後ほどHTTPS化、更にパスベースによる制限も行う。次にWAFの設定をしてLog Analyticsワークスペースに飛ばします。最後にDNSの変更後の仕上げまでをご説明します。

profile-image

【公式】 OnTime Group Calendar for Microsoft ページ https://ontimesuite.jp/forms/ 【公式】 OnTime Group Calendar for HCL Domino ページ https://ontimesuite.jp/fordomino/ 高速グループスケジュールの OnTime Group Calendar for Microsoft / for Domino の日本総代理店をしています。 CEO at AXCEL corporation that the agency of OnTime Group Calendar in Japan.

シェア

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

for Microsoft Azure Application Gateway 及びWAF設定マニュアル OnTime Group Calendar Direct Shop 2024/01/25

2.

目次 Application GatewayとWAF P.3 1. Application GatewayとWAF P.4 2. 本マニュアルでご紹介する構成について P.5 3. 本マニュアルでの作業ステップ P.6 4. 前提環境と事前準備 P.7 1 フロントエンドだけHTTPS接続で構成 1. 2. 3. 4. 5. 6. リソースの作成から新規作成 パブリックIPの作成 バックエンドプールの作成 ルーティング規則を追加 検証に成功したら作成 各種設定結果を確認します 2 バックエンドをHTTPS接続で構成 1. 2. 3. 4. 5. 6. ルーティング規制の変更を行います P.50 バックエンド設定をHTTPSに変更 P.55 エンドツーエンドでHTTPS通信の確認 P.57 1. 2. 3. ルーティング規制のパスを設定変更 バックエンドターゲットを編集します 接続を許可するパスを追加します 3 有効なパスの場合だけ接続出来る構成 P.8 P.9 P12 P.14 P.18 P.29 P.33 4 WAFによる更なる防御とログ取得 1. 2. 3. 4. 仕上げ P.40 正常性プローブを作成します P.41 HTTPS用のバックエンド設定を作成 P.45 実際に接続するバックエンドプール作成P.50 1. 2. 3. 2 P.58 P.59 P.60 P.62 P.68 WAFレベルに切り替えます P.69 WAFポリシーを作成 P.71 ポリシーモードが検出であることを確認P.74 ログの出力先を設定します P.75 DNS変更後に行います バックエンド設定を修正します ホスト名のオーバーライドをいいえに バックエンド正常性の確認をして完了 P.79 P.80 P.82 P.83

3.

Application GatewayとWAF 3

4.

Azure Application GatewayとAzure WAF 単語の説明 Frontend IP Web Application Firewall ルーティング規則(ルール) リスナー バックエンド ターゲット オンタイムサーバー クライアント フロントエンド バックエンド プール ターゲット バックエンド 設定 正常性プローブ Azure Application Gateway • フロントエンドIP • クライアントが実際にアクセスする関連付けられた IP アドレス • リスナー • 入ってくる要求に関連付けられているプロトコル、ポート、ホスト名、IP アドレスがリスナーの構成に一致した場合、要求を受け取る • ルーティング規則 • リスナーのトラフィックをバックエンドプールに転送する方法を設定する • バックエンド設定 • Azure Application Gateway は、簡単にいうとWeb トラフィックを制 御する ロードバランサーです。更に、WAF(Web Application Firewall) の実装も可能です。 • 本マニュアルの手順ではDNS切替前に動作確認を行えるよう、一旦 バックエンドはHTTPで作成し、後ほどHTTPS化、更にパスベースによる制 限も行う。次にWAFの設定をしてLog Analyticsワークスペースに飛ばし ます。最後にDNSの変更後の仕上げまでをご説明します。次ページ参照。 4 • バックエンドにトラフィックを転送するプロトコル、ポート、その他の設定 • バックエンドプール • 転送されるトラフィックを処理するリソース群。正常性プローブで正常 性を監視される • 正常性プローブ • バックエンドプールのリソースの正常性を監視する機能 • WAF(Web Application Firewall) • 一般的な悪用や脆弱性から Web アプリケーションを一元的に保護 するサービス

5.

本マニュアルでご紹介する構成について ルーティング規則(ルール) バックエンド ターゲット ① リスナー ② オンタイムサーバー クライアント パス条件 に不一致 フロントエンド Frontend IP バックエンド プール バックエンド プール ③ パスベース の条件合致 ターゲット 正常性プローブ バックエンド 設定 Web Application Firewall Azure Application Gateway Log Analytics ワークスペース 5 • 本マニュアルでは幾つかの条件をクリアして初めてOnTimeサー バーに接続出来るように最終的に仕上げます ① フロントエンドIP WAFにて一般的な悪用や脆弱性でなければ受け入れ ② リスナー TLS証明書によるHTTPS通信だけ受け入れ ③ ルーティング規則 URLを確認し、OnTimeで使用されているパスである場 合のみOnTimeサーバーが属するバックエンドプールに転 送し、それ以外はサーバーの存在しない架空のバックエ ンドプールに転送します • 次ページに作業ステップを記載しています • 本来は新規作成時のウィザードで完成形を作成できれ ばよいのですが、OnTimeサーバーは設定なしでもルートで のリクエストに応答しません • なので途中で正常性プローブを作成してHTTPS専用の バックエンドプールを準備する手順を追加しています

6.

本マニュアルでの作業ステップ ステップ3 有効なパスの場合だけ接続できる構成 ステップ1 フロントエンドだけHTTPS接続で構成 ルーティング規則(ルール) バックエンド ターゲット リスナー バックエンド 設定 パスベース バックエンド ターゲット 設定 正常性プローブ フロントエンドのHTTPS設定 フロントエンドのHTTPS設定 宛先なし ターゲット バックエンド ターゲット サーバー リスナー ルーティング規則(ルール) 宛先なし ターゲット バックエンドHTTPS パスベースで制御 ステップ4 WAFによる更なる防御とログ取得 ステップ2 バックエンドをHTTPS接続で構成 ルーティング規則(ルール) フロントエンドのHTTPS設定 リスナー Web Application Firewall バックエンドのHTTPS化 バックエンド ターゲット パスベース バックエンド ターゲット 設定 正常性プローブ フロントエンドのHTTPS設定 WAFによる制御 6 宛先なし ターゲット バックエンドHTTPS パスベースで制御 サーバー バックエンド ターゲット 設定 正常性プローブ ルーティング規則(ルール) サーバー リスナー バックエンド ターゲット 宛先なし ターゲット

7.

前提環境と事前準備 • 前提環境 • • • • OnTimeサーバーが正常に動作して接続できていること。 OnTimeサーバーがAzure VMで稼働していること。 OnTimeサーバーが一般に問い合わせができるDNSに登録されていること。 OnTimeサーバーが公的機関のTLS証明書を利用した接続を行えること。 • 事前準備 • Application Gatewayが利用する仮想ネットワーク上のサブネットは準備してください。 • OnTimeが利用している同じ証明書のPFXファイルをリスナー設定用に準備してください。 • WAF等から出力するログ用にLog Analyticsワークスペースを予め設定準備してください。 7

8.

ステップ1 フロントエンドだけHTTPS接続で構成 8

9.

リソースの作成からApplication Gatewayを選択 • Azure Portalにログインします • リソース作成に移動 • ネットワーキングーApplicationGatewayを選択します 9

10.

ゲートウェイ名等を指定 • 基本タブの以下の項目をそれぞれ設定します • • • • サブスクリプション リソースグループ ゲートウェイ名 地域 • レベル :ご利用のサブスクリプション :ご指定のリソースグループ :任意の名前 :OnTimeサーバーが存在する 地域を指定してください :Standard V2 • その他も適宜設定してください 本マニュアルではデフォルトのまま利用します 10

11.

利用するサブネットを選択か新規作成 • 仮想ネットワークの構成の以下の項目を設定します • 仮想ネットワーク:OnTimeサーバーが所属しているVnet • サブネット :単独でサブネットを必要とします • 設定内容を確認し「次:フロントエンド」をクリックします 11

12.

パブリックIPを新規作成 • フロントエンドタブのパブリックアドレスにある「新規追加」を クリックし、パブリックIPの追加を設定します • ゲートウェイ作成時に入力した名前で作成されます • ここで生成されたIPアドレスが最終的にDNSに登録するアド レスになります 12

13.

パブリックIPの確認 • パブリックIPアドレスの欄に、新規作成した名前が指定され ていることを確認し「次:バックエンド」をクリックします 13

14.

バックエンドでバックエンドプールの作成 • バックエンドタブで「バックエンドプールの追加」をクリックします • バックエンドプールとはアプリケーションゲートウェイがルールに基 づいてルーティングする先にあるサーバー等のリソース群です 14

15.

ターゲットを持たないバックエンドプールに変更 • 初回の作成では実際に接続するサーバーを含まない空の プールを準備します • このプールは正しいパスで接続してこない要求の接続先に最 終的に利用します • バックエンドプールの追加画面内で、任意の名前を指定し ます • 名前欄の下にある「ターゲットを持たないバックエンドプール を追加します」で「はい」を選択します 15

16.

ターゲットを持たないバックエンドプールとして保存 • 設定が完了したら「追加」ボタンをクリックします 16

17.

バックエンドプールが登録されたことを確認 • バックエンドタブにあるバックエンドプールの列に先程指定し た名前が表示されていることを確認し「次:構成」をクリッ クします 17

18.

ルーティング規則を追加します • 構成タブでは以下のセットが確認できます • フロントエンド • ルーティング規則 • バックエンドプール • ルーティング規則だけまだ未作成です • ルーティング規則の欄にある「ルーティング規則の追加」をク リックします 18

19.

ルーティング規則について • ルーティング規則はフロントエンドから届くトラフィックをバック エンドに振り分けるための複数の規則を作成できます • 初回の作成では先ほど準備したパブリックIPアドレスとバッ クエンドプールを以下のルーティング規則で設定します • リスナー ーパブリックIPアドレスの設定 • https(port:443)で受信したトラフィックだけ復号化して受付 • バックエンドターゲット ーバックエンドプールの設定 • 復号化されたままリソースのないプールに全てをルーティング • ルーティング規則の追加ページで以下の項目を設定します • ルール名 • 優先度 :任意の文字列 :途中追加出来る数字を指定 • 引き続きリスナーの設定をします 19

20.

リスナーをHTTPS受信用として設定 • リスナータブの以下の項目をそれぞれ設定します • • • • リスナー名 フロントエンドIP プロトコル ポート :任意の名前 :パブリック :HTTPS :443 • HTTPS通信を一旦復号化しますので証明書のPFXファイ ルを必要とし、ここで登録します • • • • 証明書の選択 証明書名 PFX証明書ファイル パスワード :証明書のアップロード :任意の名前 :ファイルを選択します :pfxファイル用のパスワード • バックエンドターゲットタブをクリックします 20

21.

バックエンドターゲットの設定 • リスナーの設定で受信したトラフィックのルーティングを設定し ます • そのままルーティングを指定する方法とURLのパスに応じて ターゲット先のバックエンドプールを指定する方法を選択でき ます • URLのパスによってターゲット先を指定する方法とは例えば ¥…/asrv/*ならAサーバーに、…/bsrv/*ならBサーバーに、、、 のようにターゲットを振り分けできます。 • 本マニュアルではOnTimeが利用するパスだけをバックエンド プールに振り分ける予定なのでパスベースの設定になるよう に追加のターゲットのパスベースの規則も一つだけ準備しま す • そのままルーティングを指定する方法とURLのパスに応じて ターゲット先のバックエンドプールを指定する方法は後で変 更できませんので変更の場合は再作成となります 21

22.

先ほどのバックエンドターゲットを指定 • ターゲットの種類をバックエンドプールにしてバックエンドター ゲットに先ほど作成したリソースの登録のないプールを指定 します • バックエンド設定では「新規追加」をクリックします 22

23.

バックエンド設定はHTTP用を仮作成 • バックエンド設定の追加ページで以下の項目を設定します • バックエンド設定名 • バックエンドプロトコル • バックエンドポート :任意の名前 :HTTP :80 • Port:80では受け付ける予定がなければ、最終的に削除し て問題ございません • 設定が完了したら「追加」をクリックします 23

24.

パスベースの規則を仮で1つ作成 • バックエンドターゲットタブのバックエンドターゲット欄に名前 が設定されていることを確認します • 次にパスベースによってターゲット先を指定するので「パスベー スの規則を作成するには複数のターゲットを追加します」を クリックします 24

25.

パスの設定を入力 • 後ほど設定できるようにするためのダミーなので同じバックエ ンド設定とバックエンドターゲットを設定します • パスの追加ページでは以下の項目をそれぞれ設定します • ターゲットの種類 • パス • ターゲット名 • バックエンド設定 • バックエンドターゲット :バックエンドプール :使わないパス /dummyTEMP/* など 最後は* :任意の名前 :先ほどと同じ設定 :先ほどと同じターゲット • 設定したら「追加」をクリックします 25

26.

パスベースの規則が一つ出来ていることを確認 • ルーティング規則の追加ページ内のパスベースの規則欄に、 設定が増えていることを確認し「追加」をクリックします 26

27.

構成のそれぞれの準備が出来たことを確認 • 構成タブ内の フロントエンド/ルーティング規則/バックエンド プール それぞれに設定が表示されていることを確認し、 「次:タグ」をクリックします 27

28.

タグ画面 • タグタブは特に内容を変更せずに次へ進みます 28

29.

検証に成功したら作成 • 確認および作成タブで、これまで設定した内容を確認し、 意図した通りの設定であれば「作成」をクリックし、作成を 開始します 29

30.

デプロイを待機 • 「作成」をクリック後、Azure環境内のバックグラウンドでデ プロイが進行します 30

31.

完了したらリソースグループに移動 • デプロイが完了すると「デプロイが完了しました」の文字列が 画面上に表示されます • 「リソースグループに移動」をクリックします 31

32.

作成したアプリケーションゲートウェイを開く • 作成されたアプリケーションゲートウェイを選択して開きます 32

33.

各種設定結果を確認します • 概要ページで内容を確認します 33

34.

Webアプリケーションファイアウォールはそのまま • WebアプリケーションファイアウォールページではレベルをWAF に変更できるのが確認できます 34

35.

バックエンドプールの確認 • バックエンドプールページを開き、内容を確認します 35

36.

バックエンド設定の確認 • バックエンド設定ページを開き、内容を確認します 36

37.

フロントエンドIP構成の確認 • フロントエンドIP構成ページを開き、内容を確認します 37

38.

リスナーの確認 • リスナーページを開き、内容を確認します 38

39.

ルールの確認 • ルールページを開き、内容を確認します • ここまでの設定でリスナーがHTTPSで受信して、リソースのな いバックエンドプールにルーティングされています • 次のステップではバックエンドプールに実際のサーバーを配備 して、HTTPSで再暗号化してルーティングします 39

40.

ステップ2 バックエンドをHTTPS接続で構成 40

41.

正常性プローブを作成します • HTTPSで且つパスベースで制限したバックエンドプールには、 それ用の正常性を確認するプローブを準備するのが簡単で す (もちろんそれ以外の方法もありますが本マニュアルでは今 回の方法を採用します) • このステップでは以下の流れで操作を行います • • • • HTTPS用の正常性プローブの作成 HTTPS用のバックエンド設定の作成 OnTimeサーバーを含めたバックエンドプールの作成 ルーティング規制で上記内容を構成に組み込む • 正常性プローブページを開き「追加」をクリックします 41

42.

ホスト名とパスを指定してバックエンド設定と紐付け • 正常性プローブの追加ページで以下の項目をそれぞれ設定 します • 名前 :任意の名前 • プロトコル :HTTPS • ホスト :証明書を取得しているホスト名 • バックエンド設定からホスト名を選択する :いいえ • ポートをバックエンド設定から選択する :はい • パス :レスポンスが返ってくるパスを指定します ontimegcms/desktop • 「正常性プローブを追加する前にバックエンドの正常性をテ ストする」のチェックをはずします 42

43.

テストのチェックを外して保存 • 設定内容とチェックが外れていることを確認し「保存」をク リックします 43

44.

正常性プローブが作成されたことを確認 • 正常性プローブページに設定が作成されたことを確認します 44

45.

HTTPS用のバックエンド設定を作成 • バックエンド設定ページで「追加」をクリックします 45

46.

バックエンドプロトコルはHTTPSを選択 • バックエンド設定の追加ページで以下の項目をそれぞれ設 定します • • • • 46 バックエンド設定名 :任意の名前 バックエンドプロトコル :HTTPS バックエンドポート :443 既知のCA証明書を使用する :はい

47.

ホスト名はオーバーライドするをはいに選択 • 新しいホスト名でオーバーライドするで「はい」を選択します すると次ページの画面に切り替わります 47

48.

ホスト名とカスタムプローブを設定 • 新しいホスト名でオーバーライドするを「はい」にして以下の項 目をそれぞれ設定します • ホスト名をオーバーライドする :特定のドメイン・・ • ホスト名 :証明書を取得したホスト名 • カスタムプローブを使用を「はい」にして以下の項目を設定し ます • カスタムプローブ :先ほど作成したプローブ • 設定内容を確認し「保存」をクリックします 48

49.

HTTPS用バックエンド設定が作成されました • バックエンド設定ページにHTTPS用の設定が追加されてい ることを確認します 49

50.

実際に接続するバックエンドプールを作成 50 • バックエンドプールページで「追加」をクリックします 50

51.

仮想マシンのプライベートIPを選択します • バックエンドプールの追加ページで以下の項目を設定します • 名前 :任意の名前 • ターゲットの種類:仮想マシン • ターゲット :OnTimeサーバーのインターフェース • 設定内容を確認し「追加」をクリックします 51

52.

接続出来るバックエンドプールが作成されました • バックエンドプールページにOnTimeサーバーが登録されてい るプールが追加されていることを確認します 52

53.

ルーティング規制の変更を行います • ルールページを開き、ステップ1で作成したルーティング規制 を選択して編集します 53

54.

バックエンド設定がHTTPであることを確認 • バックエンドターゲットタブをクリックします • バックエンドターゲットにはステップ1で指定したリソースのな いプールが指定されています • バックエンド設定はステップ1で指定したHTTP(port:80)の 設定が指定されています 54

55.

バックエンド設定を作成したHTTPSに変更 • バックエンド設定を先ほど作成したHTTPS用設定を選択し ます • これで一旦復号化されたリクエストは再度暗号化されて バックエンドターゲットのプールにルーティングされます 55

56.

バックエンドターゲットも実プールに一時的に変更 • バックエンドターゲットに先ほど作成したOnTimeサーバーが 登録されたプールを指定します • 設定内容を確認し「保存」をクリックします 56

57.

エンドツーエンドでHTTPS通信が可能か確認 • バックエンド正常性ページで、状態の列が 健全 となってい ることを確認します • ここまでの設定でフロントエンドIPアドレスとパスを指定して OnTimeサーバーに接続出来ることを確認できます • 次のステップでは実際に利用されているパスの場合だけ OnTimeサーバーのプールにルーティングを行い、それ以外の 場合はリソースのないプールにルーティングさせることにします 57

58.

ステップ3 有効なパスの場合だけ接続できる構成 58

59.

改めてルールのパスを細かく設定変更します • ルールページで先ほどの作成済のルールを選択して編集しま す 59

60.

バックエンドターゲットを編集します • ルールの編集ページ内のバックエンドターゲットタブを開き、 バックエンドターゲット/バックエンド設定 の設定内容を確認 します 60

61.

サーバーの存在しないプールに戻します • バックエンドターゲットをステップ1で指定したリソースのない プールに戻します • これでパスが合致しないリクエストはOnTimeサーバーの属す るプールへ転送されません 61

62.

接続を許可するパスを追加します • 実際に利用するパスとプールを設定します • 「パスベースの規則を作成するには複数のターゲットを追加 します」をクリックします 62

63.

パスとターゲット及び接続先のバックエンドを設定 • パスの追加ページで以下の項目をそれぞれ設定します • ターゲットの種類 • パス ターゲット名 • バックエンド設定 • バックエンドターゲット :バックエンドプール :/ontimegcms/* :任意の名前 :ステップ2で作成した設定 :ステップ2で作成したプール • 設定したら「保存」をクリックします 63

64.

Ontimegcms用のパス設定ができました • ルールの編集ページに戻り、追加されていることを確認します 64

65.

残りも同様に作成します • 同様の手順で必要なパスを追加します • 追加の必要なパスは以下の17つです • • • • • • • • • • • • • • • • • 65 /ontimegcms/* (作成済み) /ontime/* /desktop/* /mobile/* /mailauth/* /tools/* /poll-ms-backend/* /catering/* /visitor/* /visitordesktop/* /authapp/* /teams/* /externalvote/* /cateringdesktop/* /cateringmobile/* /outlook-catering-add-in/* /outlook-poll-addin/*

66.

ダミーで作成したパスは削除します • ダミー用に作成したパスはパスベースの規則の表内一番右側 の列にある3点アイコンから「削除」を選択して削除します 66

67.

バックエンドターゲットの変更ができました • 必要なパスの追加、不要なパスの削除が完了したら「保存」 をクリックします • ここまでの設定でフロントエンドIPアドレスとパスを指定して HTTPS通信で且つ許可されたパスの場合だけルーティングさ れOnTimeサーバーに接続出来るようになりました https://フロントエンドIPアドレス/ontimegcms/desktop • 次のステップではWAFにより更なる防御や検出を行いログを 取得する設定を行います 67

68.

ステップ4 WAFによる更なる防御とログ取得 68

69.

WAFレベルに切り替えます • Webアプリケーションファイアウォールページを開き「WAF V2」を選択します 69

70.

新規作成を選択します • WAFポリシー欄の「新規作成」をクリックします 70

71.

WAFポリシーを作成 • 名前に任意の名前を指定します • ポット保護の追加も選択します • よろしければ「OK」をクリックします 71

72.

ポリシーを選択して保存 • 作成したWAFポリシーが選択されていることを確認し「保存」 をクリックします 72

73.

WAFポリシーが選択されたことを確認 • WAFポリシーが登録されました • 引き続き作成されたWAFポリシーをクリックして内容を確認 します 73

74.

WAFのポリシーモードが検出であることを確認 • Azure Policyが有効になっていることが確認できます • ポリシーモードは「検出」です • これにより検出したログだけが記録されます • 十分な検証の上、問題ないと判断された際はポリシーモー ドを「防止」にすることでより強固になります 74

75.

ログの出力先を設定します • アプリケーションゲートウェイの診断設定ページを開き「診断 設定を追加する」をクリックします 75

76.

診断設定名を指定します • 診断設定の名前に任意の名前を入力します 76

77.

出力内容とLog Analyticsワークスペースを指定 • 以下の項目を設定します カテゴリグループ :allLogsにチェック メトリック :AllMetricsにチェック 宛先の詳細 :LogAnalyticsワークスペースへの送信にチェック サブスクリプション :ご利用のサブスクリプション • LogAnalyticsワークスペース :ご利用のワークスペース • • • • 77

78.

出力先が指定され診断設定が作成されました • 診断設定ページで設定が作成されていることを確認します • ここまでの設定でLogの内容はLog Analysticsでクエリなど 行えるようになりました • 疎通確認や設定が問題なければ、DNSのレコードを変更し て従来OnTimeサーバーのパブリックIPアドレスに紐付けして いたホスト名をAzure Application Gatewayのフロントエン ドIPアドレスに変更してください • 次のステップではDNS変更後に暫定的に指定していたホス ト名を引用に変更して仕上げます 78

79.

仕上げ DNS変更後に行う 79

80.

バックエンド設定を修正します • バックエンド設定ページを開き作成済のバックエンド設定の を編集します 80

81.

画面下のホスト名の設定を修正します • 画面下へスクロールします 81

82.

ホスト名のオーバーライドをいいえにします • 新しいホスト名でオーバーライドするの設定を「いいえ」を選 択し「保存」をクリックします • これによりクライアントが直接入力したURLを利用してバック エンドプールへルーティングするようになります 82

83.

念のためバックエンド正常性の確認をして終了 • 念のため、バックエンド正常性ページを開き、バックエンド設 定の変更で影響を受けずに健全であることを確認します • 引き続きLog AnalysticsのWAFデータ検証なども行ってく ださい 83