10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Azure Front Door + WAF の構成要素、ログまわり まとめ

Posted at

はじめに

こんにちは Azure Front Door GAしましたね

プレビュー期間中、ほとんど触らず来たので、一通り触ってみました。
また、パブリックプレビュー中のWAF機能についても確認しました。
備忘としてDump.

間違ってたり、古かったりしたら教えてください。

Azure Front Door Service is now generally available
Web application firewall at Azure Front Door service

ざっくり

グローバル+L7LB+CDN+WAF(preview)なサービス

価格(2019/4/18時点、最新はこちら)

FrontDoorはGA済みだけど、課金は2019/05/01から開始らしい。試すなら今!

  • ルーティング規則
料金(時間) (月)
最初の5ルーティング ¥3.36/時間 ¥2419.2/月
追加のルーティング ¥1.344/時間 ¥967.68/月
  • 送信(アウトバウンド)
北米、ヨーロッパ、中東、アフリカ アジア太平洋(日本) 南米 オーストラリア インド
最初の10TB ¥19.040/GB ¥28/GB ¥56/GB ¥31.360/GB ¥38.080/GB
次の40TB ¥16.80/GB ¥24.64/GB ¥47.712/GB ¥26.88/GB ¥32.48/GB
次の100TB ¥14.56/GB ¥21.28/GB ¥40.32/GB ¥22.400/GB ¥27.440/GB
  • 受信(インバウンド)
    グローバル ¥1.12/GB

サービスの構成要素

リソースタイプ:Microsoft.Network/Frontdoors

フロントエンドホスト

入口を定義する子リソース
リソースタイプ:Microsoft.Network/Frontdoors/FrontendEndpoints
ホスト名と証明書、セッションアフィニティを設定します。

既定のホスト

リソース作成時に必ず作成されます。
カスタムドメインを使用する際に向ける先でもあります。
ホスト名:xxx.azurefd.net
証明書は、*.azurefd.netのワイルドカード証明書が使用されます。

カスタムドメインのホスト

  • ホストの追加
    ドメインを所持している検証が必要です。
    DNSにCNAMEで<追加したいサブドメイン><xxx>.azurefd.netを登録
    または、CNAMEでafdverify.<追加したいサブドメイン>afdverify.<xxx>.azurefd.netを登録

  • 証明書(自前の証明書を使う場合)
    KeyVaultで管理する。
    FrontDoorのサービスプリンシパルをAADに登録して、アクセス権を付与する。
    一覧にあるCA以外の証明書は拒否される模様

  • 証明書(フロントドア管理の証明書を使う場合)
    Azure CDNと同様に、Azureが無料で発行してくれます

  • セッションアフィニティ
    ホスト単位で設定でき、Cookieベース

バックエンドプール

出口を定義する子リソース
リソースタイプ:Microsoft.Network/Frontdoors/BackendPools
ホスト名、ポート、負荷分散ルール、正常性プローブを設定します。

バックエンド

リクエストの転送先を1つ以上設定する。

  • 設定項目は以下の通り
    • http/httpsのポートを指定できる
    • バックエンドホスト名(またはIP)
    • バックエンドホストヘッダー(ヘッダー値を上書きできる)
    • 優先度(アクティブ/スタンバイ)、重み(分散の加重)

正常性プローブ

バックエンドのヘルスチェック方法を設定する子リソース
リソースタイプ:Microsoft.Network/Frontdoors/HealthProbeSettings

バックエンドプールに対して紐づけるリソースで、
設定は、バックエンドプールに対して一律で適用される。

200 OKのみを正常応答と扱う仕様

  • 設定項目は以下の通り
    • 送信先のパス
    • プロトコル(HTTP/HTTPS)
    • 間隔(秒)(確認頻度)

負荷分散

バックエンドの負荷分散ルールを設定する子リソース
リソースタイプ:Microsoft.Network/Frontdoors/LoadBalancingSettings

