目次

  1. 1.はじめに
  2. 2.Google Cloud Armor のログに詳細ログを追加する
  3. 3.検知状況を確認する
  4. 4.クエリの例
  5. 5.おわりに
  6. 1. はじめに

    今回は Google Cloud Armor の検知状況を Google Cloud Logging で確認する方法をご紹介します。
    誤検知が発生してないかなどで検知状況を定期的に確認することが多いかと思いますので利用方法を理解していただければ幸いです。

    2.Google Cloud Armor のログに詳細ログを追加する

    Google Cloud Armor のログはGoogle Cloud Load Balancing のログの一部という扱いになります。Google Cloud Logging にアタッチした Google Cloud Armor が機能すると Google Cloud Logging に、拒否されたリクエストであることなどが記載されます。ただし、どのルールで拒否されたかなどの詳細な情報の記載を確認するためには詳細ログ機能を有効にすることをお勧めします。
    ※ WafCharm を利用した場合、詳細ログ機能は有効な状態に変更されます。
    ※ 記載されるログ内容への注意事項が公式ページにありますので理解した上でご利用ください。
    https://cloud.google.com/armor/docs/request-logging?hl=ja#maintaining_privacy_when_verbose_logging_is_turned_on

    Google Cloud Shell を利用して以下のコマンドでログレベルを変更します。

    gcloud compute security-policies update <SECURITY POLICY NAME> \
    --log-level=VERBOSE
    

    ※ <SECURITY POLICY NAME>は対象のセキュリティポリシー名に変更してください。

    公式情報
    https://cloud.google.com/armor/docs/request-logging?hl=ja#verbose-logging

    3. 検知状況を確認する

    対象のセキュリティポリシーからポリシーの詳細画面を表示します。
    「ログ」の項目を開きます。

    「ポリシーログを表示」を選択すると Google Cloud Logging の画面に遷移します。

    クエリには対象のセキュリティポリシーが指定されて、結果が表示されます。
    クエリ結果にリクエストが一行ずつ記載されているため、展開することで詳細を確認することが可能です。

    4. クエリの例

    ・セキュリティポリシーのルールによって拒否されたリクエストを検索するクエリ

    公式情報に記載のある「jsonPayload.enforcedSecurityPolicy.outcome=”DENY”」を利用すると以下のような形になります。※クエリの編集から AND 条件を追記するのみです。

    ```
    resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(<SECURITY POLICY NAME>) AND jsonPayload.enforcedSecurityPolicy.outcome="DENY"
    ```
    


    これは適用されたセキュリティポリシーで拒否されたものを検索していることになります。
    enforcedSecurityPolicy には適用されたセキュリティポリシーが記載されます。

    ・プレビューモードのルールに合致したリクエストを検索するクエリ

    遮断まで実施せずに検知だけするプレビューモードの場合は enforcedSecurityPolicy を previewSecurityPolicy に変更して実行します。

    ```
    resource.type:(http_load_balancer) AND jsonPayload.enforcedSecurityPolicy.name:(<SECURITY POLICY NAME>) AND jsonPayload.previewSecurityPolicy.outcome="DENY"
    ```
    


    上記のサンプルだと enforcedSecurityPolicy 上はリクエストを受け付けた記載となりますが、 previewSecurityPolicy 上では何らかのルールに合致したことになります。
    つまりプレビューモードのルールには合致したがリクエストの拒否は行われなかったことがわかります。
    ※ルールは優先度順に評価されるため、プレビューモードのルールより先にリクエストを許可/拒否するルールに合致した場合、後続のルールのチェックは受けないため、プレビューモードのルールに合致する内容でも記載がない場合もあります。

    5. おわりに

    Google Cloud を利用している場合、 Google Cloud Logging 機能に様々なログが集約されるため大変便利かと思います。 Google Cloud Armor も同様に確認できますので、特有のパターンの検索という形でご紹介させていただきました。