Firebase 보안 규칙

GonnabeAlright·2022년 1월 16일
0
post-thumbnail

Firebase 보안 규칙데이터를 악의적인 사용자로부터 보호하기 위해 제공됩니다. 간단하거나 복잡한 규칙을 작성하여 특정 앱에 필요한 세부 수준으로 앱의 데이터를 보호할 수 있습니다.

Firebase 보안 규칙은 확장 가능하고 유연한 구성 언어를 활용하여 사용자가 실시간 데이터베이스, Cloud Firestore, Cloud Storage에서 액세스할 수 있는 데이터를 정의합니다. Firebase 실시간 데이터베이스 규칙은 규칙 정의에서 JSON을 활용하는 반면 Cloud Firestore 보안 규칙 및 Cloud Storage의 Firebase 보안 규칙은 더 복잡한 규칙별 구조를 수용할 수 있도록 빌드된 고유 언어를 활용합니다.

앱에서 사용하는 특정 Firebase 제품의 규칙을 설정하는 방법과 Firebase 간에 규칙 동작이 어떻게 다른지에 대해 자세히 알아보세요.

주요기능

  • 유연성

    앱의 구조 및 동작에 적잡한 맞춤 규칙을 작성합니다. 규칙은 자신의 데이터를 활용하여 액세스를 승인할 수 있는 언어를 사용합니다.

  • 세부사항

    규칙은 요구에 따라 넓히거나 좁힐 수 있습니다.

  • 독립적인 보안

    규칙이 앱 외부(Firebase Console 또는 Firebase CLI)에서 정의되기 때문에 클라이언트는 보안 적용에 책임이 없으며, 버그로 데이터가 손상되지 않고, 데이터가 항상 보호됩니다.

작동 방식

Firebase 보안 규칙은 패턴을 데이터베이스 경로와 대조한 후 맞춤 조건을 적용하여 해당 경로의 데이터에 액세스를 허용합니다. Firebase 제품의 모든 규칙에는 경로 일치 구성요소와 읽기 또는 쓰기 액세스를 허용하는 조건문이 있습니다. 앱에서 사용하는 각 Firebase 제품에 규칙을 정의해야 합니다.

Cloud FirestoreCloud Storage의 경우 규칙은 다음 구문을 사용합니다.

service <<name>> {
 // Match the resource path.
 match <<path>> {
  // Allow the request if the following conidtions are true.
  allow <<method>>: if <<condition>>
 }
}

실시간 데이터베이스의 경우 JSON 기반 규칙은 다음 구문을 사용합니다.

{
  "rules": {
    "<<path>>": {
      // Allow the request if the condition for each method is true.
      ".read": <<condition>>,
      ".write": <<condition>>
    }
  }
}

규칙은 AND문이 아니라 OR문으로 적용됩니다. 결과적으로 여러 규칙이 경로와 일치하고 일치 조건이 액세스를 허용하면 규칙은 해당 경로에 있는 데이터 액세스를 허용합니다. 따라서 광범위한 규칙이 데이터 액세스를 허용하는 경우 더 구체적인 규칙으로 제한할 수 없습니다. 하지만 규칙이 너무 겹치지 않도록 하면 이 문제를 피할 수 있습니다. Firebase 보안 규칙 플래그는 컴파일러 경고와 일치하는 경로에서 겹칩니다.

Firebase 보안 규칙은 인증을 활용하여 사용자 기반 권한을 부여할 수 있으며, 설정한 조건이 정말 기본적이거나 엄청나게 복잡해질 수 있습니다. 규칙 작성을 시작하기 전에 규칙 언어 및 동작에 대해 자세히 알아보세요.

구현경로

  1. 제품 SDK 통합

    앱의 Cloud Firestore, Cloud Storage 또는 실시간 데이터베이스를 설정합니다.

  2. Firebase 보안 규칙 작성

    규칙 작동 방식 및 몇 가지 기본 규칙 설정에 관해 자세히 알아봅니다.

  3. Firebase 보안 규칙 테스트

    실시간 데이터베이스 및 Cloud Firestore 에뮬레이터를 사용하여 프로덕션으로 배포하기 전에 앱의 동작을 테스트하고 규칙을 검증합니다.

  4. Firebase 보안 규칙 배포

    Firebase Console 또는 Firebase CLI를 사용하여 프로덕션으로 규칙을 배포합니다.