バックエンドプールに対して紐づけるリソースで、
設定は、バックエンドプールに対して一律で適用される。

サンプルサイズ、成功回数、待機時間感度を調節できる
詳しくは 負荷分散の設定 最低遅延に基づくトラフィック ルーティング を参照

ルーティング規則

入口(フロントエンドホスト)と出口(バックエンドプール)を紐づけ、リクエストを振り分けるための子リソース
リソースタイプ:Microsoft.Network/Frontdoors/RoutingRules

FrontDoor 1リソースに対して、複数作成できる(課金単位でもある)。
設定した入口、パス、プロトコルでルーティング規則が決定され、設定した出口へ転送される。

ルーティング規則の選択条件部分

  • 設定項目は以下の通り
    • フロントエンドホスト:(複数選択)
    • プロトコル(acceptedProtocols)
      • 選択:HTTP、HTTPS、HTTPとHTTPS
    • URLパスパターン

適用するルーティングの設定部分

大きくは2個に分けられる。
ルートの種類:Forward/Redirect

Redirectの場合

  • 設定項目は以下の通り
    • リダイレクトの種類(ステータスコード):301/302/307/308
    • プロトコル:http or https or リクエストと同じ
      • ⇒フロントのプロトコルをHTTP,リダイレクト先プロトコルをHTTPSにすれば、HTTPSリダイレクタとして機能する
    • 宛先ホスト,パス,クエリ:保持 or 置換(項目全体を一括置換のみ対応)
    • 宛先フラグメント:追加のみ

Forwardの場合

  • 設定項目は以下の通り
    • バックエンドプール
    • プロトコル:http or https or リクエストと同じ
      • HTTPを選んだ場合、SSLオフローダー的な動作となるが、パブリックなネットワークを経由するため、あまり使うことはない(か?)
    • URL rewrite
      バックエンドに転送する際のパスの書き換えのみ。
      ProxyPassReverseのような、応答の(リダイレクトとかの)ヘッダ書き換え(location)はなし

キャッシング設定

  • 設定項目は以下の通り
    • クエリ文字:クエリ文字列を無視/一意のURLをすべてキャッシュ
    • 動的圧縮:gzip/brotli
キャッシュのTTL

レスポンスのヘッダーを元に判定する

  • Cache-Control: s-maxage=
  • Cache-Control: maxage=
  • Expires:
キャッシュのパージ

ポータル/PowerShell/RESTAPIで実行する。
ホストやルート単位ではなくFrontDoor一括
パスベースで消去。(ワイルドカード可、大文字と小文字は区別する)

Geoフィルタリング

固有の機能ではなく、WAFのカスタムルールとして定義
IPからの国判別ってどの程度の厳密さなんでしょう…?

Azure web application firewall for Azure Front Door

リソースタイプ:Microsoft.Network/frontdoorwebapplicationfirewallpolicies
frontdoorsリソースの子ではなくて、独立したリソース
OWASP CRSベース?のAzureマネージドなルールセットと、
ユーザー定義のカスタムルールを組み合わせて適用できる。

PublicPreview中で、GA時の料金は不明

ポータルからの作成時、FrontDoorとの関連がわかりにくい…

構成要素

フロントエンドホストの関連付け

FrontDoorリソース単位ではなく、フロントエンドホスト単位でポリシーを指定できる。
また、1つのポリシーを複数のFrontDoorリソースに対しても適用できる。

ポリシー動作の設定項目

  • モード:検出 or 防止
  • リダイレクト:ルールのアクションがリダイレクトの際に飛ばす先のURL
  • ステータスコード、ボディ:ルールのアクションがブロックの際に返すHttpStatus&Body

マネージドルール

Azure側が管理するルールセット
Azure側が新しい脅威に対応し、ルールセットを追加してくれる(らしい)

ルールセットのバージョンを指定する。
現状ある、DefaultRuleSet preview-0.1はOWASP ModSecurity CRS 3.1.0ベース(っぽい)
マネージドルールセットを使用しないこともできる。

