Предварительно подписанные 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.