보안 규칙 시작하기

Firestore 보안 규칙을 사용하면 인프라를 관리하거나 서버 측 인증 및 승인 코드를 작성할 필요 없이 사용자 환경 빌드에만 집중할 수 있습니다.

보안 규칙은 간단하지만 표현력 있는 형식으로 액세스 제어 및 데이터 검증을 제공합니다. 사용자 데이터를 안전하게 유지하는 사용자 기반 및 역할 기반 액세스 시스템을 빌드하려면 Firestore 보안 규칙과 함께 Firebase Authentication을 사용해야 합니다.

보안 규칙 버전 2

2019년 5월부터 Firestore 보안 규칙 버전 2를 사용할 수 있습니다. 규칙 버전 2는 재귀 와일드 카드 {name=**}의 동작을 변경합니다. 컬렉션 그룹 쿼리를 사용하려면 버전 2를 사용해야 합니다. 보안 규칙의 첫 번째 줄에 rules_version = '2';를 추가하여 버전 2를 선택해야 합니다.

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {

규칙 작성

프로젝트의 기본 데이터베이스 및 각 추가 데이터베이스에 대해 만드는 데이터 모델에 맞는 Firestore 보안 규칙을 작성하고 관리합니다.

모든 Firestore 보안 규칙은 데이터베이스에서 문서를 식별하는 match 구문과 이러한 문서에 대한 액세스 권한을 제어하는 allow 표현식으로 구성됩니다.

service cloud.firestore {
  match /databases/{database}/documents {
    match /<some_path>/ {
      allow read, write: if <some_condition>;
    }
  }
}

Firestore 모바일/웹 클라이언트 라이브러리의 모든 데이터베이스 요청은 데이터를 읽거나 쓰기 전에 보안 규칙에 따라 평가됩니다. 규칙에서 지정된 문서 경로 중 일부라도 액세스를 거부하면 전체 요청이 실패합니다.

아래는 기본 규칙 세트의 몇 가지 예입니다. 유효한 규칙이지만 프로덕션 애플리케이션에는 권장되지 않습니다.

인증 필요

// Allow read/write access on all documents to any user signed in to the application
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

모두 거부

// Deny read/write access to all users under any conditions
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

모두 허용

// Allow read/write access to all users under any conditions
// Warning: **NEVER** use this rule set in production; it allows
// anyone to overwrite your entire database.
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

위 예에서 사용한 {document=**} 경로는 전체 데이터베이스의 모든 문서와 일치합니다. 특정 데이터 경로를 일치시키고 계층적 데이터를 다루는 방법을 알아보려면 보안 규칙 구조화 가이드로 이동하세요.

규칙 테스트

Firestore는 규칙 세트를 테스트하는 데 사용할 수 있는 규칙 시뮬레이터를 제공합니다. 콘솔 Google Cloud 과 Firebase Console 모두에서 시뮬레이터에 액세스할 수 있습니다.

규칙 시뮬레이터를 사용하면 인증 및 인증되지 않은 읽기, 쓰기, 삭제를 시뮬레이션할 수 있습니다. 인증된 요청을 시뮬레이션할 때 다양한 제공업체의 인증 토큰을 만들고 미리 볼 수 있습니다. 시뮬레이션된 요청은 배포된 규칙 세트가 아닌 편집기의 규칙 세트에 대해 실행됩니다.

Google Cloud 콘솔에서 규칙 테스트

Google Cloud 콘솔의 규칙 시뮬레이터는 Standard 및 Enterprise 버전 모두에서 네이티브 모드의 Firestore 에 사용할 수 있습니다.

필수 권한

Google Cloud 콘솔에서 보안 규칙을 테스트하려면 다음 IAM 권한이 필요합니다.

  • firebaserules.rulesets.test

콘솔 Google Cloud 에서 데이터베이스 요청을 시뮬레이션하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 데이터베이스 페이지로 이동합니다.
  2. 테스트할 데이터베이스의 ID를 클릭합니다.
  3. 탐색 메뉴에서 보안 을 클릭합니다.
  4. 시뮬레이터 탭을 클릭합니다.
  5. 시뮬레이션 유형 드롭다운 목록에서 작업 유형( get, create, update 또는 delete)을 선택합니다.
  6. 위치 필드에 테스트할 문서 경로 (예: users/user_123)를 입력합니다.
  7. (선택사항) createupdate 요청의 경우 문서 빌드 를 클릭하여 모의 문서 페이로드를 구성합니다.
  8. (선택사항) 인증된 요청을 시뮬레이션하려면 인증을 사용 설정하고 인증 제공업체 (예: google.com 또는 익명)를 선택한 후 토큰 페이로드 필드를 구성합니다.
  9. 실행 을 클릭합니다.

평가 패널에는 요청이 허용되었는지 또는 거부되었는지, 평가된 각 조건에 대한 세부 보고서 항목, 코드 편집기의 행 수준 강조표시가 표시됩니다.

Firebase Console에서 규칙 테스트

Firebase Console에서 규칙을 테스트하려면 데이터베이스 및 스토리지 > Firestore > 규칙 탭으로 이동합니다. 규칙 플레이그라운드 를 클릭하여 시뮬레이터 설정을 열고 시뮬레이션 옵션을 선택한 후 실행 을 클릭합니다.

규칙 배포

모바일 앱에서 Firestore를 사용하려면 먼저 보안 규칙을 배포해야 합니다. Firebase Console, 콘솔 Google Cloud , Firebase CLI 또는 Firestore Management REST API를 사용하여 규칙을 배포할 수 있습니다.

Firestore 보안 규칙 업데이트가 새 쿼리와 리스너에 영향을 미치는 데 최대 1분이 소요될 수 있습니다. 하지만 변경사항이 완전히 전파되어 모든 활성 리스너에 반영되는 데 최대 10분이 소요될 수 있습니다.

Firebase Console 사용

첫 번째 규칙 세트를 설정하고 배포하려면 프로젝트의 기본 데이터베이스에 대해 Firebase Console의 데이터베이스 및 스토리지 > Firestore > 규칙으로 이동합니다.

프로젝트에 데이터베이스를 여러 개 만드는 경우 각 데이터베이스에 Firestore 보안 규칙을 배포할 수 있습니다. Firebase Console에서 데이터베이스 선택기를 사용하여 기본 데이터베이스와 추가 데이터베이스 간에 전환합니다.

온라인 편집기로 규칙을 작성한 다음 게시 를 클릭합니다.

Google Cloud 콘솔 사용

콘솔에서 직접 Firestore 보안 규칙을 관리하고 배포할 수 있습니다. Google Cloud 규칙 편집기는 Standard 및 Enterprise 버전 모두에서 네이티브 모드의 Firestore에 사용할 수 있습니다.

필수 권한

콘솔 Google Cloud 에서 보안 규칙을 관리하고 배포하려면 다음 IAM 권한이 필요합니다.

  • firebaserules.releases.create
  • firebaserules.releases.delete
  • firebaserules.releases.update
  • firebaserules.rulesets.create
  • firebaserules.rulesets.delete
  • firebaserules.rulesets.list
  • firebaserules.rulesets.test (규칙 시뮬레이터를 사용하는 데 필요)

콘솔 Google Cloud 에서 규칙을 배포하려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 데이터베이스 페이지로 이동합니다.
  2. 관리할 데이터베이스의 ID를 클릭합니다.
  3. 탐색 메뉴에서 보안 을 클릭합니다.
  4. Firestore 규칙 탭을 클릭합니다.
  5. 규칙 편집기에서 규칙을 확인합니다. 수정하려면 새 규칙 세트 또는 규칙 세트 클론을 클릭한 후 규칙을 수정합니다.
  6. 게시 를 클릭하여 변경사항을 배포합니다.

타임라인에서 이전 규칙 세트를 확인하고 클론하거나 복원할 수도 있습니다.

Firebase CLI 사용

Firebase CLI를 사용해도 규칙을 배포할 수 있습니다. CLI를 사용하면 애플리케이션 코드로 규칙의 버전을 계속 제어하면서 기존 배포 프로세스의 일부로 규칙을 배포할 수 있습니다.

// Set up Firestore in your project directory, creates a .rules file
firebase init firestore

// Edit the generated .rules file to your desired security rules
// ...

// Deploy rules for all configured databases
firebase deploy --only firestore

다음 단계