パイプライン オペレーションのセキュリティ ルール

パイプライン オペレーション ルールを使用すると、既存のルールエンジンのフィルタリング機能を照合できます。パイプライン オペレーションには豊富な機能が用意されていますが、ルールエンジンはクエリの充足性とセキュリティを確保するために、単純なフィルタの認識に制限されています。

エディションとモードの要件

このドキュメントは、ネイティブ モードの Firestore Enterprise エディションに適用されます。

サポートされているフィルタ式

クエリがルールによって制約されるには、定数に対して標準の比較演算子を使用する必要があります。ルールエンジンで認識されるフィルタタイプは次のとおりです。

  • 等式と不等式: eqneq
  • 比較: gtgteltlte
  • メンバーシップ: inarrayContains

次に例を示します。

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

リクエストのプロパティ

request オブジェクトは引き続き認証とクエリ コンテキストの検証に使用できますが、標準クエリで使用できるプロパティの一部はパイプラインではサポートされていません。

サポートされているプロパティ

新しいエンジンは、引き続き次のプロパティをサポートします。

  • request.auth: ユーザーの UID とトークンデータにアクセスします。
  • request.method: オペレーションを識別します(getlist など)。
  • request.path: アクセスされているリソースのパス。
  • request.time: リクエストのサーバーサイドのタイムスタンプ。

サポートされていないプロパティ

マルチステージ クエリでこれらの値を特定する複雑さのため、limitoffsetorderBy などの request.query プロパティは、パイプライン ルールチェックではサポートされていません。

パイプライン ステージの処理と権限

セキュリティ ルールの特定の詳細なオペレーションにマッピングされるパイプライン ステージは次のとおりです。

  • allow list 権限: collection()collectionGroup()database() の各ステージでトリガーされます。
  • allow get 権限: バッチ get オペレーションと同様に扱われる documents() ステージによってトリガーされます。
  • フィールド変更ステージ: ルールは保存されたデータに対してのみ動作し、派生値に対しては動作しません。パイプラインにフィールドを変更するステージ(AddFieldsReplaceWithSelect など)が含まれている場合、ルールエンジンは、そのステージに到達するとフィルタ制約の適用を停止します。
  • リテラル ステージ: literals() ステージはデータベースから読み取りませんが、コストが発生する可能性があります。不正使用を防ぐため、ルールで検証できる別のステージ(collection() など)とペアにする必要があります。