この記事ではGithubの公開リポジトリに大切なアカウント情報をアップロードしてしまった時の対処方法と未然に防ぐ方法について紹介します。この記事を読んでAPIKeyなど開発に必要だが機密性が高い情報に対する扱いをどうするかを決める際の参考になれば幸いです。
そもそもGithubにアカウント情報をアップロードするとなぜ問題?
この記事をご覧になっている方はリテラシが高い方が多いので説明不要かと思いますが一応。
アカウントが公開されると以下のようなトラブルが起きます。
- 不特定多数のユーザから自分のアカウントを使って自分の情報を閲覧・操作できる。それにより悪さをすることができる(本人の知らぬ間に退会してたり…)
- 特にAmazonS3などのAPIKeyを他人に悪用された場合は、気づかないうちに手元に何百万円クラスの請求が行くことがある。
なんというか、例えて言うなら「キャッシュカードに暗証番号書いた付箋をはりつけたまま道端に落としてそのまま放置した」と同じレベルの大問題です。
対処方法
具体的な2つの対策を記載します。
1. 公開しているアカウント情報を無効にする。
解約する、というのもありますが、アカウントとして利用しているメールアドレスやパスワードを変更していきます。また、APIKeyを使っている場合は、変更できる場合には変更処置を施しましょう。
2. githubのcommit情報を削除する
※ここで紹介する対処法は「個人で使っているリポジトリ」に限ります。チームでやっている場合には決して適用しないでください。
リモート上にアップロードしている情報をずばり削除していきます。その手順を以下に記載します。
(1) master以外のブランチを全て削除します。
masterブランチ上で
・git branch -d [ローカルブランチ名]
・git push origin :[リモートブランチ名]
を実行します。
(2) masterブランチのHEADをアカウントcommit前まで戻してリモートにも反映。
・git reset --hard [戻したいcommitのハッシュ値]
・git push -f origin master ※
(もし、アカウントcommit後に変更した変更内容を反映させたい場合はgit resetで戻した後力技で反映させる…)
※もし以下のようなエラーが出たら、Githubリポジトリ側の設定でmasterブランチがprotected branchとして指定されている可能性があります。指定から外してもう一度行ってください。
To https://github.com/LyricalMaestro/AccountSample.git
! [remote rejected] master (refusing to delete the current branch: refs/heads/master)
eerror: failed to push some refs to 'https://github.com/LyricalMaestro/AccountSample.git'
注意点
このような方法をすればリポジトリのページからcommit一覧をたどってアカウント情報にアクセスされる、ということはありませんが、commitの中身自体はGithubに上がったままです。アカウント情報をcommitしたときのハッシュ値がバレてしまえば簡単にアクセスできてしまいます。
このような「ゴミcommit」をなくすためには「git gc」というコマンドがありますが、githubでは定期的にしかこのgit gcを実行しません。一定期間過ぎれば完全にcommit情報そのものが消えますが、消えるまでの間アクセスできてしまう可能性がほんのわずかですがある、ということは肝に銘じておいてください。
この事故を未然に防ぐには?
上記のような対応はチーム開発では是非したくはないので、事故を未然に防ぐような仕組みを作っておく必要があります。
Androidの場合、解決策の一つとしてassetsフォルダを活用する方法があります。
具体的には
・assetsフォルダ内にアカウント情報を記載したファイル(例えばaccount.txt)を配置。
・account.txtを.gitignoreファイルに追記する。
という方法をとります。
パワポから抜粋しました。(これはソラコムサンプルアプリのコードの一部です。)
(2016/2/2追記)
上記と同じような方法でgradleを使ったやりかたでも実現可能です。
https://gist.github.com/curioustechizen/9f7d745f9f5f51355bd6
まとめ
アカウント情報を公開リポジトリにアップロードすることは非常にまずいことです。
もしこうなってしまった場合は早急に対処する必要があります。
さらに、このような不測の事態が発生する前にアカウント情報をアップロードしない仕組みづくりを心がけることをおすすめします。
参考サイト
Githubでアカウントを晒した事故に対する対処(SlideShare)
http://www.slideshare.net/LyricalMaestro/github-57410067
<- ここで記載している回避方法はgit push -fを使わないめんどくさい方法が記載されています。。。
日本Androidの会埼玉支部2016年1月定例会に参加してきました
http://lyricalmaestrojp.hatenablog.com/entry/2016/01/25/005213
<- ここで発表して得たフィードバックが今回の記事に反映されています。
Githubのmasterブランチを削除して、masterを置き換えた (^o^;)
http://qiita.com/pugiemonn/items/34b56b1aa757e33133e4
反則技 git push -f
http://qiita.com/ppworks/items/94c0107d98e55f903ea9