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

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

Google Cloud Armor ログは、Cloud Load Balancing lログの一部です。つまり、Google Cloud Armor ログの生成には、ロードバランサで構成されたログ サンプリング レートが適用されます。ロードバランサのサンプリング レートを減らすと、Google Cloud Armor のリクエストログは、そのレートでサンプリングされます。さらに、プロジェクト間のサービス参照を使用する場合、ログはロードバランサのフロントエンドと URL マップを含むホストまたはサービス プロジェクト内に生成されます。つまり、フロントエンド プロジェクトの管理者がログと指標を読み取り、バックエンドプロジェクトを管理できるようにすることをおすすめします。

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

外部アプリケーション ロードバランサのロギングを有効にするには、外部アプリケーション ロードバランサのロギングとモニタリングをご覧ください。外部プロキシ ネットワーク ロードバランサの場合、前の「外部アプリケーション ロードバランサのロギングとモニタリング」ページに記載されている Google Cloud CLI コマンドを使用できます。Google Cloud コンソールを使用して外部プロキシ ネットワーク ロードバランサのロギングを有効にすることはできません。

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

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

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

  • statusDetails(文字列): レスポンス コードを説明するテキスト
    • redirected_by_security_policy: リクエストがリダイレクト ルールによってリダイレクトされました。GOOGLE_RECAPTCHA または EXTERNAL_302 のいずれか。
    • denied_by_security_policy: Google Cloud Armor セキュリティ ポリシーのために、リクエストがロードバランサによって拒否されました。
    • body_denied_by_security_policy: Google Cloud Armor セキュリティ ポリシーのために、リクエスト本文がロードバランサによって拒否されました。
  • enforcedSecurityPolicy: 適用されたセキュリティ ポリシー ルール
    • name(文字列): セキュリティ ポリシーの名前
    • priority(数値): セキュリティ ポリシーの一致ルールの優先度。
    • adaptiveProtection: 自動的にデプロイされる Adaptive Protection ルールに関する情報(該当する場合)。
      • autoDeployAlertId: Adaptive Protection が検出したイベントのアラート ID。
    • configuredAction(文字列): 一致ルールに構成したアクションの名前。例: ALLOWDENYGOOGLE_RECAPTCHAEXTERNAL_302THROTTLE(スロットル ルールの場合)、RATE_BASED_BAN(レートベースの禁止ルールの場合)
    • rateLimitAction: スロットル ルールまたはレートベースの禁止ルールが一致したときのレート制限アクションの情報。
      • key(文字列): レート制限のキー値(最大 32 バイト)。鍵タイプが ALL の場合、または鍵タイプが HTTP-HEADERHTTP-COOKIE であり、指定したヘッダーまたは Cookie がリクエストに含まれていない場合、このフィールドは省略されます。
      • outcome(文字列): 有効な値は次のとおりです。
        • "RATE_LIMIT_THRESHOLD_CONFORM" - 構成されたレート制限のしきい値を下回る場合
        • "RATE_LIMIT_THRESHOLD_EXCEED" - 構成されたレート制限のしきい値を超えた場合
        • "BAN_THRESHOLD_EXCEED" - 構成された禁止しきい値を超えた場合
    • outcome(文字列): 構成されたアクションの実行結果(ACCEPTDENYREDIRECTEXEMPTなど)
    • preconfiguredExprIds(文字列): ルールをトリガーしたすべての事前構成済み WAF ルール式の ID。
    • threatIntelligence: 脅威インテリジェンスから取得した一致する IP アドレスリスト関する情報(該当する場合)。
      • categories: (文字列)照合された IP アドレスのリスト名。
  • previewSecurityPolicy: リクエストがプレビュー用に構成されたルールに一致する場合に入力されます(プレビュー ルールが適用済みのルールよりも優先される場合のみ)。
    • name(文字列): セキュリティ ポリシーの名前
    • priority(数値): セキュリティ ポリシーの一致ルールの優先度
    • configuredAction(文字列): 一致ルールに構成したアクションの名前。例: ALLOWDENYGOOGLE_RECAPTCHAEXTERNAL_302THROTTLE(スロットル ルールの場合)、RATE_BASED_BAN(レートベースの禁止ルールの場合)
    • rateLimitAction: スロットル ルールまたはレートベースの禁止ルールが一致したときのレート制限アクションの情報。
      • key(文字列): レート制限のキー値(最大 32 バイト)。鍵タイプが ALL の場合、または鍵タイプが HTTP-HEADERHTTP-COOKIE であり、指定したヘッダーまたは Cookie がリクエストに含まれていない場合、このフィールドは省略されます。
      • outcome(文字列): 有効な値は次のとおりです。
        • "RATE_LIMIT_THRESHOLD_CONFORM" - 構成されたレート制限のしきい値を下回る場合
        • "RATE_LIMIT_THRESHOLD_EXCEED" - 構成されたレート制限のしきい値を超えた場合
        • "BAN_THRESHOLD_EXCEED" - 構成された禁止しきい値を超えた場合
    • outcome(文字列): 構成された実行結果
    • outcome(文字列): 構成されたアクションの実行結果(ACCEPTDENYREDIRECTEXEMPTなど)
    • preconfiguredExprIds(文字列): ルールをトリガーしたすべての事前構成済み WAF ルール式の ID。
    • threatIntelligence: 脅威インテリジェンスから取得した一致する IP アドレスリスト関する情報(該当する場合)。
      • categories: (文字列)照合された IP アドレスのリスト名。
  • enforcedEdgeSecurityPolicyプレビュー): 適用されたエッジ セキュリティ ポリシー ルール。
    • name(文字列): セキュリティ ポリシーの名前
    • priority(数値): セキュリティ ポリシーの一致ルールの優先度
    • configuredAction(文字列): 一致ルールで構成したアクションの名前(ALLOWDENY など)
    • outcome(文字列): 構成されたアクションの実行結果(ACCEPTDENY など)
  • previewEdgeSecurityPolicyプレビュー): リクエストが、プレビュー用に構成されたエッジ セキュリティ ポリシー ルールに一致する場合に入力されます(プレビュー ルールが適用済みのルールよりも優先される場合にのみ表示されます)
    • name(文字列): セキュリティ ポリシーの名前
    • priority(数値): セキュリティ ポリシーの一致ルールの優先度
    • configuredAction(文字列): 一致ルールで構成したアクションの名前(ALLOWDENY など)
    • outcome(文字列): 構成されたアクションの実行結果(ACCEPTDENY など)

