2026년 9월 30일 · 5분 분량
Cloudflare R2 버킷을 공개하는 방법
R2 버킷은 기본적으로 비공개입니다. 버킷에 공개 주소를 명시적으로 부여하기 전까지는 서명된 API 요청 없이 누구도 파일을 읽을 수 없습니다. 공개 주소를 부여하는 방법은 두 가지이며, 함께 사용할 수도 있습니다.
방법 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>에서 버킷에 접근할 수 있습니다. Cloudflare는 이 URL의 속도를 제한하며 개발용이라고 안내하므로, 링크를 널리 공유하기 전에 사용자 지정 도메인으로 전환하세요. 내 CNAME이 r2.dev 주소를 가리키게 하는 방식은 지원되지 않습니다.
공개 액세스로 노출되는 것과 노출되지 않는 것
- 읽기 전용. 공개 액세스를 켜면 키를 아는 사람은 누구나 객체를 읽을 수 있습니다. 업로드와 삭제에는 여전히 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는 송신 요금이 없으므로 공개 다운로드가 대역폭 비용을 늘리지 않습니다. 읽기는 Class B 작업으로 계산되며, 매월 무료 허용량이 있습니다.
폴더 하나만 공개할 수 있나요?
R2의 공개 액세스는 버킷 전체에 적용되므로 불가능합니다. 별도 버킷을 쓰거나, 버킷을 비공개로 두고 미리 서명된 URL로 공유하세요.