The app servers were dropped in a public subnet for one reason: they need outbound internet access to pull packages and patches. But that also leaves them exposed.
Do it the right way: keep the ALB public, move the app servers to a private subnet (reachable only from the ALB), and add a NAT gateway so they can still reach out for updates without accepting any inbound traffic.