파이프라인 작업의 보안 규칙

파이프라인 작업 규칙을 사용하면 기존 규칙 엔진의 필터링 기능을 일치시킬 수 있습니다. 파이프라인 작업은 다양한 기능을 제공하지만 규칙 엔진은 쿼리 만족도와 보안을 보장하기 위해 간단한 필터만 인식하도록 제한됩니다.

버전 및 모드 요구사항

이 문서는 네이티브 모드의 Firestore Enterprise 버전에 적용됩니다.

지원되는 필터 표현식

쿼리가 규칙에 의해 제한되려면 상수에 대해 표준 비교 연산자를 사용해야 합니다. 규칙 엔진에서 인식하는 필터 유형은 다음과 같습니다.

  • 같음 및 같지 않음: eq, neq
  • 비교: gt, gte, lt, lte.
  • 멤버십: in, arrayContains

예를 들면 다음과 같습니다.

  • where(eq("foo", 2))
  • where(lt("foo", 2))
  • documents("/user/1", "/user/2").where(...)

요청 속성

request 객체를 사용하여 인증을 검증하고 컨텍스트를 쿼리할 수 있습니다. 단, 표준 쿼리에서 사용할 수 있는 일부 속성은 파이프라인에서 지원되지 않습니다.

지원되는 속성

새 엔진은 다음 속성을 계속 지원합니다.

  • request.auth: 사용자 uid 및 토큰 데이터에 액세스합니다.
  • request.method: 작업을 식별합니다 (예: get, list).
  • request.path: 액세스되는 리소스의 경로입니다.
  • request.time: 요청의 서버 측 타임스탬프입니다.

지원되지 않는 속성

limit, offset, orderBy와 같은 request.query 속성은 다단계 쿼리에서 이러한 값을 결정하는 복잡성으로 인해 파이프라인 규칙 검사에서 지원되지 않습니다.

파이프라인 단계 처리 및 권한

보안 규칙의 세부 작업에 매핑되는 다양한 파이프라인 단계가 있습니다.

  • allow list 권한: collection(), collectionGroup(), database() 단계에서 트리거됩니다.
  • allow get 권한: 일괄 get 작업과 유사하게 처리되는 documents() 단계에 의해 트리거됩니다.
  • 필드 수정 단계: 규칙은 파생 값이 아닌 저장된 데이터에만 적용됩니다. 파이프라인에 필드를 수정하는 단계 (예: AddFields, ReplaceWith, Select)가 포함된 경우 규칙 엔진은 해당 단계가 발생한 후 필터 제약 조건을 적용하는 것을 중지합니다.
  • 리터럴 단계: literals() 단계는 데이터베이스에서 읽지 않지만 비용이 발생할 수 있습니다. 악용을 방지하려면 규칙으로 확인할 수 있는 다른 단계 (예: collection())와 페어링해야 합니다.