3

nodejs、express、firebase functions、firestore を使用して Web ベースのプロジェクトを開始しましたが、最終的には firebase ホスティングを使用したいと考えています。これまでのところ、承認と認証に到達するまで、すべてをサーバー側に保つことができました。モデル ビュー コントローラー構造を使用しているため、firestore への呼び出しがサーバー側で行われるため、firestore セキュリティ ルールが機能しません。Firestore セキュリティ ルールは、firestore クライアント側にアクセスする場合にのみ機能します。

Google Cloud IAM (Identity and Access Management) を使用して、Cloud Firestore セキュリティ ルールの場合と同様に、firestore への読み取り/書き込みのユーザー レベルを制御できますか?

その場合、MySQL で別のユーザーを設定するのと同じように機能します。

grant INSERT, UPDATE, SELECT on name_of_database.* to 'admin_webuser'@'%';
grant SELECT on name_of_database.* to 'user_webuser'@'%';

そのため、管理者がサインインするときは admin_webuser を使用してデータベースに接続し、他のユーザーがサインインする場合は user_webuser を使用してデータベースに接続します。

IAMを使用してfirestoreに接続するために、nodejs、express、firebase関数を使用して上記のようなセットアップを実現できますか?

現在、モデルフォルダーで、次の方法でfirestoreを呼び出します。

const admin = require('firebase-admin');
const functions = require('firebase-functions');
admin.initializeApp(functions.config().firebase);

admin.initializeApp(functions.config().firebase);セットアップされた IAM ルールに基づいて、別の構成ファイルにヒットするようにパーツを変更できると思いますか? では、管理者が自分の Web サイトにログインするときに、別の構成ファイルを含むモデル フォルダーを使用できますか?

IAM のドキュメントを読みましたが、意味がありません。誰かが私にアドバイスしてもらえますか:

  1. IAM を使用して firestore で CRUD を実行できる管理者を設定するには?

  2. 管理者が私のウェブサイトにサインインしたときにのみ、firestore で CRUD 操作を実行できるようにするにはどうすればよいでしょうか?

4

1 に答える 1

3

サーバー側では、Admin SDK で使用されるサービス アカウントに適切な IAM 権限を付与して、アクセス制御を構成します: https://cloud.google.com/firestore/docs/security/iam。これにより、セキュリティ ルールのように個々のコレクション/ドキュメント レベルでアクセス許可を構成することはできません。

あなたがやろうとしていることを行うには、クライアント側でユーザー認証(Firebase Auth)を処理する必要があると思います。次に、カスタム クレームをセキュリティ ルールと組み合わせて簡単に使用して、質問 1 と 2 に答えることができます。

考えられる回避策は、サーバー環境でクライアント SDK を使用することです。次に、Admin SDK を使用して各ユーザーのカスタム トークンを作成し、そのユーザーをサーバー アプリ自体にサインインさせることができます。

于 2018-07-25T17:07:40.990 に答える