リクエスト ロギングの使用

セキュリティ ポリシー名、一致ルールの優先度、関連するアクション、関連情報の Google Cloud Armor のリクエストごとのログは、HTTP(S) 負荷分散のロギングの一環として記録されます。新しいバックエンド サービスのロギングは、デフォルトでは無効になっているため、Google Cloud Armor の全ロギング情報を記録するには、HTTP(S) 負荷分散ロギングを有効にする必要があります。

Google Cloud Armor ログは Cloud Load Balancing のログの一部であるため、Google Cloud Armor のログの生成には、HTTP(S) 負荷分散に構成されたログ サンプリング レートが適用されます。外部 HTTP(S) ロードバランサのサンプリング レートを減らすと、Google Cloud Armor のリクエストログは、そのレートでサンプリングされます。

ロギングを使用すると、Google Cloud Armor セキュリティ ポリシーで評価されたすべてのリクエストと、結果またはアクションを確認できます。たとえば、拒否されたリクエストを表示するには、jsonPayload.enforcedSecurityPolicy.outcome="DENY"jsonPayload.statusDetails="denied_by_security_policy" などのフィルタを使用します。

ロギングを有効にするには、HTTP(S) 負荷分散のロギングとモニタリングをご覧ください。

また、さまざまなロギングレベルを設定して、セキュリティ ポリシーとルールが意図したとおりに機能しているかどうか評価することもできます。詳細については、詳細ログをご覧ください。

セキュリティ ポリシーのログエントリ

次に示すログビューアのログエントリは、Google Cloud Armor のセキュリティ ポリシーとルールのロギング用です。jsonPayload でエントリの構造は次のとおりです。HTTP リクエストの詳細は、httpRequest メッセージに表示されます。

  • statusDetails(文字列): レスポンス コードを説明するテキスト
    • redirected_by_security_policy: リクエストがリダイレクト ルールによってリダイレクトされました。GOOGLE_RECAPTCHA または EXTERNAL_302 のいずれか。
    • throttled_by_security_policy: スロットル ルールによってリクエストがブロックされました。
    • rate_based_banned_by_security_policy: リクエストがレートベースの禁止ルールによって禁止されました。
    • denied_by_security_policy: Google Cloud Armor セキュリティ ポリシーのために、リクエストがロードバランサによって拒否されました。
    • body_denied_by_security_policy: Google Cloud Armor セキュリティ ポリシーのために、リクエスト本文がロードバランサによって拒否されました。
  • enforcedSecurityPolicy: 適用されたセキュリティ ポリシー ルール
    • name(文字列): セキュリティ ポリシーの名前
    • priority(数値): セキュリティ ポリシーの一致ルールの優先度
    • configuredAction(文字列): 一致ルールに構成したアクションの名前。例: ALLOWDENYGOOGLE_RECAPTCHAEXTERNAL_302THROTTLE(スロットル ルールの場合)、RATE_BASED_BAN(レートベースの禁止ルールの場合)
    • outcome(文字列): 構成されたアクションの実行結果(ACCEPTDENYREDIRECTTHROTTLERATE_BASED_BAN など)
    • preconfiguredExprIds(文字列): ルールをトリガーしたすべての事前構成済み WAF ルール式の ID
  • previewSecurityPolicy: リクエストがプレビュー用に構成されたルールに一致する場合に入力される(プレビュー ルールが適用済みのルールよりも優先される場合にのみ表示されます)
    • name(文字列): セキュリティ ポリシーの名前
    • priority(数値): セキュリティ ポリシーの一致ルールの優先度
    • configuredAction(文字列): 一致ルールに構成したアクションの名前。例: ALLOWDENYGOOGLE_RECAPTCHAEXTERNAL_302THROTTLE(スロットル ルールの場合)、RATE_BASED_BAN(レートベースの禁止ルールの場合)
    • outcome(文字列): 構成されたアクションの実行結果(ACCEPTDENYREDIRECTTHROTTLERATE_BASED_BAN など)
    • preconfiguredExprIds(文字列): ルールをトリガーしたすべての事前構成済み WAF ルール式の ID
  • enforcedEdgeSecurityPolicyプレビュー): 適用されたエッジ セキュリティ ポリシー ルール
    • name(文字列): セキュリティ ポリシーの名前
    • priority(数値): セキュリティ ポリシーの一致ルールの優先度
    • configuredAction(文字列): 一致ルールで構成したアクションの名前(ALLOWDENY など)
    • outcome(文字列): 構成されたアクションの実行結果(ACCEPTDENY など)
  • previewEdgeSecurityPolicyプレビュー): リクエストが、プレビュー用に構成されたエッジ セキュリティ ポリシー ルールに一致する場合に入力されます(プレビュー ルールが適用済みのルールよりも優先される場合にのみ表示されます)
    • name(文字列): セキュリティ ポリシーの名前
    • priority(数値): セキュリティ ポリシーの一致ルールの優先度
    • configuredAction(文字列): 一致ルールで構成したアクションの名前(ALLOWDENY など)
    • outcome(文字列): 構成されたアクションの実行結果(ACCEPTDENY など)

詳細ログ

事前に構成された WAF ルールが特定のリクエストでトリガーされた理由がわからないことがあります。Google Cloud Armor のデフォルトのイベントログには、トリガーされたルールとサブ署名が含まれています。ただし、トラブルシューティング、ルールの検証、またはルールの調整を目的として、ルールをトリガーした受信リクエストの詳細を特定することが必要な場合があります。

