Repository navigation
0.45.0
·
22 commits
to dev
since this release
Added
[cloudfront.<name>.waf]にrate_limitsを追加しました。送信元 IP ごとのレートリミット
(AWS WAF の rate-based rule)を{ limit, window_sec, path, action }の配列で宣言すると、
WebACL の全ルールの先頭に付きます。allow_rulesの秘密ヘッダを持つ呼び手や IP allowlist 済みの
IP も超過すれば止まります(blockは 429 を返し、countは記録だけします)。
enable_ip_set = falseの必須条件にaction = "block"のrate_limitsも数えるようにしたので、
「IP allowlist 無し + レートリミットだけ」の WebACL も宣言できますpocket waf ratelimit list --name <cf> --stage <stage>が、deploy 済みの rate rule ごとにレート超過として
追跡中の IP(WAF の managed keys)を表示します。WAF 側の反映は数分〜十数分遅れます
Changed
allow_rules/rate_limitsのpathに使える文字を RFC 3986 の path 文字("と\を除く)に
制限し、*を除いた長さを 200 bytes 以内(WAF の ByteMatch SearchString の上限)に制限しました。
CloudFormation template への埋め込みを安全にし、deploy 時に失敗する宣言を手前で止めるためで、
通常の URL path には影響しませんallow_rules/rate_limitsのpathの比較を URL デコード後に行うようにしました(WAF の
TextTransformationURL_DECODE)。従来は/%61pi/auth/loginのようにエンコードした path が
/api/auth/*に一致せず、backend 側は同じ処理に到達するためレートリミットを迂回できました。
allow_rulesではエンコードした同等 path も allow の対象になります(backend の解釈と揃う方向)- WAF の CloudFormation template のコメントを更新したため、
[cloudfront.<name>.waf]を使っている既存の
stack は次回 deploy で一度 update されます(ルールの内容は変わりません) - 0.29.0 の multi-container 移行で deploy が削除する旧形式の container stack(
{slug}-container)について、
削除の完了を待つようにしました(最大 5 分)。CloudFormation 側の一過性エラーでDELETE_FAILEDに
なった場合は、失敗したリソースと理由、再実行コマンドを表示します(deploy 自体は成功のまま終わります)。
従来は削除を開始するだけで終わっていたため、失敗に気付けませんでした。DELETE_FAILEDのまま残った
旧 stack は次回 deploy でも理由付きで再検出し、削除を再実行できます
Documentation
- 宣言から外したまま残した 0.36 以前の backup plan は旧 vault を参照し続け、
pocket cleanup-deprecatedが
中止する旨と対処(plan / selection を手で削除してから再実行)を設定ガイドに追記しました