Mistake #79 : Token Exposure

GitHubに捧げられた
「マスターキー」

「とりあえず動くか試したかった」。
その軽い気持ちでコミットした `config.js` 。
そこにはAWSの管理者権限を持つアクセスキーが生書きされていました。
あなたのリポジトリは「公開」設定になっています。

🔑 鍵紛失診断
  • コードの中に `AWS_ACCESS_KEY` や `API_TOKEN` という文字列がある
  • 「プライベートリポジトリだから大丈夫」と思っている
  • `.gitignore` ファイルの中身がスカスカだ
  • 退職したエンジニアのアカウントやキーを削除していない
⚠️ 警告:あなたの会社は、金庫の鍵を渋谷の交差点に落としています。
不正利用の発覚は、数百万の請求が来た「翌月」です。

01. 5分後の悪夢

// config.js
- 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)に
「キーっぽい文字列」が含まれていないかを自動検査する仕組みを作りましょう。
コミットできなければ、流出もしません。

執筆:DevSecOpsエンジニア

自動化された防壁。
開発スピードを 落とさずにセキュリティを担保する「Shift-Left」の実践者。