ログの表示

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

コンソール

  1. Google Cloud コンソールで、Google Cloud Armor ポリシーに移動します。

    [Google Cloud Armor ポリシー] に移動

  2. アクション」をクリックします。

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

データロギングをリクエストする

Google Cloud Armor で使用する場合、jsonPayload には次の追加フィールドがあります。

  • securityPolicyRequestData: セキュリティ ポリシーによって処理されるリクエストに関するデータ。最終的にどのルールに一致するかは関係ありません。
    • recaptchaActionToken: reCAPTCHA アクション トークンに関連するデータ。
      • score (float): reCAPTCHA アクション トークンに埋め込まれたユーザー正当性スコア。reCAPTCHA アクション トークンがリクエストに追加され、セキュリティ ポリシー ルールに基づいて正常にデコードされた場合にのみ存在します。詳細については、reCAPTCHA 評価の適用をご覧ください。
    • recaptchaSessionToken: reCAPTCHA セッション トークンに関連するデータ。
      • score (float): reCAPTCHA セッション トークンに埋め込まれたユーザー正当性スコア。reCAPTCHA セッション トークンがリクエストに追加され、セキュリティ ポリシー ルールに基づいて正常にデコードされた場合にのみ存在します。
    • tlsJa3Fingerprint: JA3 TTL / SSL フィンガープリント(クライアントが HTTPSHTTP/2HTTP/3のいずれかを使用して接続している場合)。フィンガープリントが利用可能で、リクエストを評価するセキュリティ ポリシーがある場合にのみ存在します(ポリシー内の式がリクエストと一致するかどうかは関係ありません)。

ログの例

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

jsonPayload: {
 enforcedSecurityPolicy: {
  priority: 100
  name: "sample-prod-policy"
  configuredAction: "THROTTLE"
  outcome: "DENY"
  rateLimitAction: {
    key:"sample-key"
    outcome:"RATE_LIMIT_THRESHOLD_EXCEED"
  }
 }
 @type: "type.googleapis.com/google.cloud.loadbalancing.type.LoadBalancerLogEntry"
 statusDetails: "denied_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: "DENY"
  configuredAction: "RATE_BASED_BAN"
  rateLimitAction: {
    key:"sample-key"
    outcome:"BAN_THRESHOLD_EXCEED"
  }
 }
 statusDetails: "denied_by_security_policy"
}
httpRequest: {8}
resource: {2}
timestamp: "2021-03-17T19:27:17.393244Z"

次のステップ

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