Skip to content

chore(security): Firebase Admin SDK のサービスアカウント鍵をローテーションする #80

Description

@hideaki1979

背景

ローカル開発環境の点検で、Firebase Admin SDK のサービスアカウント鍵が、想定より広く読み取れる状態で保管されていた期間があることが分かりました。

ローカル側の是正(パーミッションの修正、不要なコピーの撤去、Git オブジェクトからの除去)は完了していますが、発行済みの鍵そのものは今も有効です。手元のコピーを消しても、Google Cloud 側で無効化しない限り、その期間に読まれていた場合の対策にはなりません。

本リポジトリは公開のため、対象アカウント・key id・該当期間・保管場所といった識別情報は記載していません。作業時に手元の gcloud で確認してください。ローテーション完了後であれば、経緯を本 issue に追記しても安全です。

やること

  • 新しい鍵を発行する
  • 参照箇所3か所を新しい鍵へ差し替える
  • 各環境で疎通確認する
  • 旧鍵を削除(無効化)する
  • keys list で旧鍵が消えたことを確認する

差し替えが必要な箇所(3か所・漏れると本番が落ちる)

# 対象 備考
1 jnavi_web のサーバ側 Firebase Admin 用の環境変数 src/lib/server/firebaseAdmin.ts が参照
2 本リポジトリの GOOGLE_APPLICATION_CREDENTIALS が指す鍵ファイル ローカル開発で使用
3 Vercel の環境変数(本番) Git 連携デプロイのため、ローカルからは未確認

手順

gcloud config set project <PROJECT_ID>

# 現行の鍵を確認
gcloud iam service-accounts keys list --iam-account=<SA_EMAIL>

# 新規発行(git 追跡外・パーミッション 0600 の場所へ)
gcloud iam service-accounts keys create <NEW_KEY_PATH> --iam-account=<SA_EMAIL>
chmod 600 <NEW_KEY_PATH>

# ↑ 3か所の差し替えと疎通確認がすべて終わってから実行する
gcloud iam service-accounts keys delete <OLD_KEY_ID> --iam-account=<SA_EMAIL>

注意

  • 外向き・不可逆な操作です。旧鍵の削除は、3か所の差し替えと疎通確認がすべて完了してから行ってください
  • 新しい鍵ファイルは 0600・Git 追跡外のディレクトリに置き、リポジトリ内には決して置かないでください
  • 鍵ファイルを一時的にでもリポジトリ配下に置くと、git add していなくても取り違えの原因になります

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedExtra attention is needed

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions