Я использую Amazon Node.js aws-sdk
для создания устаревших предварительно подписанных URL-адресов S3 для загрузки цифровых продуктов и борюсь с результатом. У меня успешно настроен SDK с моими ключами, и я попытался использовать синхронный подход (не показан) и асин c (показан) при сборе подписанных URL-адресов. Звонки работают, я никогда не сталкиваюсь с ошибками, и мне успешно возвращают подписанные URL-адреса. Вот поворот: URL-адреса, которые я получаю, не работают.
const promises = skus.map(function(sku) {
const key = productKeys[sku];
return new Promise((resolve, reject) => {
s3.getSignedUrl('getObject', {
Bucket: 'my-products',
Key: key,
Expires: 60 * 60 * 24, // Time in seconds; 24 hours
}, function(err, res) {
if (err) {
reject(err);
} else {
resolve({
text: productNames[sku],
url: res,
});
}
});;
});
});
Я предположил, что это было ошибкой с назначенными мне ключами, которые я назначил Пользователю IAM с полным баком S3 доступ. Итак, я попытался использовать пару ключей уровня root, и я получил тот же результат отказа в доступе. Интересно: URL-адреса, которые я получаю, принимают форму https://my-bucket.s3.amazonaws.com/Path/To/My/Product.zip?AWSAccessKeyId=blahblahMyKey&Expires=43914919&Signature=blahblahmysig&x-amz-security-token=hugelongstring
. Я не видел эту x-amz-security-token
вещь раньше, и если я пытаюсь просто удалить этот параметр запроса, я получаю Access Denied, но по другой причине: AWSAccessKeyId - это тот, который не связан ни с одной из моих учетных записей. Это не тот, с которым я настроил SDK, и это не тот, который я выделил на своей учетной записи S3. Понятия не имею, откуда это происходит, и понятия не имею, как это относится к параметру x-amz-security-token
.
В любом случае, я в тупике. Я просто хочу рабочий предварительно подписанный URL-адрес ... что дает? Спасибо за вашу помощь.