GitHubに捧げられた
「マスターキー」
「とりあえず動くか試したかった」。
その軽い気持ちでコミットした `config.js` 。
そこにはAWSの管理者権限を持つアクセスキーが生書きされていました。
あなたのリポジトリは「公開」設定になっています。
- コードの中に `AWS_ACCESS_KEY` や `API_TOKEN` という文字列がある
- 「プライベートリポジトリだから大丈夫」と思っている
- `.gitignore` ファイルの中身がスカスカだ
- 退職したエンジニアのアカウントやキーを削除していない
不正利用の発覚は、数百万の請求が来た「翌月」です。
01. 5分後の悪夢
- const apiKey = process.env.API_KEY; + const apiKey = "AKIAIOSFODNN7EXAMPLE";
GitHubには、公開コードからAPIキーを探し出す「クローラーボット」が24時間巡回しています。
誤ってキーをプッシュしてから、攻撃者がそれを検知し、コインマイニング用の超高性能サーバーを100台起動するまで、わずか数分です。
「すぐ消したから大丈夫」は通用しません。Gitの履歴(History)には永遠に残ります。
リポジトリごと爆破するしかない。
02. 環境変数の徹底
機密情報は絶対にコードに含めてはいけません。
`.env` ファイルに記述し、アプリケーションからは環境変数として読み込む。
そして `.env` は必ず `.gitignore` に追加する。
これはWeb開発の「いろはのい」ですが、現場での事故原因No.1でもあります。
03. git-secretsの導入
人間はミスをします。だから、機械にチェックさせるのです。
`git-secrets` や `trufflehog` などのツールを導入し、コミット時(pre-commit hook)に
「キーっぽい文字列」が含まれていないかを自動検査する仕組みを作りましょう。
コミットできなければ、流出もしません。