玄関マットの下の鍵
「ローカル開発環境だから大丈夫」。
そう言って、あなたはパスワードをコードに書きました。
しかし、そのコードはGitHubにプッシュされ、世界中の泥棒(ボット)が
あなたの「玄関マットの下」を覗きに来ます。
- GitHubのPublicリポジトリに、間違えてAWSキーを上げたことがある
- `const API_KEY = "12345..."` とコードに直接書いている
- `.env` ファイルもGitで管理(コミット)している
- 退職したエンジニアが使っていたパスワードを、変更せずに使っている
不正利用による数千万円のクラウド請求が、明日届くかもしれません。
01. 悪魔はコードに潜む
const db = new Database({
host: "localhost",
password: "P@ssw0rd1234" // ← DO NOT COMMIT THIS!
});
ハードコード(ソースコードへの直接記述)は、最も初歩的かつ致命的なセキュリティ・アンチパターンです。
Gitのようなバージョン管理システムを使うと、そのコードは履歴として永遠に残ります。
たとえ後で消したとしても、過去のコミットログを漁れば、パスワードは簡単に見つかります。
攻撃者は、GitHub上の公開コードを24時間監視し、こうした「うっかりミス」を秒単位で探しています。
「誰でも読める場所」だと思え。
そこに秘密を書いてはいけない。
02. 環境変数を使え
秘密の情報は、コードの外(環境変数)に置くのが鉄則です。
ローカル開発では `.env` ファイルを使い、本番環境ではサーバーの設定機能を使います。
そして、`.env` ファイルは必ず `.gitignore` に追加し、絶対にリポジトリに含めないことです。
「構成(コード)」と「設定(パスワード)」を分離する。
これがThe Twelve-Factor Appでも提唱されている、モダンなアプリ開発の基本です。
03. 何かが漏れたら、全てを変えろ
もし、誤ってパスワードをコミットしてしまったら?
「すぐに消して上書き」では不十分です。すでに誰かに見られている前提で動くべきです。
該当するパスワード、APIキーを「無効化」し、新しいものを発行してください。
鍵を落としたら、新しい鍵を作るのではなく、シリンダーごと交換する。
それが唯一の安全策です。