S3 is the fit whenever the data is whole files read over HTTP and the volume is open-ended: capacity is not something you provision, and objects can be served publicly or through CloudFront without a server in front. EBS volumes attach to one instance and must be sized in advance, EFS is for applications that need a POSIX file system rather than for public delivery, and instance store disks vanish with the instance.
Official docs