FirebaseのAPIキーを晒すとGoogleから来る警告メールについて探る
はじめに: FirebaseのAPIキーは晒してもいい
このページに記載がある通り、FirebaseのAPIキーは公開してもいい。
ただし、一定の条件下では追加のセキュリティ対策が必要なこともある。
ここにおいての「チェックイン」は「コミット」と同義のはずなので、GitHub上で公開しても問題はない。
関連記事:
Firebaseを利用して開発していた個人開発webアプリがあり、Auth、Firestore、Analyticsなどのサービスを有効にしている。
世に広めるつもりもなかったのでprivateリポジトリとして開発していたが、ふとpublicにしようと思った。
Firebaseのconfigをどう管理するべきかについて調べていると「FirebaseのAPIkeyは公開してもいい」との公式ドキュメントや記事が多数あった。
(念の為公開したくないという記事も多数あったが、公式が公開していいって言ってるし…)
ということでGitHubのリポジトリをprivateからpublicに変更してみた。
まっさきにGitHubの「Security」タブ内「Secret scanning alerts」にアラートが来た。
「Google API Keyが漏洩してますよ Keyをローテートしたりしなさい」と、対応まで丁寧に書かれている。
次にGoogleから警告メールが来た
「hoge (id: moke) の Google API キーが一般公開されています」というタイトル。
お前が公開していい言うから公開したんやぞと思いながらも、少し怖くなってきたのでリポジトリをprivateに戻すとともに、各種対応を行い、ログや料金をチェックして不正利用されていないかを確認した。
ここで気になったのが、Googleから警告が来たこと。
FirebaseのAPIキーとGoogle CloudのAPIキーは同一のフォーマットであるため、GitHubが判断できないのは仕方ないとして、
Googleが「公開していいFirebaseのAPIキー」「公開してはいけないGoogle CloudのAPIキー」の区別がつかないはずないのでは?自分がなにかしてしまったのでは?
Firebase管理画面からGoogle Cloud管理画面に遷移していろいろ設定するところがあるので、そこで良くない設定をしてしまったとか?
ということで、Firebase上に新しいプロジェクト(=新しい環境と新しいAPIキー)を作成した。
ひとまずAnalyticsを有効にし、そのAPIキーを持たせた新しいリポジトリを作ってGitHubにpublicで公開してみた。
GitHubの「Security」タブ内「Secret scanning alerts」には前回同様にアラートが来たが、
Googleからの警告メールは来なかった。
次 Firestoreを有効にし、データベースを作成してみた。
ルールは「本番環境」を選択。
コード側は変更せず。
これもGoogleからの警告メールは来なかった。
プランを無料のSparkプランから有料のBlazeプランに変更
Google Cloud側の設定ができるのはBlazeプランだけらしいので、これでGoogle Cloud側の設定をいじったせいで変になったとかありそう
Googleからの警告メールは来なかった。
Authの有効化&Googleログイン有効化→警告メールなし
hosting有効化→警告メールなし
deploy実行→なんかデプロイするまでの手順がかなり変わってる気がするけど警告メールなし
AppCheckとreCAPTCHA有効化→警告メールなし
えーもうわからんくなってきた
わかった
FirebaseのinitializeApp()
に渡すfirebaseConfigをenvironment.ts
ファイルに切り出してGitHubにpushすると警告メールが来た!
botがAPIキーの前後のコードを読んでどう使われてるかで判断してる?
んで別ファイルに切り出しちゃうとそれができないから警告が来る的な?
検証
新しいGitHubリポジトリと新しいFirebaseプロジェクトを準備してみた
firebaseConfigを別ファイルに切り出てpushした
警告メール来ない……
Firebase設定画面の「ウェブAPIキー」が非表示になってる?
Hostingを有効化した
Authenticationを有効化した→「ウェブAPIキー」が表示された
Firestoreを有効化した
さらに有料プランにした
警告メール来ない……
つかれたのでギブアップ
FirebaseのAPIキー公開について、
- 公開すること自体は問題ない
- GitHubで公開しなくてもサイト上で公開されるので隠しても意味はない
- GitHubには警告される
- Googleは警告メールを送ってくることもある
- 条件はわからない
- 万が一不正利用されないように、AppCheckやセキュリティルールはちゃんとしよう
残念ながら以上です