はじめに
Firebase とは、Google 社が提供している、アプリを素早く構築できる mBaaS のサービスです。
非常に簡単に始めることができるためハッカソンで利用されることが多いですが、エンタープライズにおいても、スピード感を持ってサービスを立ち上げるには良い手段になり得るでしょう。
その場合、チーム開発におけるプロジェクト運用やセキュリティなどを考える必要がありますが、この記事ではチーム開発で利用する際の IAM 設計の考え方をまとめたいと思います。
Firebase で定義されているロール
まず、Firebase で定義されているロールを確認してみましょう。公式のドキュメントは以下となります。
タイプ | ロール | 説明 |
---|---|---|
基本 | オーナー | 編集者権限に加えて、請求やプロジェクトの削除などの権限を持ちます。ユーザと権限の管理はオーナーが行います。 |
基本 | 編集者 | 閲覧者権限に加えて、既存リソースの設定を変更を行うことができます。 |
基本 | 閲覧者 | 既存のリソースを閲覧することができます。 |
事前定義 | Firebase レベルのロール | Firebase プロダクト全体に対して、権限を設定できます。 |
事前定義 | プロダクトカテゴリのロール | プロダクトカテゴリ(アナリティクス、開発、品質、拡大)ごとに、権限を設定できます。 |
事前定義 | プロダクトレベルのロール | Firebase コンソールからは設定できません。プロダクトごとに、権限を設定できます。 |
カスタム | - | Firebase コンソールからは設定できません。Google Cloud の IAM 設定を利用することで、独自のロールを定義することができます。 |
Google Cloud の IAM を利用することで、詳細な権限管理が出来ることがわかります。(本記事ではこの点にはあまり言及しません)
基本方針
Firebase コンソールを利用する上で、以下の基本方針で IAM 設計を行うと良いでしょう。
- 基本的に「オーナー」ロールは使用しない
- 通常時は「閲覧者」ロールのアカウントで利用する
- 環境変更が必要な作業時のみ、「編集者」ロールのアカウントを利用する
「オーナー」のロールを持ったユーザは非常に強力なため、普段は利用しないことが望ましいです。(AWS を使ったことある人は ルートアカウントのような存在とイメージいただけたらよいかと思います。)
そのため、開発者やプロジェクト関係者には「オーナー」以外のロール「編集者」「閲覧者」を付与、または Firebase の役割を割り当てや Google Cloud の IAM 設定を利用して、適切な役割を割り当てることが必要となります。
特に本番環境では不注意によるデータの削除などの事故を避けるため、作業時以外は「閲覧者」ロールのアカウントを利用するといった運用が考えられます。
具体的な運用方法
Firebase コンソールの「ユーザと権限」の設定画面では、メンバーに対して一つのロールだけを設定することが出来ます。 一方で、メンバーの追加およびロールの切替えは、オーナーロールを持つアカウントでしか実施することが出来ません。 作業が発生するたびに、オーナーアカウントで Firebase コンソールにログインして、ロールを切り替える運用は、「基本的に オーナー ロールは使用しない」という方針に反してしまいます。
それでは、どうしたらよいでしょうか。
実は、Firebase コンソールの「ユーザと権限」の設定画面では、プロジェクトメンバーとして Google グループを追加することが出来ます。そして、Google グループに対してロールを割り当てることが出来ます。
Google グループを活用した IAM 運用は、以下のようなイメージとなります。
編集者ロールと閲覧者ロール用に 2 つ Google グループを作成し、Firebase プロジェクトのメンバーに追加します。 日々の運用は Google グループのメンバーの所属を切り替えることにより、「オーナー」アカウントを利用することなく、運用することが出来ます。
ロール | メンバー |
---|---|
オーナー | Google アカウント |
編集者 | Google グループ(projectname-editor@googlegroups.com ) |
閲覧者 | Google グループ(projectname-monitor@googlegroups.com ) |
Firebase コンソールの「ユーザと権限」の設定画面では以下のように設定しています。
Google グループの作り方は割愛しますが、自由に参加可能なグループにしないなど、留意して作成しましょう。
まとめ
Firebase の IAM(ユーザと権限)は Google グループを活用することで、柔軟性を持つことが出来ます。権限が非常に強力なオーナー権限は極力利用しない運用を行いましょう。
Firebase は非常に簡単に利用することが出来ますが、チーム開発やエンタープライズで利用する上で、セキュリティやプロジェクト運用を考慮した設計が必要になってきます。(他のクラウドサービスと同様ですね。)
少しでもこの記事が参考になれば幸いです。