본문으로 건너뛰기

Storage API 설정

Storage API는 소비 프로젝트에 R2/S3 credential을 주지 않고 업로드·조회·temporary URL·public URL을 제공하는 서버용 object storage gateway입니다.

설정 순서

  1. Provider Credential: R2/S3 access credential을 등록합니다. 이 값은 서버에서만 암호화 저장되며 binding에 반드시 연결해야 합니다.
  2. Bucket Binding: bucket alias, 실제 bucket name, private 또는 public visibility를 등록합니다. public binding은 custom URL도 필수입니다.
  3. Token grant: Storage API token에 사용 가능한 binding을 선택합니다. token에는 allowed binding ID만 저장하며 기본 bucket이나 별도 public-write 토글은 없습니다.
  4. Request visibility: 소비 서버가 visibility=private|public을 보냅니다. bucket alias는 특정 grant를 명시해야 할 때만 보냅니다.

자동 선택 규칙

bucket을 생략하면 Storage API가 token의 허용 binding 중 요청 visibility와 일치하는 후보를 찾습니다.

후보 수결과
0storage_visibility_unsupported
1해당 binding 사용
2개 이상storage_bucket_ambiguous — alias를 명시하거나 grant를 정리해야 함

visibility도 생략하면 안전 기본값인 private가 적용됩니다. 명시한 alias의 visibility가 요청과 다르면 fail-closed됩니다.

Public 업로드 조건

Public 업로드는 다음 조건을 모두 만족해야 합니다.

  • 운영 전역 public-upload switch가 켜져 있음
  • token에 upload action이 있음
  • token이 public binding을 grant받음
  • binding visibility가 public이며 custom URL이 등록됨
  • collection 정책이 public을 허용함

별도 token public-write boolean은 사용하지 않습니다.

보안 원칙

  • long-lived Storage API token과 Provider Credential은 서버 secret store 또는 .env에만 둡니다.
  • Blade, JavaScript, localStorage, 브라우저 요청에 long-lived token을 넣지 않습니다.
  • 소비 프로젝트에는 실제 R2/S3 access key와 bucket credential을 전달하지 않습니다.
  • private object URL은 필요할 때 서버가 temporary URL을 발급합니다.