Firebase API KeyをGitHubにPushしたくない私の運用
前提として
Firebase API KeyをGitHubにPushすること自体は問題ありません と公式が言っております。
通常、API キーは細心の注意を払って保護する必要があります(たとえば Vault サービスを使用したり、キーを環境変数として設定したりするなど)。しかし、Firebase サービスの API キーは、コードまたはチェックインされた構成ファイルに含めても問題ありません。
とはいえ、石橋をC4で破壊して「渡ったら死んでたな」と呟いてしまうほどにビビりな私としては万が一のことを考えてGitHubにはあげたくないなと思ってしまいます。
また、GoogleもAPI Keyに制限を適用することを推奨しています。
Firebase サービスの API キーをシークレットとして扱う必要はありませんが、特定の状況(以下を参照)では、API キーの不正使用からプロジェクトを保護するための追加の手段が必要になる場合があります。
不正利用されないようにプロダクト開発を進めればいいのですが、そもそもAPI Keyを知られる可能性を減らしておきたいです。
というわけで、GitHubにはPushせずに運用していきたいのです。
結論
- Firebase API Keyが記載されるファイルは
.gitignore
に記載する - デプロイするサービスのシークレットにFirebase API Keyが記載されるファイルを置く
- デプロイ時にシークレットから当該ファイルを配置する
運用
Firebase API Keyは.env
とgoogle-services.json
に記載されているケースを想定します。
また、モバイルアプリを想定し、デプロイにはBitriseを使うとします。
-
.gitignore
に.env
とgoogle-services.json
を記載する。
これでエミュレータからdev環境等に繋いでの動作確認でFirebase API Keyを使っても誤ってGitHubにPushする心配がなくなります。 - BitriseのSecretsに
.env
とgoogle-services.json
を置きます。
そのままでは置けないため、base64にエンコードしてから置きます。
今回は.env
をENV_FILE
、google-services.json
をDEV_GOOGLE_SERVICES_JSON
として置きます。 -
bitrise.yml
を編集して、デプロイフローの中で、.env
とgoogle-services.json
を使うようにします。# 略 - contents: | echo $ENV_FILE | base64 -d > .env cd android/app/ echo $DEV_GOOGLE_SERVICES_JSON | base64 -d > google-services.json cd ../../ # 略
- あとは通常通りに開発を行い、デプロイの際にはBitriseを使えば良いです!
最後に
ここで紹介したのはあくまでGitHubにFirebase API KeyをPushせずにアプリケーション開発・運用を行う方法です。
最初に記載した通り、Firebase API Keyは公開される前提で作られているため、公開すること自体に問題はありません。それでもAPI Keyである以上、進んで公開したくないという理由でGitHubにはPushしていないだけです。
むしろ重要なのは、
- 推奨されている 制限の適用を行う こと
- Firebaseのセキュリティルールに従う こと
の方です。
他のAPI Keyと取り扱い方法が異なり困惑することも多々ありますが、Firebaseは非常に有益なサービスなので、使いこなせるように頑張りたいです。
Discussion