30 сентября 2026 г. · 5 мин чтения
Как сделать бакет Cloudflare R2 публичным
Бакеты R2 по умолчанию приватные. Никто не может прочитать файл без подписанных запросов к API, пока вы явно не дадите бакету публичный адрес. Сделать это можно двумя способами, и их можно использовать одновременно.
Вариант 1: подключить собственный домен (рекомендуется)
Собственный домен отдает бакет через сеть Cloudflare с кэшированием и позволяет позже использовать правила WAF или Cloudflare Access. Домен должен быть зоной в том же аккаунте Cloudflare, что и бакет (подходит как полная настройка, так и частичная через CNAME).
- В панели Cloudflare перейдите в R2 Object Storage и выберите свой бакет.
- Откройте Settings, найдите Custom Domains и выберите Add.
- Введите поддомен, например
files.example.com, и выберите Continue. - Проверьте DNS-запись, которую создаст Cloudflare, и выберите Connect Domain.
Через несколько минут статус сменится с Initializing на Active. После этого объект с ключом 2026/09/report.pdf доступен по адресу https://files.example.com/2026/09/report.pdf.
Вариант 2: включить Public Development URL r2.dev
Для быстрой проверки R2 может выдать бакету адрес, которым управляет Cloudflare:
- Откройте Settings бакета.
- В разделе Public Development URL выберите Enable.
- Введите
allowдля подтверждения и выберите Allow.
Теперь бакет доступен по адресу https://pub-<id>.r2.dev/<key>. Cloudflare ограничивает частоту запросов к этому URL и указывает, что он предназначен для разработки, поэтому перейдите на собственный домен, прежде чем широко делиться ссылками. Направить свой CNAME на адрес r2.dev нельзя.
Что открывает публичный доступ, а что нет
- Только чтение. Публичный доступ позволяет любому читать объекты, ключ которых ему известен. Для загрузки и удаления по-прежнему нужны учетные данные API.
- Без списка файлов. Если открыть корень домена, содержимое бакета не отобразится. Случайные имена объектов делают ссылки трудноугадываемыми.
- Весь бакет целиком. Доступ настраивается для бакета, а не для папки. Храните приватные файлы в отдельном бакете.
- Кэширование. По умолчанию Cloudflare кэширует только файлы с определенными расширениями. Добавьте правило кэширования, если хотите кэшировать файлы любого типа.
Как исправить Access Denied в ссылках R2
Если ссылка возвращает Access Denied, 401 или 403, проверьте по порядку:
- Ссылка использует ваш собственный домен или URL r2.dev, а не
<account-id>.r2.cloudflarestorage.com. Этот хост служит для S3 API и всегда требует подписи. - Собственный домен в статусе Active, а доступ к бакету в его настройках имеет значение Allowed.
- Ключ в URL в точности совпадает с объектом, включая папки и регистр букв.
Частые вопросы
Безопасно ли делать бакет R2 публичным?
Да, для файлов, которыми вы и так собираетесь делиться. Любой, у кого есть ссылка, может прочитать этот файл, но не может просмотреть список файлов в бакете, загружать или удалять. Храните приватные данные в другом бакете.
Стоит ли публичный бакет R2 дороже?
Нет. R2 не берет плату за исходящий трафик, поэтому публичные скачивания не добавляют расходов на трафик. Чтения считаются операциями класса B, для которых есть бесплатный ежемесячный лимит.
Можно ли сделать публичной только одну папку?
Не с помощью публичного доступа R2: он действует на весь бакет. Используйте отдельный бакет или оставьте бакет приватным и делитесь presigned URL.