はじめに
こんにちは 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
- 特定のMIMEのみ圧縮される
- 1 KB 以上 8 MB 以下のみ圧縮される
キャッシュの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とか
-
Docs バックエンドへのアクセスを Azure Front Door Service のみにロックダウンするにはどうしたらよいですか?
- IPで制限する…
- IPv4 - 147.243.0.0/16
- IPv6 - 2a01:111:2050::/44
- IPで制限する…
-
WebSocketは対応していない
Feedback Forums Support WebSocket connections on Azure Front Door
-
レスポンスヘッダーにキャッシュに関する値がない場合、キャッシュ出来ない件について、計画中になっている
Feedback Forums Confirguration of caching rules in Front Door
-
HTTPSリダイレクト もう対応済み まだドキュメント化されていない(ぽい)
Feedback Forums Allow an HTTP to HTTPS redirect on Azure Front Door
-
VNET統合(却下) AFDはパブリックなサービスなので諦めろ的な
Feedback Forums Vnet Integration Front Door
-
ZoneApexドメイン
Feedback Forums Add Custom Apex (Naked) Domains as front end hosts for Azure Front Door Service
しばやん雑記 Azure DNS の Alias record set を CLI で管理する
サービスとしては対応済み…? -
SASキーを使ったストレージアクセスが出来ない…?(よくわかってない)