--log-level フラグを使用すると、ポリシーに記録される詳細レベルを変更できます。このフラグの値は NORMAL または VERBOSE のいずれかです。

--log-level=[NORMAL | VERBOSE]

次に例を示します。

gcloud compute security-policies update ca-policy-1 \
    --log-level=VERBOSE

最初にポリシーを作成するとき、ポリシーを変更するとき、またはポリシーのトラブルシューティングを行うときに、詳細ログを有効にすることをおすすめします。

詳細ログが有効な場合に記録される値

詳細ログが有効になっている場合、Cloud Logging に送信される HTTP(S) 負荷分散リクエストログに追加情報が記録されます。詳細ログが有効になっている場合、リクエストに次の追加フィールドが含まれます。

  • matchedFieldType(文字列): 一致を引き起こすフィールドのタイプです。

    • ARG_NAMES
    • ARG_VALUES
    • BODY

      • ログに BODY フィールドが含まれている場合、投稿の本文全体がルールに一致することを意味します。
    • COOKIE_VALUES

    • COOKIE_NAMES

    • FILENAME

    • HEADER_VALUES

    • RAW_URI

    • REFERER

    • REQUEST_LINE

    • URI

    • USER_AGENT

    • HEADER_NAMES

    • ARGS_GET

    • X_FILENAME

    • ARG_NAME_COUNT

    • TRANSFER_ENCODING

    • REQUEST_METHOD

  • matchedFieldName(文字列): Key-Value ペアの値の部分と一致すると、このフィールドに Key-Value が保存されます。それ以外の場合は空になります。

  • matchedFieldValue(文字列): フィールド内で照合する部分の接頭辞。最大 16 バイトです。

  • matchedFieldLength(整数): フィールドの合計長。

  • matchedOffset(整数): 一致の原因となるフィールド内の開始オフセット。

  • matchedLength(整数): 一致の長さ。

たとえば、SQL インジェクション WAF ルールが有効なプロジェクトにリクエストを送信できます。

curl http://IP_ADDR/?sql_table=abc%20pg_catalog%20xyz

ログ エクスプローラのエントリは次のようになります。

enforcedSecurityPolicy: {
 name: "user-staging-sec-policy"
 priority: 100
 configuredAction: "DENY"
 outcome: "DENY
 preconfiguredExprIds: [
   0: "owasp-crs-v030001-id942140-sqli"
  ]
matchedFieldType: "ARG_VALUES"
matchedFieldName: "sql_table"
matchedFieldValue: "pg_catalog"
matchedFieldLength: 18
matchedOffset: 4
matchedLength: 10
}

詳細ログが有効な場合のプライバシーの維持

詳細ロギングを使用すると、Google Cloud Armor は、事前構成された特定の WAF ルールをトリガーする受信リクエストの要素の一部をログに記録します。これらのスニペットには、リクエスト ヘッダー、リクエスト パラメータ、POST 本文の要素などが含まれることがあります。リクエスト ヘッダーや本文の内容、WAF ルールがトリガーする内容によっては、スニペットに IP アドレスやその他の機密データが含まれる場合があります。

詳細ログを有効にすると、機密性のあるデータが Logging のログに記録される可能性があります。詳細ロギングは、ルールの作成と検証中、またはトラブルシューティングでのみ有効にすることをおすすめします。通常の処理では、詳細ログを無効にしておくことをおすすめします。

ログの表示

Google Cloud Armor セキュリティ ポリシーのログは、Google Cloud Console でのみ表示できます。

Console

  1. Google Cloud Console で、[ネットワーク セキュリティ] ページに移動します。

    [ネットワーク セキュリティ] に移動

  2. [セキュリティ ポリシー] ページのセキュリティ ポリシーの行で、ログを表示したいポリシーの [メニュー] をクリックします。

  3. [ログを表示] を選択します。

bot 管理

Google Cloud Armor が reCAPTCHA Enterprise トークンをどのように評価するかを可視化するため、jsonPayload には次の追加フィールドがあります。

  • securityPolicyRequestData: セキュリティ ポリシーによって処理されるリクエストに関するデータ。最終的にどのルールに一致するかは関係ありません。
    • recaptchaToken: reCAPTCHA Enterprise トークン(アクション トークンまたはセッション トークン)に関連するデータ。
      • score (float): reCAPTCHA Enterprise トークンに埋め込まれたユーザー正当性スコア。リクエストに reCAPTCHA Enterprise トークンが含まれ、トークンが正しくデコードされた場合にのみ存在します。Google Cloud Armor は、reCAPTCHA Enterprise のトークンベースのルールがある場合のみ、トークンのデコードを試みます。詳細については、reCAPTCHA Enterprise の評価の適用をご覧ください。

ログの例

以下に、リクエストをブロックするスロットル ルールのログ詳細の例を示します。

jsonPayload: {
 enforcedSecurityPolicy: {
  priority: 100
  name: "sample-prod-policy"
  configuredAction: "THROTTLE"
  outcome: "THROTTLE"
 }
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 statusDetails: "throttled_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:16:48.185763Z"

以下に、リクエストをブロックするレートベースの禁止ルールのログ詳細の例を示します。

jsonPayload: {
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 enforcedSecurityPolicy: {
  priority: 150
  name: "sample-prod-policy"
  outcome: "RATE_BASED_BAN"
  configuredAction: "RATE_BASED_BAN"
 }
 statusDetails: "rate_based_banned_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"

次のステップ

Google Cloud Armor に関する問題のトラブルシューティングについて学習する。