30 вересня 2026 р. · 5 хв читання
Як ділитися приватними файлами S3 і R2 через підписані URL-адреси
Не кожному файлу місце в публічному бакеті. Договори, рахунки чи ще не випущені збірки можуть лишатися приватними, і ними все одно можна ділитися за посиланням, яке працює обмежений час.
Як працюють підписані URL-адреси
URL-адреса містить усе, що потрібно S3 для перевірки запиту: ключ, яким її підписано, час підпису, термін дії та сам підпис. Вона виглядає так:
https://your-bucket.s3.eu-central-1.amazonaws.com/contract.pdf
?X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=AKIA…/20260930/eu-central-1/s3/aws4_request
&X-Amz-Date=20260930T120000Z
&X-Amz-Expires=3600
&X-Amz-SignedHeaders=host
&X-Amz-Signature=…
Підписування відбувається на вашому комп’ютері. Провайдерові нічого не надсилається, доки хтось не відкриє посилання, а зміна будь-якої його частини робить підпис недійсним.
Як створити її через AWS CLI
aws s3 presign s3://your-bucket/contract.pdf --expires-in 86400
Це посилання діє 24 години. Для Cloudflare R2 чи іншого S3-сумісного сервісу вкажіть CLI його кінцеву точку:
aws s3 presign s3://your-bucket/contract.pdf --expires-in 86400 \
--endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.comОбмеження, про які варто знати
- Щонайбільше 7 днів. Signature Version 4 дозволяє до 604 800 секунд і в S3, і в R2.
- Тимчасові облікові дані закінчуються раніше. URL-адреса, підписана в сесії STS чи SSO, перестає працювати, коли спливає ця сесія, навіть якщо ви просили довший термін.
- R2 потрібен домен API. Підписані URL-адреси в R2 працюють із
<ACCOUNT_ID>.r2.cloudflarestorage.com, а не з власним доменом. - Скористатися посиланням може будь-хто, у кого воно є. Доки не сплив термін, ставтеся до нього як до пароля.
- Окреме посилання не можна відкликати. Щоб достроково вимкнути посилання, видаліть чи перейменуйте об’єкт або деактивуйте ключ доступу, яким його підписано.
Підписана URL-адреса чи публічний бакет?
Використовуйте публічний бакет для файлів, які мають бути на виду й працювати довго: знімків екрана в документації, зображень у README. Підписані URL-адреси використовуйте для всього чутливого чи короткочасного. Багато хто тримає по одному бакету кожного типу й вибирає для кожного файлу окремо.
Поширені запитання
Чи може підписана URL-адреса діяти довше за 7 днів?
Не з Signature Version 4, яку використовують S3 і R2. Для довшого доступу зробіть файл публічним або створіть нове посилання, коли спливе термін старого.
Чому моя підписана URL-адреса повертає SignatureDoesNotMatch?
Зазвичай URL-адресу змінили після підписування, наприклад поштовий клієнт або заміна хоста на власний домен. Параметри регіону й кінцевої точки також мають відповідати бакету.
Чи працюють підписані URL-адреси з Backblaze B2 і MinIO?
Так. Обидва підтримують підписані URL-адреси Signature Version 4 через свої S3-сумісні API.