30 września 2026 · 5 min czytania

Jak udostępniać prywatne pliki z S3 i R2 przez presigned URL

Nie każdy plik powinien leżeć w publicznym buckecie. Umowy, faktury czy niewydane buildy mogą pozostać prywatne, a mimo to dać się udostępnić linkiem, który działa tylko przez ograniczony czas.

Jak działają presigned URL

URL zawiera wszystko, czego S3 potrzebuje do sprawdzenia żądania: klucz, którym go podpisano, czas podpisania, okres ważności i podpis. Wygląda tak:

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=…

Podpisywanie odbywa się na Twoim komputerze. Do dostawcy nic nie trafia, dopóki ktoś nie otworzy linku, a zmiana dowolnej jego części unieważnia podpis.

Utwórz go w AWS CLI

aws s3 presign s3://your-bucket/contract.pdf --expires-in 86400

Ten link działa przez 24 godziny. Dla Cloudflare R2 lub innej usługi zgodnej z S3 wskaż w CLI jej endpoint:

aws s3 presign s3://your-bucket/contract.pdf --expires-in 86400 \
  --endpoint-url https://<ACCOUNT_ID>.r2.cloudflarestorage.com

Ograniczenia, o których warto wiedzieć

  • Maksymalnie 7 dni. Signature Version 4 pozwala na maksymalnie 604 800 sekund, zarówno w S3, jak i w R2.
  • Tymczasowe dane uwierzytelniające kończą się wcześniej. URL podpisany sesją STS lub SSO przestaje działać, gdy ta sesja wygaśnie, nawet jeśli prosiłeś o dłuższy czas.
  • R2 wymaga domeny API. Presigned URL w R2 działają z <ACCOUNT_ID>.r2.cloudflarestorage.com, a nie z własną domeną.
  • Każdy, kto ma link, może go użyć. Traktuj go jak hasło, dopóki nie wygaśnie.
  • Nie da się unieważnić pojedynczego linku. Aby wcześniej odciąć dostęp, usuń obiekt lub zmień jego nazwę albo dezaktywuj klucz dostępu, którym go podpisano.

Presigned URL czy publiczny bucket?

Używaj publicznego bucketu dla plików, które mają być widoczne i działać bez końca: zrzutów ekranu w dokumentacji, obrazów w README. Presigned URL używaj do wszystkiego, co wrażliwe lub krótkotrwałe. Wiele osób trzyma po jednym buckecie każdego rodzaju i wybiera dla każdego pliku.

Częste pytania

Czy presigned URL może być ważny dłużej niż 7 dni?

Nie z Signature Version 4, z której korzystają S3 i R2. Dla dłuższego dostępu upublicznij plik albo wygeneruj nowy link, gdy stary wygaśnie.

Dlaczego mój presigned URL zwraca SignatureDoesNotMatch?

Zwykle URL został zmieniony po podpisaniu, np. przez klienta poczty albo przez zamianę hosta na własną domenę. Ustawienia regionu i endpointu też muszą pasować do bucketu.

Czy presigned URL działają z Backblaze B2 i MinIO?

Tak. Oba obsługują presigned URL z Signature Version 4 przez swoje API zgodne z S3.