Подписание S3 URL с будущим сроком действия и датой начала - PullRequest
0 голосов
/ 25 марта 2019

Мы можем подписать URL для S3, используя JS SDK, и установить срок действия:

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

Можем ли мы также установить дату, когда подписанный запрос будет действительным?

Предположим, я хочу подписать URL-адрес таким образом, чтобы он не действовал до завтра, а затем будет действителен в течение одного дня.Как бы я это сделал?Предпочтительно с JS SDK.

1 Ответ

1 голос
/ 26 марта 2019

Предварительно подписанные URL-адреса S3 не предоставляют эту функцию напрямую.

CloudFront действительно поддерживает это, если вы используете вместо подписи CloudFront подписанный URL с пользовательской политикой .

Вы можете создать дистрибутив CloudFront и подключить его к корзине с помощью Origin Access Identity, которая позволяет CloudFront аутентифицировать себя для доступа к корзине, а затем «Ограничить доступ зрителя» в дистрибутиве CloudFront, чтобы CloudFront разрешал только доступ когда предоставляется действительный подписанный URL-адрес CloudFront. Подписанные URL-адреса CloudFront требуют даты «не после», но также поддерживают дату «не до».

Вам нужно будет использовать CloudFront.Signer.getSignedUrl(), но не предоставляет опции url или expires. Передайте только вариант policy.

policy - это строка JSON, содержащая значения для Resource, DateLessThan (срок действия) и DateGreaterThan (до этого доступ к URL будет запрещен). При желании вы можете передать IpAddress, чтобы ограничить использование этого URL-адреса одним IPv4-адресом или блоком. Ограничение на основе IPv6 не поддерживается.

Это немного сложная операция, но см. эти примеры политик для ожидаемого формата. Пробелы, показанные в примерах, не нужно включать в документ политики.

Вам не нужно следовать инструкциям для фактической подписи и экранирования URL-адреса, потому что SDK обрабатывает эту часть для вас ... но вам нужно будет создать политику JSON.

...