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

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

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

ロギングを使用すると、Cloud Armor のセキュリティ ポリシーによって評価されたすべてのリクエストとその結果(優先度が最も高い一致ルールに基づいて行われたアクション)を確認できます。たとえば、拒否されたリクエストを表示するには、jsonPayload.enforcedSecurityPolicy.outcome="DENY"jsonPayload.statusDetails="denied_by_security_policy" などのフィルタを使用します。

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

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

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

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

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

ログの表示

Cloud Armor セキュリティ ポリシーのログは、Trusted Cloud コンソールでのみ表示できます。

コンソール

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

    [Cloud Armor ポリシー] に移動

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

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

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

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

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

次のステップ