2026年9月30日 · 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=…

署名は自分のパソコン上で行われます。誰かがリンクを開くまでプロバイダには何も送信されず、URLのどこかを変更すると署名は無効になります。

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日間。署名バージョン4で指定できるのは最大604,800秒で、S3でもR2でも同じです。
  • 一時的な認証情報では早く切れる。STSやSSOのセッションで署名したURLは、より長い期間を指定していても、そのセッションが切れた時点で使えなくなります。
  • R2ではAPIドメインが必要。R2の署名付きURLは<ACCOUNT_ID>.r2.cloudflarestorage.comで動作し、独自ドメインでは使えません。
  • リンクを知っていれば誰でも使える。期限が切れるまでは、パスワードと同じように扱ってください。
  • リンク単位では無効にできない。期限前にリンクを無効にするには、オブジェクトを削除するか名前を変えるか、署名に使ったアクセスキーを無効化します。

署名付きURLと公開バケット、どちらを使う?

見てもらうことが前提で、ずっと使えるべきファイルには公開バケットを使いましょう。ドキュメント内のスクリーンショットやREADMEの画像などです。機密性の高いものや短期間だけ共有するものには署名付きURLを使います。両方のバケットを1つずつ用意し、ファイルごとに使い分けている人も多くいます。

よくある質問

署名付きURLを7日より長く有効にできますか?

S3やR2が使う署名バージョン4ではできません。より長くアクセスできるようにするには、ファイルを公開するか、古いリンクの期限が切れたときに新しいリンクを作成してください。

署名付きURLでSignatureDoesNotMatchが返るのはなぜですか?

多くの場合、署名したあとにURLが変更されています。たとえばメールクライアントによる書き換えや、ホストを独自ドメインに差し替えた場合です。リージョンとエンドポイントの設定もバケットと一致している必要があります。

署名付きURLはBackblaze B2やMinIOでも使えますか?

はい。どちらもS3互換APIを通じて、署名バージョン4の署名付きURLに対応しています。