はじめに
こんにちは。現在AIと一緒に天気検索アプリの開発を一緒にしている非エンジニアです。
今回、APIキーが直書きされたファイルをGitHubにPushしてしまうという会心のミスを繰り出してしまったので、同じミスをしないためにも共有したいと思います。
①経緯
作成した天気取得アプリのファイルをはじめてGitHubにPushしたところ、以下の内容で一件のメールが届きました。
要約すると:
“GitGuardianは、あなたのGitHubリポジトリ内でOpenWeatherMapのAPIキーが含まれていることを検知しました。”
②原因
main.pyに以下のような記述がありました。
API_KEY = "aaabbbcccdddeeefffggghhhiiijjjkkk" #実際のAPIキーと異なります
→つまり、APIキーを直書き(ハードコード)したままPushしてまっていたということになります。
③何が問題なのか?
APIキーとは、API(Application Programming Interface)を利用する際に、アカウントを識別・認識するための秘密のキーです。
これが誰でも見られる状態で公開してしまうと、
- 第三者に勝手に使われて無料利用枠を消費されたり
- 不正利用により意図しない課金が発生する
といったリスクがあります。
④対策としてやったこと
1 . APIキーを環境変数に置き換える
import os
API_KEY = os.getenv("OPENWEATHER_API_KEY")
2 . /.envファイルを作成して、APIキーを移す
/.env
OPENWEATHER_API_KEY=aaabbbcccdddeeefffggghhhiiijjjkkk
3 . /.envファイルは.gitignoreに追加して、GitHubにアップロードしないようにする
/.gitignore
.env
4 . GitHubの履歴からキーを完全に削除🗣️🔥🔥
# 1. Git履歴からキーを削除
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch main.py" \
--prune-empty --tag-name-filter cat -- --all
# 2. main.pyを修正後、再度追加
git add main.py
git commit -m "config APIキーを削除して、環境変数に置き換えました"
# 3. 強制的にpush(履歴を書き換えるので注意する)
git push origin --force
※なお、GitHubにPushされたAPIキーは漏洩済みと考えた方がよいため、可能であればAPIキーを無効にして再発行するのがベストです。
5 . Gitリポジトリを新規作成
# 1. Github上で現在のリポジトリをPrivateに変更
# 2. ローカルにクリーンな状態でリポジトリを作る
mkdir new-repo
cd new-repo
git init
アプリのコードだけをコピーして再配置(.envなど除外)
cp -r ../old-repo/your_file .
# 3. 再コミットして、新しいリモートリポジトリを作成し、Push
git add .
git commit -m "Clean initial commit"
git remote add origin https://github.com/yourname/new-repo.git
git push -u origin main
追記:
コメントにて、「コミット履歴には永久に残るので、リポジトリごと削除したほうが良いのでは。」とのご指摘をいただきました。
ありがとうございます。
全くその通りです。
一旦Pushしてしまうと、たとえ削除したとしても履歴には残ったままになります。
ただ、今現在作成したリポジトリはRenderに展開しているので削除するのではなく(ちょっと怖い)、公開設定をPrivateにして、新たにリポジトリを作成することにしました。
なので、項目を一つ追加してリポジトリを新規作成する方法を追加しました。
⑤おわりに
ここまで読んでいただき、ありがとうございます。
初心者だからこそやってしまったミスですが、これを機に「APIキーは環境変数に置き換えて、gitignoreでPushされるのを回避する」という基本を学べました。
同じような経験をした方や、これから開発を始める方の参考になれば嬉しいです!