ALB で WAF のフェイルオープン設定が可能になりました

AWS WAFに起因する問題により、ALB が HTTP 500エラー応答を戻す事象を回避する設定が可能になりました。
2020.11.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWSチームのすずきです。

AWS WAF による保護を有効とした Application Load Balancers (ALB) で WAF のフェイルオープンを有効化する設定が可能になりました。

その設定を試す機会がありましたので、紹介させていただきます。

設定

ロードバランサー属性の編集として「WAFのフェイルオープンの有効化」が指定可能になりました。

CloudFormation でも「waf.fail_open.enabled」の指定が可能になりました。

  LoadBalancer:
    Type: AWS::ElasticLoadBalancingV2::LoadBalancer
    Properties:
      LoadBalancerAttributes:
        - Key: waf.fail_open.enabled
          Value: true

まとめ

AWS WAF による保護を有効とした ELB(ALB)で、WAF に起因する問題が発生した場合 HTTP 500 エラー応答を戻る事がありました。

  • HTTP 500 ログ抜粋
{
  "timestamp": "2019-08-23T05:53:50.767192Z",
  "elb_status_code": "500",
  "actions_executed": "waf-failed"
}

平時 AWS WAF をカウントモード IDS(不正侵入検知) 相当として利用する環境や、 ブロック指定したルールに該当するリクエストが素通りする事があっても致命的な問題とならない環境で、 HTTP 500 エラー (waf-failed) の 抑制を必要とする場合、WAF のフェイルオープン設定の有効化をお試しください。

参考リンク

  • AWS Documentationより

Application Load Balancers and AWS WAF

Application Load Balancers and AWS WAF By default, if the load balancer cannot get a response from AWS WAF, it returns an HTTP 500 error and does not forward the request. If you need your load balancer to forward requests to targets even if it is unable to contact AWS WAF, you can enable the WAF fail open attribute.

Application Load Balancer のトラブルシューティング

HTTP 500: Internal server error AWS WAF のウェブアクセスコントロールリスト (ウェブ ACL) を設定し、ウェブ ACL ルールの実行でエラーが発生しました。