Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WafCharm運用の ベストプラクティスを 考えてみた

WafCharm運用の ベストプラクティスを 考えてみた

WafCharm運用のベストプラクティスを考えてみた
iret tech-labo #11

Yutaka Hiroyama

July 28, 2021
Tweet

More Decks by Yutaka Hiroyama

Other Decks in Technology

Transcript

  1. about me • 廣⼭ 豊 • アイレット株式会社 クラウドインテグレーション事業部副事業部⻑ 兼 情報管理責任者

    兼 PCI DSS管理責任者 兼 Well Architected Lead • 2020, 2021 Japan APN AWS Ambassador, AWS Top Engineers • 組み込み開発SIer出⾝ • AWS * 8, GCP * 9, Azure * 1, 情報処理安全確保⽀援⼠、 その他多数の認定資格を保有
  2. about us • クラウド導⼊実績1,900社以上 • 年間プロジェクト2,600以上 • AWSプレミアコンサルティングパートナー8 年連続認定 •

    APN Consulting Partner of the year 2019 • GCPプレミアサービスパートナー認定 • クラウドのインフラ運⽤を主軸に、デザイン から開発までワンストップでサポート • 他拠点で運⽤
  3. 本⽇のテーマ • 汎⽤的な WafCharm(AWS WAF v2)運⽤ 本⽇話すこと • 個別要件に特化した運⽤ •

    個別機能に特化した詳細解説 本⽇話さないこと WafCharmおよびAWS WAFの運⽤についてのご案内。
  4. 異なるCOUNTのログ ⾃作のRuleでのログ • nonterminatingmatchingrules [{ruleid=my-rule01, action=COUNT}] • RulegroupList {rulegroupid=arn:aws:wafv2:us-east-1:XXXXXXXXXXXX:regional/rulegroup/<any-rules>/dafe994f-6a04-4426- 8dcf-9a23578669fd,

    terminatingrule=null, nonterminatingmatchingrules=[], excludedrules=null}, WafCharmのRuleでのログ • nonterminatingmatchingrules [] • RulegroupList {rulegroupid=arn:aws:wafv2:us-east- 1:XXXXXXXXXXXX:regional/rulegroup/WafCharm_Blacklist_Group_2132/dafe994f-6a04-4426-8dcf- 9a23578669fd, terminatingrule=null, nonterminatingmatchingrules=[], excludedrules=[{ruleid=wafcharm- blacklist-2132, exclusiontype=EXCLUDED_AS_COUNT}]},
  5. Athena WITH dataset AS (SELECT from_unixtime(timestamp/1000, 'Asia/Tokyo') AS JST, waf_logs.action

    AS Action, waf_logs.rulegrouplist AS RulegroupList, rulegroups AS rulegroups, waf_logs.httprequest.clientip AS ClientIP, waf_logs.httprequest.country AS Country, waf_logs.httprequest.httpmethod AS HttpMethod, waf_logs.httprequest.uri AS URI, waf_logs.terminatingruleid, waf_logs.responsecodesent AS Response, waf_logs.nonterminatingmatchingrules, waf_logs.httprequest FROM waf_logs, UNNEST(rulegrouplist) t(rulegroups) WHERE rulegroups.excludedrules is NOT null AND httpRequest.country = 'JP' AND from_unixtime(timestamp/1000) > now() - interval '3' day ) SELECT count(*) * 100.0 / (SELECT COUNT(*) FROM waf_logs WHERE from_unixtime(timestamp/1000) > now() - interval '3' day ) AS rate , excludedrules.ruleid AS ruleid FROM dataset, UNNEST(rulegroups.excludedrules) t(excludedrules) WHERE excludedrules.exclusiontype = 'EXCLUDED_AS_COUNT' GROUP BY excludedrules.ruleid ORDER BY rate DESC ;