使用角色而不是密钥来获取 s3 中的签名 url,但没有返回任何内容,也没有错误

Tsu*_*una 4 amazon-s3 bucket amazon-web-services pre-signed-url

我尝试过,如果我使用访问密钥,它工作正常,但我试图获取访问密钥并使用角色,但是一旦我获取访问密钥。我得到的回报是www.aws.amazon.com

    const AWS = require('aws-sdk');
    const s3 = new AWS.S3();
    const params = {Bucket: config.bucket, Expires: config.time, Key};
    const url = s3.getSignedUrl('getObject', params);
    console.log('The URL is', url);
Run Code Online (Sandbox Code Playgroud)

我什至通过进入我的 ec2 并运行 cli 命令来确保我的角色设置正确,aws s3 presign s3://bucket/path/file该命令工作正常,我得到了签名的 url 作为回报,所以这意味着我的角色是正确的,不是吗?

预先感谢您的任何建议/帮助。

Mic*_*bot 7

getSignedUrl()使用 IAM 角色时无法同步使用。

注意:如果您同步调用此方法(不带回调),则必须确保您具有静态或先前解析的凭据,否则可能无法正确签署请求。如果您不能保证这一点(您正在使用异步凭证提供程序,即 EC2 IAM 角色),则应始终使用异步回调来调用此方法。

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property

s3.getSignedUrl('getObject', params, function (err, url) {
  console.log('The URL is', url);
});
Run Code Online (Sandbox Code Playgroud)