ルール毎に無効化することができて、さらにルール毎にアクションの変更ができる。

指定できるなアクション

  • 許可(+ログ記録))
  • ブロック(+ログ記録))
  • ログ
  • リダイレクト(+ログ記録)

カスタムルール

IP制限、Geoフィルタリング、そのた任意のルールが定義できます。
現時点では、ポータルから設定できません。

  • 優先度:カスタムルール内で一意(?)
  • 条件:いろいろ…
  • アクション:許可 or ブロック or ログ or リダイレクト
    詳しくはこちら

診断ログの出方

ポリシー側リソースに診断ログカテゴリなく、FrontDoor側リソースの診断設定によって、出力される。

FrontdoorWebApplicationFirewallLog

field value
clientIP_s <クライアントIP>
socketIP_s <クライアントIP>
ruleName_s DefaultRuleSet-preview-0.1-SQLI-942180
policy_s wafpolicy1
action_s Block
host_s <カスタムホスト名>
requestUri_s https://<カスタムホスト名>:443/?a=%27or1%3D1
TenantId XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
SourceSystem Azure
TimeGenerated [UTC] 2019-04-18T16:13:02.899Z
Tenant_s Edge-Prod-TYO01r3
ResourceId /SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/XXXXX/PROVIDERS/MICROSOFT.NETWORK/FRONTDOORS/XXXXX
Category FrontdoorWebApplicationFirewallLog
OperationName Microsoft.Network/FrontDoor/WebApplicationFirewallLog/Write
SubscriptionId XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
ResourceGroup XXXXX
ResourceProvider MICROSOFT.NETWORK
Resource XXXXX
ResourceType FRONTDOORS
Type AzureDiagnostics
_ResourceId /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/xxxxx/providers/microsoft.network/frontdoors/xxxxx

FrontdoorAccessLog

field value
trackingReference_s 0DqK4XAAAAACer7yRtp8lTIA3bqg0GcNeVFlPMDFFREdFMDQwOAA4ZTE1MmFjMy01N2JiLTQ4OTQtYWY4Mi04MWU5MTA3YWM3MzM=
httpMethod_s GET
httpVersion_s 1.1
requestUri_s https://<カスタムホスト名>:443/?a=%27or1%3D1
requestBytes_s 76
responseBytes_s 1056
userAgent_s Fiddler
clientIp_s <クライアントIP>
timeTaken_s 0.004
securityProtocol_s TLS 1.2
routingRuleName_s xxxxx.azurefd.net_routingrule1_0ea61f30-5ffe-49ae-8fbc-93ebb2f707ac
httpStatusCode_s 403
httpStatusDetails_s 403
TenantId XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
SourceSystem Azure
TimeGenerated [UTC] 2019-04-18T16:13:02.9Z
Tenant_s Edge-Prod-TYO01r3
ResourceId /SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/XXXXX/PROVIDERS/MICROSOFT.NETWORK/FRONTDOORS/XXXXX
Category FrontdoorAccessLog
OperationName Microsoft.Network/FrontDoor/AccessLog/Write
SubscriptionId XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
ResourceGroup XXXXX
ResourceProvider MICROSOFT.NETWORK
Resource XXXXX
ResourceType FRONTDOORS
Type AzureDiagnostics
_ResourceId /subscriptions/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/resourcegroups/xxxxx/providers/microsoft.network/frontdoors/xxxxx

trackingReference_sはアクセスログだけじゃなくWAFログにも出力してほしい。。
アクセスが多いとき、アクセスログとのJoinが難しくなる。(AppGWも同じだけど)

Application GatewayのWAFと違いとして、
Blockアクションのルールに引っかかった場合、その場で判定を打ち切るようで、最初のBlockのみ出力される。
Logアクションのルールは優先度がBlockより前だと出力される。
マネージドルール内では、Blockの場合、ルール1件分のみ出力される(…?)

その他、気になるFeedbackとか

参考

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?