используя роль вместо ключей, чтобы получить подписанный URL в s3, но ничего не возвращалось и никаких ошибок - PullRequest
0 голосов
/ 04 декабря 2018

Я пытался использовать ключ доступа, он работает нормально, но я пытаюсь получить ключ доступа и вместо этого использовать роль, но как только я получаю ключ доступа.я получаю взамен 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);

Я даже убедился, что моя роль настроена правильно, зайдя в мой ec2 и выполнив команду cli aws s3 presign s3://bucket/path/file, которая работает нормально, я получаю взамен подписанный URLхотя это значит, что моя роль верна, не так ли?

Заранее спасибо за любой совет / помощь.

1 Ответ

0 голосов
/ 04 декабря 2018

Нельзя использовать getSignedUrl() синхронно при использовании ролей IAM.

Примечание. Необходимо убедиться в наличии статических или ранее разрешенных учетных данных, если вы вызываете этот метод синхронно (без обратного вызова)в противном случае он может не правильно подписать запрос.Если вы не можете гарантировать это (вы используете асинхронный поставщик учетных данных, то есть роли IAM EC2), вы всегда должны вызывать этот метод с асинхронным обратным вызовом.

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);
});
...