2 Answers
Hmm this is a bit of a tough one – on one hand, you are correct – if we look at the best practices for DDOS mitigation, putting an ELB in the data path is the right thing to do.
However this question adds two modifiers to take into consideration – the fact that you only want to protect against TCP Syn Flood, and the fact that we are looking for the lowest cost option to protect against those TCP Syn Flood attacks. Taking those into consideration option 3 is the correct choice, as by default, AWS provides free protection from TCP Syn Flood attacks on any incoming traffic.
If we were looking to protect against other types of attacks, or if we were looking for the "best" or "most secure" solution, option 1 would be the correct choice.
At its core, this question is making sure you understand that AWS does provide some level of protection of your services for "free". This is found in the FAQs section for AWS Shield:
https://aws.amazon.com/shield/faqs/
What we might do is include a bit more of a detailed explanation:
"AWS Shield Standard is offered to all AWS customers automatically at no charge and will protect against TCP Syn Flood attacks without you having to do anything – this meet’s the question’s requirements of protecting TCP Syn Flood attacks at the lowest cost possible. A more robust solution which is better aligned to best practice would involve a load balancer in the data path, however as this would provide more functionality than required at a higher cost, is not the correct option for this question."
https://docs.aws.amazon.com/waf/latest/developerguide/ddos-overview.html#ddos-help-me-choose
This lists SYN flood mitigation as a feature of AWS Shield Standard. It also recommends CloudFront and Route 53 to get an extra benefit from this type of attack.