AWS / Node.js S3 Подписанный URL запрещен - PullRequest
1 голос
/ 05 апреля 2020

Я использую 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-адрес ... что дает? Спасибо за вашу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...