Firebase 보안 규칙 시작하기

1. Firebase 보안 규칙 이해하기

규칙을 작성하기 전에 시간을 들여 사용하고 있는 Firebase 제품을 특정 Firebase 보안 규칙 언어를 살펴보는 것이 좋습니다. 실시간 데이터베이스는 규칙에 자바스크립트와 유사한 구문 및 JSON 구조를 활용합니다. Cloud FirestoreCloud Storage는 정의된 경로에 액세스 조건을 설정하는 match 및 allow 문에 의존하는 CEL(Common Expression Language)의 상위 집합을 활용합니다.

google-CEL 공식문서: https://github.com/google/cel-spec/blob/master/doc/langdef.md#overview

2. 인증 설정

아직 설정하지 않았으면 Firebase 인증으로 사용자를 식별하세요. Firebase 인증은 여러가지 일반적인 인증 방법을 지원하며 통합적인 인증 기능을 제공하기 위해 Firebase 보안 규칙과 통합됩니다.

앱에 추가적으로 맞춤 인증 정보를 설정할 수 있습니다.

3. 데이터 및 규칙 구조 정의

데이터를 구조화하는 방법은 규칙을 구조화하고 구현하는 방법에 영향을 미칠 수 있습니다. 데이터 구조를 정의할 때 규칙 구조에 미칠 수 있는 영향을 고려하세요.

예를 들어 Cloud Firestore에서 각 사용자의 특정 역할을 나타내는 필드를 포함하고자 할 수 있습니다 그 다음 규칙에서 이 필드를 읽고 사용하여 역할 기반 액세스를 허용할 수 있습니다.

데이터 및 규칙 아키텍처를 정의할 때 어떤 규칙이 데이터세트에 액세스를 허용하면 Firebase 보안 규칙도 해당 데이터세트에 액세스를 허용한다는 점에 유의하세요. 즉, 데이터 계층 구조의 상위 수준에서 액세스를 허용한 경우 하위 경로에서 액세스를 세분화할 수 없습니다.

4. 규칙 보기

기존 규칙을 보려면 Firebase CLI 또는 Firebase Console을 사용합니다. 실수로 업데이트를 덮어쓰지 않으려면 같은 방법을 사용해 규칙을 일관되게 수정해야 합니다. 로컬에서 정의된 규칙이 최신 업데이트를 반영하는지 확실하지 않은 경우 언제든지 Firebase Console를 통해 Firebase 보안 규칙의 가장 최근에 배포된 버전을 볼 수 있습니다.

Firebase Console에서 규칙을 보려면 프로젝트를 선택한 다음 실시간 데이터베이스, Cloud Firestore 또는 Storage로 이동합니다. 올바른 데이터베이스 또는 스토리지 버킷에 들어가면 규칙을 클릭합니다.

Firebase CLI에서 규칙을 보려면 firebase.json 파일에 언급된 규칙 파일로 이동합니다.

5. 기본 규칙 작성

앱을 개발하고 규칙을 이해하면서 다음과 같은 사용 사례를 포함한 몇 가지 기본 보안 규칙을 구현해 보세요.

  • 콘텐츠 소유자 전용: 사용자 별로 콘텐츠 액세스를 제한합니다.
  • 혼합 액세스: 사용자에게 쓰기 액세스를 제한하지만 공용 읽기 액세스를 허용합니다.
  • 속성 기반 액세스: 사용자 그룹 또는 유형으로 액세스를 제한합니다.

6. 규칙 테스트

앱 동작을 완전히 검증하고 Firebase 보안 규칙 구성을 확인하려면 로컬 환경에서 Firebase 애뮬레이터를 사용하여 단위 테스트를 실행하고 자동화하세요.

Firebase Console에서 Firebase 보안 규칙을 설정하는 경우 동작을 신속하게 검증하려면 Firebase 규칙 시뮬레이터를 사용하면 됩니다. 하지만 변경사항을 프로덕션으로 배포하기 전에 Firebase 에뮬레이터를 사용하여 좀 더 철저하게 테스트하는 것이 좋습니다.

7. 규칙 배포

Firebase Console 또는 Firebase CLI를 사용하여 프로덕션으로 규칙을 배포하세요. Firebase 보안 규칙 관리 및 배포에 설명된 단계를 따릅니다.

0개의 댓글