AWS S3 предварительно подписанный URL без даты истечения срока действия

Есть ли способ, которым я могу генерировать предварительно подписанный URL-адрес без какой-либо даты истечения срока действия? Я разрабатываю приложение электронной почты, где мои вложения будут сохранены в S3. Также, пожалуйста, дайте мне знать, что является лучшим способом загрузки вложений через JavaScript SDK.

Я использую код ниже

var params = {Bucket: 'bucket', Key: 'key', Expires: 60};
var url = s3.getSignedUrl('getObject', params);
console.log('The URL is', url);

Ответ 1

Максимальное время истечения для назначенного url одна неделя со времени создания. Таким образом, нет возможности иметь назначенный URL без истечения срока действия.

Ответ 2

Это зависит от того, как вы генерируете предварительно подписанный URL-адрес S3. В частности, какую версию подписи вы используете и какой тип учетных данных IAM вы используете.

Учетные данные, которые можно использовать для создания предварительно подписанного URL-адреса, включают:

  • Профиль экземпляра IAM (временные, повернутые учетные данные): действителен до 6 часов
  • STS (временные учетные данные): действителен до 36 часов
  • Пользователь IAM (долгосрочные учетные данные): действителен до 7 дней при использовании подписи v4
  • Пользователь IAM (долгосрочные учетные данные): действителен до конца эпохи при использовании подписи v2

Обратите внимание:

  • подпись v2 потенциально устарела
  • срок действия подписи v2 отличается от подписи v4
  • подпись v4 предлагает некоторые преимущества безопасности и эффективности по сравнению с v2
  • если вы используете учетные данные STS для создания предварительно подписанного URL-адреса, то срок действия URL-адреса истечет по истечении срока действия учетных данных STS, если он предшествует явному истечению срока действия, который вы запросили для предварительно подписанного URL-адреса
  • создание предварительно подписанных URL-адресов, которые действительны до конца эпохи, не является лучшей практикой безопасности

Подробнее см.:

Ответ 3

Некоторым решением для вас может быть создание дистрибутива AWS CloudFront, который обслуживает вашу корзину S3 с ограниченным доступом только к идентификатору доступа к источнику распространения, а затем использование подписанных URL-адресов CloudFront. Какой срок годности может быть даже в годах. Поэтому для неограниченных или полуограниченных URL я бы рекомендовал такое решение.