ALB から Cognito へのアクセス時、WAF によってブロックされてしまうときの対処方法を教えてください。
困っていた内容
CognitoにアタッチしているWAFにてホワイトリストを作成し、IP一致ルールステートメントでIP制限をしていますが、ALBからCognitoへの通信でリクエストがブロックされてしまいます。ルールの「IP address to use as the originating address」設定をSource IP addressからIP address in headerに変更し、リクエストヘッダー内のX-Forwarded-Forを参照してクライアント元のIPアドレスの検査を行いましたが、状況は変わらず、通信がブロックされてしまいます。IP制限をしつつ、通信をブロックされないようにするにはどうすれば良いでしょうか。
具体的な解決策
ALBからCognitoへのアクセスではX-Forwarded-ForヘッダーにクライアントのIPアドレスは記録されず、ALBが使用するIPアドレスが記録されます。そのため、WAF WebACLにてX-Forwarded-Forヘッダーの値がクライアントの送信元IPアドレスとなる場合に許可するようIP一致ルールステートメントを設定しても、当該のアクセスを許可することはできません。該当のIPセット一致ルールステートメントにおけるIPセットでは、ALBが使用するIPアドレス範囲についても許可を行う必要があります。
ALBが使用するIPアドレスはスケーリングの発生、ノードに問題が発生した場合などに変更されるため、ALBが使用するIPアドレス範囲について許可を行う場合は、IPセットにてAWSで使用されるIPアドレスの範囲から、使用されるリージョンのALBのIPアドレスをすべて許可してください。
当該リージョンにおけるサービスが "AMAZON" のIPアドレスを取得するコマンドは以下の通りです。
jq -r '.prefixes[] | select(.region=="当該のリージョン") | select(.service=="AMAZON") | .ip_prefix' < ip-ranges.json
※AWS の IP アドレス範囲につきましては変更される可能性があるため、変更通知用の SNS トピックをサブスクライプして、適宜 IP セットを更新することを検討ください。