サービスメッシュ(ASM)を使用すると、イングレスゲートウェイを Web アプリケーションファイアウォール(WAF)インスタンスに接続できます。アクセスログのフィールドをカスタマイズして、WAF インスタンスによってバックツーオリジンリクエストに追加されたヘッダーを表示できます。これは、オンラインでの O&M を容易にします。このトピックでは、イングレスゲートウェイを WAF インスタンスに接続する方法と、デバッグのためにアクセスログのフィールドをカスタマイズする方法について説明します。
前提条件
イングレスゲートウェイがデプロイされていること。詳細については、「イングレスゲートウェイを作成する」をご参照ください。
クラスターが ASM インスタンスに追加されていること。詳細については、「ASM インスタンスにクラスターを追加する」をご参照ください。
HTTPBin アプリケーションがデプロイされ、ゲートウェイのポート 80 で公開されていること。詳細については、「httpbin アプリケーションをデプロイする」をご参照ください。
WAF の概要
WAF は、Web サイトまたはアプリにエンドツーエンドのセキュリティ保護を提供します。WAF は悪意のある Web トラフィックを識別してフィルタリングし、通常のトラフィックをオリジンサーバーに転送します。これにより、オリジンサーバーが攻撃から保護され、データとサービスのセキュリティが確保されます。
手順 1:イングレスゲートウェイを WAF インスタンスに接続する
ビジネス要件に基づいて、レイヤー 4 クラシックロードバランサー(CLB)インスタンスまたは CNAME を使用して、イングレスゲートウェイを WAF インスタンスに接続できます。
レイヤー 4 CLB インスタンス:この方法を使用することをお勧めします。この方法を使用すると、イングレスゲートウェイの CLB インスタンスを接続できます。CLB インスタンスは、以前はサーバーロードバランサー(SLB)インスタンスと呼ばれていました。レイヤー 4 CLB インスタンスを使用する場合、イングレスゲートウェイのすべてのトラフィックは WAF インスタンスに直接ルーティングされ、イングレスゲートウェイの CLB インスタンスに到達するすべてのリクエストに対して WAF ルールが実行されます。
CNAME:この方法では、指定されたドメイン名からのリクエストが WAF インスタンスにルーティングされます。イングレスゲートウェイに複数のドメイン名があり、その一部のドメイン名のみが WAF 保護を必要とする場合に、この方法を使用できます。
説明CNAME を使用するには、ドメイン名の DNS 解決ルールを変更する必要があります。ドメイン名を WAF インスタンスにポイントする必要があります。その後、WAF インスタンスはリクエストをイングレスゲートウェイに転送します。
方法 1:レイヤー 4 CLB インスタンスを使用する
Web Application Firewallコンソール にログインします。ビジネス要件に基づいて、[サブスクリプション] または [従量課金制] をクリックします。リージョンとその他の設定項目を確認し、[今すぐ購入] をクリックして WAF 3.0 インスタンスを作成します。WAF インスタンスをすでに作成している場合は、既存の WAF インスタンスを使用できます。
左側のナビゲーションペインで、[web サイト設定] をクリックします。[web サイト設定] ページで、[クラウドネイティブ] タブをクリックし、[CLB(TCP)] をクリックします。右側で、[追加] をクリックします。
[インスタンスの設定 - レイヤー 4 CLB インスタンス] パネルで、ゲートウェイに関連付けられている CLB インスタンスを見つけ、[アクション] 列の [ポートの追加] をクリックします。イングレスゲートウェイで使用されているポートを選択します。ポートを設定したら、[OK] をクリックします。
この例では、HTTP ポート 80 が選択されています。HTTPS プロトコルを選択する場合は、HTTPS 証明書を設定する必要があります。
説明ASM コンソール にログインし、ゲートウェイの詳細ページでイングレスゲートウェイの CLB インスタンスを表示できます。
[トラフィックマークを有効にする] を選択します。3 つのヘッダーを追加し、[OK] をクリックします。
リクエストがこれらのヘッダーを運ぶ場合、リクエストは WAF によって保護されます。この例では、次の 3 つのヘッダーが追加されます。[カスタムヘッダー](customwaftag:customwaftagvalue)、[発信 IP アドレス](clientrealip)、および [送信元ポート](clientrealport)。
方法 2:CNAME を使用する
Web Application Firewallコンソール にログインします。ビジネス要件に基づいて、[サブスクリプション] または [従量課金制] をクリックします。リージョンとその他の設定項目を確認し、[今すぐ購入] をクリックして WAF 3.0 インスタンスを作成します。WAF インスタンスをすでに作成している場合は、既存の WAF インスタンスを使用できます。
左側のナビゲーションペインで、[web サイト設定] をクリックします。[web サイト設定] ページで、[CNAME レコード] タブをクリックし、[追加] をクリックします。
[リスナーの設定] ステップで、パラメーターを設定し、[次へ] をクリックします。
次の図は、設定例を示しています。

