LoginSignup
6
3

More than 1 year has passed since last update.

Firebaseへのデプロイのために必要なIAMロール (備忘録)

Last updated at Posted at 2021-07-16

GitHub ActionsからFirebaseにデプロイしようとして権限周りではまったのでメモ。

そもそも前提条件

サービスアカウント秘密鍵のJSONファイルへのパスをGOOGLE_APPLICATION_CREDENTIALSに指定してfirebase-toolsを呼びます。環境変数から直接渡すことはできないので、一旦ファイルに出力してやる必要があります。

jobs:
  deploy:
    steps:
      - run: echo "$FIREBASE_SERVICE_ACCOUNT" > /tmp/credentials.json
        env:
          FIREBASE_SERVICE_ACCOUNT: ${{ secrets.SERVICE_ACCOUNT }}
      - run: GOOGLE_APPLICATION_CREDENTIALS=/tmp/credentials.json npx firebase-tools deploy

各サービスごとに必要なIAMロール

共通

Cloud RuntimeConfig Adminを指定します。このロールを指定しないとFirebase CLIが利用できません。はまりポイント。

Cloud RuntimeConfig Admin

Firebase Hosting

Firebase Hosting Adminを指定します。

Firebase Hosting Admin

Firestore

Cloud Datastore Index AdminFirebase Rules Adminを指定します。名前通りですが前者がインデックスに、後者がセキュリティルールに対応します。どこにもFirestoreの文字はないので注意。

Cloud Datastore Index Admin

Firebase Rules Admin

Cloud Functions for Firebase

通常のCloud Functionsと同じくCloud Functions Adminを指定します。

Cloud Functions Admin

Cloud FunctionsのコンテナイメージがCloud Storageに保存されるので、Storage Object Adminも指定します。

Storage Object Admin

Cloud FunctionsにデプロイするIAMユーザーは、Cloud Functionsを実行するIAMユーザーに「成り代わる」権限を持つ必要があります。実行時に使用されるIAMユーザーへのアクセスを、デプロイ時に使用するユーザーに、Service Account Userロールで許可します。

Service Account User

Cloud PubSubを使用する(定期実行など)場合は、Cloud Scheduler Adminも指定します。

Cloud PubSub

参考資料

なお、前項で示したIAMロールの権限が最小かどうかは検証していません。若干過剰かもしれませんが許容範囲かなと思っています。

Firebaseで自動生成される権限周りはかなりガバガバなので、プロジェクト内にFirebaseを導入する場合は気を付けたほうが良いかもしれません。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3