0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OCI WAF ポリシーの運用管理環境を整備してみた

0
Posted at

001samune.png

はじめに

WAF を利用する際、ポリシーのチューニングが運用課題となります。
そこで今回は、幾つかの前提を基に、運用管理環境を整備してみました。

前提

システム環境

  • 限られたユーザーが利用するインターネットシステム
  • 送信元グローバルIPは特定可能

運用時に求めること

  • 特定送信元GIPからのリクエストがブロック及びチェックされたことを検知できること
  • WAFの利用状況を可視化すること
  • Log Analyticsのストレージ容量は10GBを超えると課金が発生するため、該当容量を超えないこと

運用管理環境

上記前提を満たす構成を以下の通り整備しました。
Regional WAF のサービスログを OCI Logging に格納し、そこを分岐点に各処理を実施します

architecture.drawio.png

  • 環境コードは以下 GitHub にあげてますので、よかったら覗いてみてください

特定送信元GIPからのリクエストがブロック及びチェックされたことを検知できること

OCI Logging → OCI Connector Hub → OCI Notifications (Email) の構成 を取っています。
その中でのポイントは、OCI Connector Hub のログフィルタです。
実際のコンディションは以下の通りです。

(data.action='block' and data.clientAddr='113.*') or (data.action='allow' and data.clientAddr='113.*' and data.requestProtection.matchedRules='*')

ブロックログの例を以下に示します。(一部省略有り)
ログ内にはマッチしたルールが含まれますが、送信元IPで拾えることが重要なので actionclientAddr でフィルリングしています。

blockログ例
{
  "datetime": 1776423505831,
  "logContent": {
    "data": {
      "action": "block",
      "backendStatusCode": "-",
      "clientAddr": "113.XXX.XX.XXX",
      "countryCode": "jp",
      "host": "161.33.137.159",
      "listenerPort": "80",
      "request": {...},
      "requestProtection": {
        "matchedData": "Matched Data: \x22 found within ARGS:lt;pstyle: \x22background:url(javascript:alert(1))\x22;Matched Data: \x22 found within ARGS:lt;pstyle: \x22background:url(javascript:alert(1))\x22;Matched Data: url(javascript: found within ARGS:lt;pstyle: \x22background:url(javascript:alert(1))\x22;Matched Data: (javascript:alert( found within ARGS:lt;pstyle: \x22background:url(javascript:alert(1))\x22;Matched Data: javascript:a found within ARGS:lt;pstyle: \x22background:url(javascript:alert(1))\x22",
        "matchedIds": "9421100_v002;9421100_v001;9411400_v003;9411700_v003;9412100_v003;9410000_v003",
        "matchedRules": "recommend-rules"
      },
      "requestRateLimiting": {...},
      "response": {...},
      "responseProtection": {...},
      "responseProvider": "requestProtection/recommend-rules",
      "timestamp": "2026-04-17T10:53:55Z"
    },
    "id": "fa8c2d8b-3f6c-4b35-b1cb-04b20d4fbc7e-waf-6",
    "oracle": {...},
    "source": "flb",
    "specversion": "1.0",
    "subject": "",
    "time": "2026-04-17T10:54:04.796Z",
    "type": "com.oraclecloud.loadbalancer.waf"
  }
}

アクションをチェックにした場合のログの例を以下に示します。(一部省略有り)
ポイントは、チェックにしても、actionallow となります。
変わりに、requestProtection 内にマッチしたルールが記載されるようになります。
そのため actionclientAddrrequestProtection でフィルタリングしています。

checkログ例
{
  "datetime": 1776423505831,
  "logContent": {
    "data": {
      "action": "allow",
      "backendStatusCode": "-",
      "clientAddr": "113.XXX.XX.XXX",
      "countryCode": "jp",
      "host": "161.33.137.159",
      "listenerPort": "80",
      "request": {...},
      "requestProtection": {
        "matchedData": "Matched Data: \x22 found within ARGS:lt;pstyle: \x22background:url(javascript:alert(1))\x22;Matched Data: \x22 found within ARGS:lt;pstyle: \x22background:url(javascript:alert(1))\x22;Matched Data: url(javascript: found within ARGS:lt;pstyle: \x22background:url(javascript:alert(1))\x22;Matched Data: (javascript:alert( found within ARGS:lt;pstyle: \x22background:url(javascript:alert(1))\x22;Matched Data: javascript:a found within ARGS:lt;pstyle: \x22background:url(javascript:alert(1))\x22",
        "matchedIds": "9421100_v002;9421100_v001;9411400_v003;9411700_v003;9412100_v003;9410000_v003;9411400_v002;9411700_v002;9412100_v002;9410000_v002;9411400_v001;9411700_v001;9412100_v001;9410000_v001",
        "matchedRules": "recommend-rules"
      },
      "requestRateLimiting": {...},
      "response": {...},
      "responseProtection": {...},
      "responseProvider": "http-backendset",
      "timestamp": "2026-04-17T10:53:55Z"
    },
    "id": "fa8c2d8b-3f6c-4b35-b1cb-04b20d4fbc7e-waf-6",
    "oracle": {...},
    "source": "flb",
    "specversion": "1.0",
    "subject": "",
    "time": "2026-04-17T10:54:04.796Z",
    "type": "com.oraclecloud.loadbalancer.waf"
  }
}

WAFの利用状況を可視化すること

OCI Logging → OCI Connector Hub → OCI LogAnalytics の構成 を取っています。
可視化するため、OCI Connector Hub では特にフィルタリングせず、OCI LogAnalytics に取り込んでいます。
実際のダッシュボードですが、以下公式ドキュメントのものが非常にまとまっているため、こちらを使うようにしています。

Log Analyticsのストレージ容量は10GBを超えると課金が発生するため、該当容量を超えないこと

OCI Monitoring → Alarm → OCI Notifications (Functions) の構成 を取っています。
OCI LogAnalytics のアクティブストレージサイズは ActiveStorageUsed メトリクスとして確認ができます。
LogAnalytics 側のパージポリシーを使って定期的にアクティブストレージを削除できますが、cron 式でありストレージサイズに応じた処理はできないため採用していません。
メトリクスにアラームを設定し、OCI Notifications を使ってパージする Functions を呼び出しています。


おわりに

本記事では、OCI WAF ポリシーの運用管理環境を整備してみました。
少し限定的な部分もありますが、こちらを参考に拡張してもらえると。


🌟この記事が誰かの役に立てば幸いです!
また、ご質問やフィードバックもお待ちしています。


参考資料

リファレンス

ブログ

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?