githubに間違えてpushしたパスワードなどの情報を履歴ごと削除する方法

githubにpushしたパスワードやAWSのシークレットキーなど大切な情報を履歴ごと削除する方法を紹介します。

間違えてgithubにパスワード情報をpushしてしまった

現在、pythonとflaskを使って個人開発をしているのですが、パスワードとsecret_keyをそのままgithubにあげてしまって管理していました。リポジトリをprivateに設定しており、あとで修正すれば大丈夫っしょと後回しにしていたのですが、よく考えたら後から修正してもcommitした履歴に大切な情報が残ってしまいます。

パスワードやsecret_keyの情報はすぐに悪用される

github上で悪意あるBOTがパスワードやsecret_keyを狙っている可能性があり、公開してしまった個人情報はすぐに悪用されてしまいます。AWSのsecret_keyを不正利用された話も実際にあります。

GitHub に AWS キーペアを上げると抜かれるってほんと???試してみよー! – Qiita

🤔 前書き  *稀によくある* 、AWS を不正利用されちゃう話、 – [AWSで不正利用され80000ドルの請求が来た話 – Qiita](https://qiita.com/koyama9876/items/add70cba…

GitHubの優秀な検索のせいでAWSなどのアクセスキーが流出している件 – wp.bmemo.pw

いや怖いですね。GitHubは数分前にインデックスされたソースコードもすぐに検索できますので下手するとアップロード後すぐに不正利用されてもおかしくありません。GitHubの検索が優秀すぎて逆に(悪い意味で)キー検索に便利な構造になってます。

AWSで不正利用され80000ドルの請求が来た話 – Qiita

はじめに 初めまして、気づけば年度末ですね。新年度よりエンジニアとして就職する@koyama9876です。 これは私が昨年の秋からにかけてやらかしてしまったことに対する記事です。 これが皆様のAWSを利用するにあた…

また、リポジトリでpasswordと検索すれば、簡単にパスワード情報を探し出せます。

だからこそ、githubにパスワードなどの情報をprivateであったとしてもあげるべきではないですし、普段から.gitignore.やenvなどを使ってgit管理の対象外にしておくことが大切です。「パスワードpush ダメ絶対」です。

githubからパスワードなどの情報を削除する方法

それでもうっかり大切な情報をgithubにあげてしまうこともあるでしょう。その場合の対処法として以下の二つです。

  • パスワード情報を変更する
  • 特定のファイルを履歴ごと削除する

間違えてpushしてしまった場合、まずは応急措置として早急にパスワードやSECRET_KEY情報を変更しましょう。パスワードを変更してしまえば、とりあえず不正利用されることはありません。次にパスワードが書かれた特定のファイルを履歴ごと削除します。

例えば、以下の用にconfig.cfgファイルにパスワードとsecret_keyをベタがきしてpushしてしまったとします。

config.cfg
app.config['SECRET_KEY'] = 'defrevrtvrvrtvnucndscmdskxcmewoixoec'
MAIL_PASSWORD = 'tobitate-blog'

その際は以下のgitコマンドを実行することによって今までの履歴を含めてファイルのデータを全て削除できます。

myproject$ git filter-branch -f --index-filter 'git rm --cached --ignore-unmatch config.cfg' HEAD
Rewrite ebf2952b0bb74c50d68dac (23/47) (1 seconds passed, remaining 1 predicted)    rm 'config.cfg'
Rewrite e185591e3cbc64c12bb (23/47) (1 seconds passed, remaining 1 predicted)    rm 'config.cfg'
Ref 'refs/heads/master' was rewritten

削除したあとは以下のコマンドで強制的にpushを実行すれば履歴を含めてconfig.cfgが削除された状態でgithubにpushされます。

$ git push --force origin master
Counting objects: 240, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (116/116), done.
Writing objects: 100% (240/240), 589.89 KiB | 73.74 MiB/s, done.
Total 240 (delta 156), reused 182 (delta 120)
remote: Resolving deltas: 100% (156/156), completed with 22 local objects.
To https://github.com/
 + 1c...9a6f master -> master (forced update)

SECRET_KEYやパスワードをgithubにあげることはセキュリティインシデントにも繋がりますので、大切な情報はハードコーディングしてpushをしないようにしましょう。今回、私は後で修正すれば良いという甘い考えでpushしてしまいましたが、結果的にgithubにパスワードをあげる危険性を身をもって体験できたのでよかったです。次からあげないように気をつけます。

>文系エンジニア大学生の技術ブログ

文系エンジニア大学生の技術ブログ

社会が多様化していく中、大学生の学生生活も多様であるべきと考えています。主にエンジニア向けにITやプログラミングなどの技術系と大学生向けに休学、留学、海外生活、トビタテ留学、長期インターンに関する記事を書いています。