I solved this issue by adding apiVersion inside AWS.S3(), then it works perfectly for S3 signed url.
Change from
var s3 = new AWS.S3();
to
var s3 = new AWS.S3({apiVersion: '2006-03-01'});
For more detailed examples, can refer to this AWS Doc SDK Example: https://github.com/awsdocs/aws-doc-sdk-examples/blob/master/javascript/example_code/s3/s3_getsignedurl.js