저장소 보안 규칙 시작하기

일반적인 앱에서 개발자는 인증, 권한 관리, 데이터 검증 및 개발자의 비즈니스 로직을 수행하는 여러 서버를 구축하고 관리해야 합니다. Firebase용 Cloud Storage를 사용하는 앱은 Firebase 인증 및 Cloud Storage용 Firebase 보안 규칙을 활용하여 서버리스 인증, 권한 부여, 데이터 검증을 처리합니다.

Cloud Storage 및 저장소 보안 규칙을 사용하면 인프라를 관리하거나 복잡한 서버측 인증 및 권한 관리 코드를 작성할 필요 없이 사용자를 위한 앱 개발에만 집중할 수 있습니다.

개요

저장소 보안 규칙은 Cloud Storage에 저장된 파일의 읽기 및 쓰기 권한, 파일의 구조 및 포함되는 메타데이터를 결정합니다. 규칙의 기본 유형은 allow 규칙이고, 선택사항으로 지정된 조건이 충족되면 readwrite 작업을 허용합니다. 규칙의 몇 가지 예는 다음과 같습니다.

// Rules can optionally specify a condition
allow write: if <condition>;

match 규칙은 Cloud Storage 참조를 나타내는 파일 경로를 비교합니다. match 규칙은 하나 이상의 파일 경로와 일치할 수 있으며 특정 request의 파일 경로에 둘 이상의 match 규칙이 일치할 수도 있습니다.

// Rules match specific paths
match /images/profilePhoto.png {
  allow write: if <condition>;
}

match /images/croppedProfilePhoto.png {
  allow write: if <other_condition>;
}

규칙을 판정하는 컨텍스트도 requestresource 객체를 통해 노출되며, 이 객체로 auth 컨텍스트(request.auth) 및 기존 객체의 크기(resource.size)를 알 수 있습니다.

// Rules can specify conditions that consider the request context
match /images/profilePhoto.png {
  allow write: if request.auth != null && request.resource.size < 5 * 1024 * 1024;
}

파일 보안 설정 섹션에서 저장소 보안 규칙을 자세히 알아보세요.

샘플 규칙

저장소 보안 규칙은 우선 service(여기에서는 firebase.storage) 및 규칙을 판정하는 기준이 될 Cloud Storage 버킷 (match /b/{bucket}/o 사용)을 지정해야 합니다. 기본 규칙은 Firebase 인증을 거쳐야 하지만 다음은 이와 다른 액세스 제어를 사용하는 몇 가지 일반적인 규칙의 예입니다.

기본

// Only authenticated users can read or write to the bucket
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

공개

// Anyone can read or write to the bucket, even non-users of your app.
// Because it is shared with Google App Engine, this will also make
// files uploaded via GAE public.
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write;
    }
  }
}

사용자

// Grants a user access to a node matching their user ID
service firebase.storage {
  match /b/{bucket}/o {
    // Files look like: "user/<UID>/path/to/file.txt"
    match /user/{userId}/{allPaths=**} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}

비공개

// Access to files through Firebase Storage is completely disallowed.
// Files may still be accessible through Google App Engine or GCS APIs.
service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if false;
    }
  }
}

개발 중에는 기본 규칙 대신 공개 규칙을 사용하여 파일의 읽기 및 쓰기를 공개적으로 허용할 수 있습니다. 이 방법은 Firebase 인증을 설정할 필요가 없으므로 프로토타입 개발을 시작할 때 매우 유용합니다. 그러나 Cloud Storage는 기본 Google App Engine 앱과 버킷을 공유하므로 이 규칙은 이 앱에서 사용하는 모든 데이터를 공개하게 됩니다.

사용자 규칙으로 인증된 각 사용자에게 개인 파일 저장소를 제공할 수 있습니다. 비공개 규칙으로 파일을 완전히 잠글 수도 있지만, 이렇게 하면 사용자가 Cloud Storage를 통해 파일을 전혀 읽거나 쓸 수 없으므로 주의하시기 바랍니다. Google App Engine 앱 또는 GCS API에서는 파일에 계속 액세스할 수 있습니다.

규칙 수정

Cloud Storage의 저장소 보안 규칙을 손쉽게 수정하려면 Firebase 콘솔에서 저장소 섹션의 규칙 탭을 사용합니다. 규칙 탭에서 현재 규칙을 빠르고 손쉽게 확인 및 수정할 수 있습니다. 이러한 규칙을 배포하려면 게시 버튼을 클릭하거나 파일을 저장(ctrl/cmd + s)합니다. 규칙은 Cloud Storage 서버에 즉시 업로드되지만 실제로 적용되려면 최대 5분이 걸릴 수 있습니다.

Firebase CLI를 사용하여 규칙을 배포할 수도 있습니다. firebase init를 실행할 때 Storage를 선택하면 프로젝트 디렉토리에 기본 규칙의 사본을 포함하는 storage.rules 파일이 생성됩니다. firebase deploy 명령을 사용하여 이 규칙을 배포할 수 있습니다. 프로젝트에 여러 버킷이 있는 경우 배포 대상을 사용하여 동일한 프로젝트 폴더에서 동시에 모든 버킷에 규칙을 배포할 수 있습니다.

파일 보안 설정 섹션에서 파일 기반 보안의 원리를 알아보거나, 사용자 보안 섹션에서 사용자 기반 보안에 대해 알아보세요.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.