2026年9月30日 · 5分で読めます

Cloudflare R2バケットを公開する方法

R2バケットはデフォルトで非公開です。バケットに公開アドレスを明示的に設定するまで、署名付きのAPIリクエストなしにファイルを読み取ることはできません。公開する方法は2つあり、併用もできます。

方法1:独自ドメインを接続する(推奨)

独自ドメインを使うと、バケットがCloudflareのネットワーク経由でキャッシュ付きで配信され、あとからWAFルールやCloudflare Accessも使えます。ドメインは、バケットと同じCloudflareアカウントのゾーンである必要があります(フルセットアップでも、CNAMEによる部分セットアップでも構いません)。

  1. CloudflareのダッシュボードでR2 Object Storageを開き、バケットを選択します。
  2. Settingsを開いてCustom Domainsを探し、Addを選択します。
  3. files.example.comのようなサブドメインを入力し、Continueを選択します。
  4. Cloudflareが作成するDNSレコードを確認し、Connect Domainを選択します。

数分でステータスがInitializingからActiveに変わります。以降、キーが2026/09/report.pdfのオブジェクトはhttps://files.example.com/2026/09/report.pdfで公開されます。

方法2:r2.devのPublic Development URLを有効にする

ちょっと試すだけなら、R2がCloudflare管理のアドレスをバケットに割り当ててくれます。

  1. バケットのSettingsを開きます。
  2. Public Development URLでEnableを選択します。
  3. 確認のためallowと入力し、Allowを選択します。

これでバケットにhttps://pub-<id>.r2.dev/<key>でアクセスできるようになります。このURLにはCloudflareのレート制限がかかり、開発用とされているので、リンクを広く共有する前に独自ドメインに切り替えてください。r2.devのアドレスに自分のCNAMEを向ける使い方はサポートされていません。

公開アクセスで公開されるもの、されないもの

  • 読み取りのみ。公開アクセスで許可されるのは、キーを知っているオブジェクトの読み取りだけです。アップロードや削除には引き続きAPIの認証情報が必要です。
  • ディレクトリ一覧は表示されない。ドメインのルートにアクセスしても、バケットの中身は一覧表示されません。オブジェクト名をランダムにしておけば、リンクは推測されにくくなります。
  • バケット内のすべてが対象。アクセスはフォルダ単位ではなくバケット単位です。非公開のファイルは別のバケットに置きましょう。
  • キャッシュ。デフォルトでは、Cloudflareがキャッシュするのは特定の拡張子のファイルだけです。すべてのファイル形式をキャッシュしたい場合は、キャッシュルールを追加してください。

R2のリンクでAccess Deniedが出るときの対処法

リンクがAccess Denied、401、403を返す場合は、次の順に確認してください。

  1. リンクが<account-id>.r2.cloudflarestorage.comではなく、独自ドメインまたはr2.devのURLになっているか。このホストはS3 APIで、常に署名が必要です。
  2. 独自ドメインがActiveと表示され、バケットの設定でバケットへのアクセスがAllowedになっているか。
  3. URL内のキーが、フォルダや大文字・小文字も含めてオブジェクトと完全に一致しているか。

よくある質問

R2バケットを公開しても安全ですか?

共有するつもりのファイルなら安全です。リンクを知っている人はそのファイルを読み取れますが、バケットの一覧表示、アップロード、削除はできません。非公開のデータは別のバケットに置きましょう。

R2バケットを公開すると費用は増えますか?

いいえ。R2は転送量(egress)に課金しないので、公開ダウンロードで帯域幅の費用が増えることはありません。読み取りはClass B操作としてカウントされ、毎月の無料枠があります。

1つのフォルダだけを公開できますか?

R2の公開アクセスはバケット全体に適用されるため、できません。別のバケットを使うか、バケットを非公開のままにして署名付きURLを共有してください。