[転送ルールの設定] ステップで、[ロードバランシングアルゴリズム] パラメーターを [IP ハッシュ] に設定し、[オリジンサーバーアドレス] パラメーターを [IP] に設定し、イングレスゲートウェイのパブリック IP アドレスを入力します。[トラフィックマークを有効にする] を選択し、3 つのヘッダーを追加し、その他のパラメーターのデフォルト設定を維持し、[送信] をクリックします。
その後、WAF インスタンスを介してイングレスゲートウェイに送信されるリクエストに 3 つのヘッダーが追加されます。この例では、次の 3 つのヘッダーが追加されます。[カスタムヘッダー](customwaftag:customwaftagvalue)、[発信 IP アドレス](clientrealip)、および [送信元ポート](clientrealport)。

[追加完了] ステップで、[CNAME をコピー] をクリックし、WAF によって提供された CNAME を記録し、[完了] をクリックします。
説明CNAME を使用するには、ここで設定したドメイン名の DNS レコードを、WAF によって提供された CNAME にポイントする必要があります。
手順 2:(オプション)ASM コンソールでアクセスログのフィールドをカスタマイズする
WAF によって検証されたリクエストには、特別なヘッダーが含まれている場合があります。たとえば、手順 1 の [転送ルールの設定] ステップでは、カスタムヘッダー、送信元 IP アドレスを示すヘッダー、および送信元ポートを示すヘッダーがリクエストに追加されます。オンラインアプリケーションのトラフィックが WAF インスタンスを通過し、これらのヘッダーがリンクのアクセスログに含まれていない場合、リンクのデバッグが困難になります。この場合、ASM の可観測性機能を使用して、アクセスログのフィールドをカスタマイズできます。詳細については、「データプレーンでのアクセスログのカスタマイズ」をご参照ください。
手順 3:WAF インスタンスが接続されているかどうかを確認する
方法 1:レイヤー 4 CLB インスタンスを使用する
レイヤー 4 CLB インスタンスを使用して WAF インスタンスに接続し、イングレスゲートウェイの IP アドレスに直接アクセスします。ブラウザのアドレスバーに ${イングレスゲートウェイの IP アドレス}:80/status/418 と入力します。
予期される出力:
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`方法 2:CNAME を使用する
WAF によって提供された CNAME を使用し、次のコマンドを実行して HTTPBin アプリケーションの /status/418 パスにアクセスします。
curl -HHost:${WAF で設定されたドメイン名} "http://${WAF によって提供された CNAME}/status/418" -v予期される出力:
* Trying x.x.x.x:80...
* Connected to geszcfxxxxxxxxxxxxxxxxxxxxppbeiz.aliyunwaf1.com (x.x.x.x) port 80 (#0)
> GET /status/418 HTTP/1.1
> Host:xxxx
> User-Agent: curl/7.84.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 418 Unknown
< Date: Wed, 22 Feb 2023 05:07:23 GMT
< Content-Length: 135
< Connection: keep-alive
< Set-Cookie: acw_tc=0bc1599a16770424432844282e82xxxxxxxxxxxxxxxxxxx1ad989e7e5245f;path=/;HttpOnly;Max-Age=1800
< server: istio-envoy
< x-more-info: http://tools.ietf.org/html/rfc2324
< access-control-allow-origin: *
< access-control-allow-credentials: true
< x-envoy-upstream-service-time: 1
<
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`この例では、実際のドメイン名は使用されていません。実際のドメイン名を使用してアクセスする場合は、ドメイン名解決ルールを変更して、WAF によって提供された CNAME を実際のドメイン名に置き換えます。
手順 4:ゲートウェイログで WAF インスタンスによって追加されたヘッダーの値を表示する
ASM コンソール にログインします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[ASM ゲートウェイログ] タブで、テキストボックスに 418 と入力し、[検索と分析] をクリックします。
WAF インスタンスによって追加されたヘッダーの値がログに出力されます。

イングレスゲートウェイを WAF インスタンスに接続した後、WAF コンソールにログインして、その他の高度な保護機能を設定し、Web サイトを攻撃から保護できます。 リンク上の他のカスタムヘッダーを監視するには、手順 2 を実行してヘッダーを設定します。