2026年9月30日 · 5分で読めます
Cloudflare R2バケットを公開する方法
R2バケットはデフォルトで非公開です。バケットに公開アドレスを明示的に設定するまで、署名付きのAPIリクエストなしにファイルを読み取ることはできません。公開する方法は2つあり、併用もできます。
方法1:独自ドメインを接続する(推奨)
独自ドメインを使うと、バケットがCloudflareのネットワーク経由でキャッシュ付きで配信され、あとからWAFルールやCloudflare Accessも使えます。ドメインは、バケットと同じCloudflareアカウントのゾーンである必要があります(フルセットアップでも、CNAMEによる部分セットアップでも構いません)。
- CloudflareのダッシュボードでR2 Object Storageを開き、バケットを選択します。
- Settingsを開いてCustom Domainsを探し、Addを選択します。
files.example.comのようなサブドメインを入力し、Continueを選択します。- 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管理のアドレスをバケットに割り当ててくれます。
- バケットのSettingsを開きます。
- Public Development URLでEnableを選択します。
- 確認のため
allowと入力し、Allowを選択します。
これでバケットにhttps://pub-<id>.r2.dev/<key>でアクセスできるようになります。このURLにはCloudflareのレート制限がかかり、開発用とされているので、リンクを広く共有する前に独自ドメインに切り替えてください。r2.devのアドレスに自分のCNAMEを向ける使い方はサポートされていません。
公開アクセスで公開されるもの、されないもの
- 読み取りのみ。公開アクセスで許可されるのは、キーを知っているオブジェクトの読み取りだけです。アップロードや削除には引き続きAPIの認証情報が必要です。
- ディレクトリ一覧は表示されない。ドメインのルートにアクセスしても、バケットの中身は一覧表示されません。オブジェクト名をランダムにしておけば、リンクは推測されにくくなります。
- バケット内のすべてが対象。アクセスはフォルダ単位ではなくバケット単位です。非公開のファイルは別のバケットに置きましょう。
- キャッシュ。デフォルトでは、Cloudflareがキャッシュするのは特定の拡張子のファイルだけです。すべてのファイル形式をキャッシュしたい場合は、キャッシュルールを追加してください。
R2のリンクでAccess Deniedが出るときの対処法
リンクがAccess Denied、401、403を返す場合は、次の順に確認してください。
- リンクが
<account-id>.r2.cloudflarestorage.comではなく、独自ドメインまたはr2.devのURLになっているか。このホストはS3 APIで、常に署名が必要です。 - 独自ドメインがActiveと表示され、バケットの設定でバケットへのアクセスがAllowedになっているか。
- URL内のキーが、フォルダや大文字・小文字も含めてオブジェクトと完全に一致しているか。
よくある質問
R2バケットを公開しても安全ですか?
共有するつもりのファイルなら安全です。リンクを知っている人はそのファイルを読み取れますが、バケットの一覧表示、アップロード、削除はできません。非公開のデータは別のバケットに置きましょう。
R2バケットを公開すると費用は増えますか?
いいえ。R2は転送量(egress)に課金しないので、公開ダウンロードで帯域幅の費用が増えることはありません。読み取りはClass B操作としてカウントされ、毎月の無料枠があります。
1つのフォルダだけを公開できますか?
R2の公開アクセスはバケット全体に適用されるため、できません。別のバケットを使うか、バケットを非公開のままにして署名付きURLを共有してください。