30 September 2026 · 5 menit membaca

Cara membagikan file pribadi S3 dan R2 dengan presigned URL

Tidak semua file harus berada di bucket publik. Kontrak, faktur, atau build yang belum dirilis bisa tetap pribadi namun tetap bisa dibagikan, dengan tautan yang hanya berfungsi untuk waktu terbatas.

Cara kerja presigned URL

URL ini berisi semua yang dibutuhkan S3 untuk memeriksa permintaan: kunci yang dipakai untuk menandatanganinya, kapan ditandatangani, berapa lama berlaku, dan tanda tangannya. Bentuknya seperti ini:

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

Penandatanganan terjadi di komputer Anda. Tidak ada yang dikirim ke penyedia sampai seseorang membuka tautannya, dan mengubah bagian mana pun akan merusak tanda tangannya.

Buat dengan AWS CLI

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

Tautan itu berlaku selama 24 jam. Untuk Cloudflare R2 atau layanan lain yang kompatibel dengan S3, arahkan CLI ke endpoint-nya:

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

Batasan yang perlu diketahui

  • Maksimal 7 hari. Signature Version 4 mengizinkan hingga 604.800 detik, baik di S3 maupun R2.
  • Kredensial sementara berakhir lebih cepat. URL yang ditandatangani dengan sesi STS atau SSO berhenti berfungsi saat sesi itu berakhir, meskipun Anda meminta durasi lebih lama.
  • R2 memerlukan domain API. Presigned URL di R2 berfungsi dengan <ACCOUNT_ID>.r2.cloudflarestorage.com, bukan dengan domain kustom.
  • Siapa pun yang punya tautannya bisa memakainya. Perlakukan seperti kata sandi sampai kedaluwarsa.
  • Tidak bisa dicabut per tautan. Untuk memutus tautan lebih awal, hapus atau ganti nama objeknya, atau nonaktifkan kunci akses yang menandatanganinya.

Presigned URL atau bucket publik?

Gunakan bucket publik untuk file yang memang untuk dilihat dan harus tetap berfungsi: jepretan layar di dokumentasi, gambar di README. Gunakan presigned URL untuk apa pun yang sensitif atau berumur pendek. Banyak orang punya satu bucket untuk masing-masing dan memilih per file.

Pertanyaan umum

Bisakah presigned URL berlaku lebih dari 7 hari?

Tidak dengan Signature Version 4, yang dipakai S3 dan R2. Untuk akses yang lebih lama, jadikan file publik atau buat tautan baru saat tautan lama kedaluwarsa.

Mengapa presigned URL saya menghasilkan SignatureDoesNotMatch?

Biasanya URL diubah setelah ditandatangani, misalnya oleh klien email atau karena host diganti ke domain kustom. Pengaturan wilayah dan endpoint juga harus sesuai dengan bucket.

Apakah presigned URL berfungsi dengan Backblaze B2 dan MinIO?

Ya. Keduanya mendukung presigned URL Signature Version 4 melalui API mereka yang kompatibel dengan S3.