Closed11

FirebaseのAPIキーを晒すとGoogleから来る警告メールについて探る

hoshimahoshima

はじめに: FirebaseのAPIキーは晒してもいい

このページに記載がある通り、FirebaseのAPIキーは公開してもいい。
ただし、一定の条件下では追加のセキュリティ対策が必要なこともある。

「Firebase サービスの API キーは、コードまたはチェックインされた構成ファイルに含めても問題ありません」
ここにおいての「チェックイン」は「コミット」と同義のはずなので、GitHub上で公開しても問題はない。

関連記事:
https://firebase.google.com/support/guides/security-checklist?hl=ja#understand_api_keys
https://qiita.com/hoshymo/items/e9c14ed157200b36eaa5
https://zenn.dev/cloud_ace/articles/firebase-api-key-management

hoshimahoshima

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に戻すとともに、各種対応を行い、ログや料金をチェックして不正利用されていないかを確認した。

hoshimahoshima

ここで気になったのが、Googleから警告が来たこと。
FirebaseのAPIキーとGoogle CloudのAPIキーは同一のフォーマットであるため、GitHubが判断できないのは仕方ないとして、
Googleが「公開していいFirebaseのAPIキー」「公開してはいけないGoogle CloudのAPIキー」の区別がつかないはずないのでは?自分がなにかしてしまったのでは?
Firebase管理画面からGoogle Cloud管理画面に遷移していろいろ設定するところがあるので、そこで良くない設定をしてしまったとか?

hoshimahoshima

ということで、Firebase上に新しいプロジェクト(=新しい環境と新しいAPIキー)を作成した。
ひとまずAnalyticsを有効にし、そのAPIキーを持たせた新しいリポジトリを作ってGitHubにpublicで公開してみた。

GitHubの「Security」タブ内「Secret scanning alerts」には前回同様にアラートが来たが、
Googleからの警告メールは来なかった。

hoshimahoshima

次 Firestoreを有効にし、データベースを作成してみた。
ルールは「本番環境」を選択。
コード側は変更せず。

これもGoogleからの警告メールは来なかった。

hoshimahoshima

プランを無料のSparkプランから有料のBlazeプランに変更
Google Cloud側の設定ができるのはBlazeプランだけらしいので、これでGoogle Cloud側の設定をいじったせいで変になったとかありそう

Googleからの警告メールは来なかった。

hoshimahoshima

Authの有効化&Googleログイン有効化→警告メールなし

hoshimahoshima

hosting有効化→警告メールなし
deploy実行→なんかデプロイするまでの手順がかなり変わってる気がするけど警告メールなし
AppCheckとreCAPTCHA有効化→警告メールなし

えーもうわからんくなってきた

hoshimahoshima

わかった
FirebaseのinitializeApp()に渡すfirebaseConfigをenvironment.tsファイルに切り出してGitHubにpushすると警告メールが来た!
botがAPIキーの前後のコードを読んでどう使われてるかで判断してる?
んで別ファイルに切り出しちゃうとそれができないから警告が来る的な?

hoshimahoshima

検証
新しいGitHubリポジトリと新しいFirebaseプロジェクトを準備してみた
firebaseConfigを別ファイルに切り出てpushした
警告メール来ない……
Firebase設定画面の「ウェブAPIキー」が非表示になってる?

Hostingを有効化した
Authenticationを有効化した→「ウェブAPIキー」が表示された
Firestoreを有効化した
さらに有料プランにした
警告メール来ない……

hoshimahoshima

つかれたのでギブアップ

FirebaseのAPIキー公開について、

  • 公開すること自体は問題ない
    • GitHubで公開しなくてもサイト上で公開されるので隠しても意味はない
  • GitHubには警告される
  • Googleは警告メールを送ってくることもある
    • 条件はわからない
  • 万が一不正利用されないように、AppCheckやセキュリティルールはちゃんとしよう

残念ながら以上です

このスクラップは1ヶ月前にクローズされました