Did you set up the right IAM role? You can try to see if your IAM user has the right permissions by using the AWS S3 CLI to see if you read and write files in the bucket.
To debug you could (temporarily !) grant the S3 Full Access role.
I tried to reproduce this, buy it works as expected, both when deployed in a sandbox, and locally from the modeler (with s3 configured).
The reproduction is on github: https://github.com/ako/ApiConnector/blob/master/javasource/apiconnector/impl/ApiConnectorHandler.java#L219
Start the app, create a product, add an image, and then retrieve it using the following api: http://localhost:8080/api/product/{EAN}/image/{ImageId}
I've seen the error you are getting, but only if the image doesn't exist. Please note that when you change from localfilestorage to s3, the image are automatically uploaded to s3. So you will be getting the error you mentioned if you try to download the image from s3, when in fact you uploaded it to the local file storage.