S3のライフサイクルルールの設定

# :raised_hand: 前置き
本編ではないので読み飛ばしちゃって大丈夫です。
## :smile: 使用しているWAFサービス
現在の案件ではWAFとして[WafCharm](https://go.wafcharm.com/wc/cpc/lp_202306/?ref_type=wc_gsn&utm_source=google&utm_medium=cpc&utm_campaign=wc_site-top)という製品を使っていて、
毎月のレポートでサービスへの攻撃状況を把握しています。
WafCharmはメールでサポートに連絡すると割とすぐに返信があるのでサポートもしっかりとしている印象。

## :fearful: 問題点
ただ、月次のレポートでは、
「攻撃が多いIPアドレス」「攻撃が多い国」「ヒットしたBlockルール」のTOP10はわかるが、
そこから「攻撃が多かったIPアドレスがどんなBlockルールにヒットしたのか」
などはWafCharm上では解析出来ないのが私としては少し残念なところ。

どうしたらレポートの詳細がわかるのかとサポート様に確認したところ、
詳細はAWS WAFのWAFログを見れば良いということだった。

そこでS3に貯めていたWAFログをAthenaで確認しようと思ったら、
Glacierに移行する期間を30日間に設定していたため、
先月分のログを確認しようと思ったら月初のログの確認ができなかった。
:point_up:というわけで、WAFログをGlacierに移行するまでの期間を60日に伸ばすことにしました。

# :spy: 本編(S3の設定)
## :writing_hand: バケットのライフサイクルルールの変更
設定の変更は私のように調べながら対応したエンジニアでも簡単だったが、
注意点もあったので設定方法を記載しながら触れていきます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201542/a0b73455-cda1-4ed9-5005-00b43840a5b9.png)
まずは、S3の画面で対象のバケットを選んで管理タブをクリックし、
対象のライフサイクルルールを選択して編集ボタンをクリック。
（新たに作る場合は「ライフサイクルルールを作成する」ですね）

## :writing_hand: ルールのスコープ
注意点の一つとしてスコープがあります。
ライフサイクルルールは複数設定できるので、
バケット内のログの種類ごとにルールを設定出来ますが、
「すべてのオブジェクトに適用]というルールを作成しているとルール同士が競合することもあります。

その場合、一応決まりはあるので挙動の予想は出来ますが、
実際どれが有効になっているかは動かしてみないとわからないです。

:ear_tone2:参考)
[例 5: 重複するフィルター、競合するライフサイクルアクション、Amazon S3 がバージョン管理されていないバケットに対して行うこと](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/lifecycle-configuration-examples.html#lifecycle-config-conceptual-ex5)
>一般的に、S3 ライフサイクルはコストに合わせて最適化されます。たとえば、2 つの有効期限ポリシーが重複している場合は、短い有効期限ポリシーが適用されるため、データが予想よりも長く保存されることはありません。

### :writing_hand: すべてのオブジェクトに適用
![2_全てに適用される.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201542/fdac5bce-67de-fc47-a209-5dccb2790dea.png)
↑ちゃんと注意書きも出るので親切ですね。
### :writing_hand: フィルターを使用してスコープを制限
私は特定のフォルダ配下のログのみに適用したいので、
![3_2_オブジェクト.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201542/fdc8baa7-cbb2-82a5-3384-8e1332b4f5a8.png)
下記のようにプレフィックスを指定しました。
![3_プレフィックス指定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201542/d5ff1af2-7988-9a08-6e29-1eef9ab82205.png)
ここでの注意点としては、
プレフィックスの最後に「/」を付けないとうまく動かないようですので忘れずに付けてください。
:v_tone2:[例を見れば](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/lifecycle-configuration-examples.html#lifecycle-config-ex1)わかったのですが私は付け忘れました。。

## :writing_hand: オブジェクトサイズ
こちらは指定しなくても問題ないと思いますが、
小さいオブジェクトをGlaicerに移行すると不要なコストが発生するようなので設定しました。
![4_オブジェクトサイズ指定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201542/c9b0d4fb-8ade-f52c-5f6f-a4395297dcf7.png)
なぜ40KBに設定したかというと、
下記のリンク先にGlacierに移行する際にS3に8KB+32KBのメタデータを作成すると記載があったので、
40KB以下のファイルだと
「40KBのメタデータ +  Glacierのファイル」でむしろGlacierにした方がコスト高いじゃん」
と思い設定しました。（理解が間違えていたら教えて欲しいです）

:ear_tone2:参考)
[Amazon S3 ライフサイクルオブジェクトを Amazon S3 Glacier に移行する方法と Amazon S3 Glacier アーカイブを管理する方法の比較](https://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/backup-recovery/amazon-s3-glacier.html)
>S3 Glacier または S3 Glacier Deep Archive にアーカイブするオブジェクトごとに、Amazon S3 ではオブジェクト名やその他のメタデータに 8 KB のストレージを使用します。

>また、Amazon S3 Glacier または S3 Glacier Deep Archive ストレージクラスにアーカイブされたオブジェクトごとに、インデックスおよび関連するメタデータ用に 32 KB のストレージが追加されています。

ちなみにここら辺の内容は、
Glacierに移行する期間を設定するエリアでも注意書きがありました。（後述）
## :writing_hand: Glacierに移行するまでの期間を設定
私の場合はここの日数が30日だったので、今回は60日に変更しました。
![5_Glacierに移行.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201542/1a7759dd-9424-e5e9-3292-7455a0027ddb.png)
小さいオブジェクトをGlacierにするとコストが増えるかもよ、と注意書きがありますね。
## :writing_hand: 削除期限の設定
最後にオブジェクト作成後の日数というところで、Glacierからも削除する期限を設定します。
![6_最後の確認.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201542/185d3b98-fd88-6127-87d3-76f4d9a7d119.png)
ちなみに有効期限ですが90日間より短い場合は料金が発生するようです。
私はとりあえず変更なしのままとしました。(例でキャプチャした値が365ではない謎:rolling_eyes:)

:ear_tone2:参考)
[最小ストレージ期間料金](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/lifecycle-expire-general-considerations.html)
>S3 Glacier ストレージにあった期間が 90 日未満のオブジェクトを失効させるライフサイクル有効期限ルールを作成すると、90 日間の料金が発生します。

[コストに関する考慮事項](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/lifecycle-transition-general-considerations.html)
>Amazon S3 Glacier にアーカイブされているデータの削除は、削除するオブジェクトが最小ストレージ期間より長い期間アーカイブされている場合は無料です。

## :writing_hand: 動作確認
後は翌日になってルール通り動いているかを確認するだけです。
40KBのルールでGlacierになってない？など確認誤りに気をつけてください。
（ルール通りなのにここで悩んだりしていました、、愚か）

# :raised_hand_tone3: 終わり
後は来月、再来月のWafCharmレポートを見て、
ログの分析をするだけです。

まだ気づいていない設定ミスなどもあると思いますので、
何かあれば追記します。