LoginSignup
9
3

AWSのALBで用意されているデフォルトのWAFを設定したら大きめのファイルをアップロードできなくなった時の対処方

Last updated at Posted at 2024-06-10

結論

単純に大容量ファイルをアップロードできるようにする場合は
AWS-AWSManagedRulesCommonRuleSetに設定されているSizeRestrictions_BODYOverride to Countにする。(これで大容量ファイルを上げ放題になる)
特定のパスでのみ許可したい場合は
以下二つのルールを追加する。
①特定のパスへのアクセスを許可
②8KBリクエストボディを超えるアクセスをブロック
ルールのPriorityをデフォルトで設定されているものの下に上記①、②の順で設定する。

原因

先に結論から言うと
AWS-AWSManagedRulesCommonRuleSetに設定されているSizeRestrictions_BODYがアクセスをブロックしている
ということです。
ALB作成時にAWS Web Application Firewall(WAF)事前定義済みのウェブACLを自動生成を選択して作成するとWeb ACL(アクセスコントロールリスト)が作成され、その中に3つのルールがデフォルトで用意されます。
そのルールの一つ、AWS-AWSManagedRulesCommonRuleSetSizeRestrictions_BODYが設定されており、8KBを超えるリクエストボディを検知すると通信をブロックするという内容になっています。

とにかく大きいファイルをアップロードできるようにしたい場合

AWS-AWSManagedRulesCommonRuleSetに設定されているSizeRestrictions_BODYOverride to Countにすることでファイルアップロードできるようになります。
Override to Allowにしてしまうとこの条件に一致した時点でアクセスを許可してしまい、このルールよりも優先度が低いルールのフィルタをすり抜けてしまうので、アクセス数を数えるだけのCountにしておきます。
しかし、この設定は大容量ファイルをリクエストボディに設定しアクセスされることでサーバーに高負荷がかかることを許すことになります。

特定の操作でのみ大型ファイルアップロードのアクセスを許したい場合

上記では大容量ファイルを誰でもどのパスでも上げ放題になってしまいます。
私なりに2つの方法でこの上げ放題を抑制する方法を考えました。
どの方法もとにかく大きいファイルをアップロードできるようにしたい場合の内容を設定していることが前提です。

特定のIPアドレスからのアクセスの場合に許可する

ファイルのアップロード機能がサービスの管理ページにのみあるのであれば管理者が大容量ファイルをアップロードすることになるので管理者が特定のIPからのみ操作する場合にこの手法が利用できます。
設定手順は以下です。(UI変更などが多発するため詳細は割愛)
①対象のIPアドレスのIP setを作成
②対象のWeb ACLIP setを利用して対象のIPからのアクセスを許可するルールを追加
③追加したルールの優先度を最上位にする
これで特定のIPアドレスからのアクセスの場合のみファイルをアップロードできるようになりました。

特定のURLのみ許可する

特定のURLを利用したファイルアップロードのみ大容量ファイルアップロードアクセスを許可する設定ができます。
設定手順は以下です。(UI変更などが多発するため詳細は割愛)
①対象のWeb ACLRule Builderを利用し、URI pathが対象のURLに正規表現でマッチする場合に許可するルールを追加
②対象のWeb ACLRule Builderを利用し、Bodyが8KB以上の場合にブロックするルールを追加する
③上記で追加したルールのPriorityをデフォルトで設定されているものの下に①、②の順で設定する
これで特定のURLでのみ大容量ファイルをアップロードできるようになりました。
デフォルトのSizeRestrictions_BODYが機能しなくなっているので手順③でサイズを確認するフィルタを自前で作成しています。
③のルールでブロックされる前に②のルールでアクセスを許可するようにしています。

参考

9
3
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
9
3