APIキーやパスワードはどこに置く:シークレット入門
キーをフロントに書く・Gitにコミットすると公開も同然。初心者向けのシークレットの置き場所・使い方、漏れたときの対処。
ひとことで言うと
シークレットはフロントやバージョン管理に入った時点で公開も同然——置き場所・使い方・漏えい時の対処を扱う。
作れるもの
キー/パスワードの正しい置き場所(環境変数/プラットフォームのシークレット)、置いてはいけない場所、漏えい後の正しい対処が分かる。
シークレットとは
シークレットとは「他人に見せてはいけない鍵」:APIキー、DBパスワード、第三者サービスのトークン、署名鍵。漏れると、なりすまし・あなたの請求の悪用・データ窃取が起きます。だから大事なのは「使い方」だけでなく「隠し方」です。
絶対に置いてはいけない場所
- フロントの JavaScript:ブラウザに届くものはユーザーに見えます。フロントのシークレット=公開シークレット。
- Git にコミット:後で消しても履歴に残り、漏えいと同じ。公開リポジトリならボットに数秒でスキャンされます。
置くべき場所
- 環境変数/プラットフォームのシークレットストア:デプロイ先(例:Cloudflare)のシークレットストアや環境変数に置き、そこから読む。コードに直書きしない。
- ローカル開発は
.envなどのファイルを使うが、必ず.gitignoreに入れ、決してコミットしない。
これは「設定とコードの分離」という業界慣行(12-factor の config 原則):同じコードで、環境ごとにシークレットを差し替えれば動きます。
使うときの原則
- 最小権限:キーには必要な権限だけ。最大権限の root キーを使い回さない。
- 期限付き・失効可能:有効期限を設けられ、いつでも無効化できるキーを優先。漏えい時に止血できます。
- 環境ごとに別のシークレット:本番とテストを分け、テストの漏えいが本番に波及しないように。
漏れたときの対処
直ちに rotate(差し替えて旧キーを失効)——これが唯一の確実な対処です。覚えておくこと:フロント・Git 履歴・チャットログ・スクリーンショットに一度でも入ったら漏えい扱い。油断は禁物。旧キーを失効し、新しいものを生成し、シークレットストアを更新します。
次のステップ
- デプロイ時にプラットフォームでシークレットを設定:Cloudflare Pages にデプロイする
- ログインもシークレットを多用:AIでログインシステムを作る
よくある質問
うっかりキーをGitにコミット。その行を消せば大丈夫?
不十分です。削除は「今」見えなくするだけで、**履歴には残り**ます。履歴を辿れば誰でも取得でき、公開リポジトリならボットに数秒でスキャンされます。確実な対処は直ちに rotate:そのキーを失効し、新規生成し、シークレットストアを更新。
フロントには本当にどんなキーも置けない?
ブラウザに届くものはユーザーに見えます——だから機密キーはフロントに置きません。第三者サービスを呼ぶ必要があるなら、**バックエンド**がキーを保持し代理で呼ぶのが正解。「もともと公開・権限制限」の一部のキー(読み取り専用の公開キー等)だけはフロント可ですが、それでもサービス側で権限を絞ること。
参考資料
- Secrets Management Cheat Sheet — OWASP
- The Twelve-Factor App — Config — 12factor
SaaSルート の次のステップ: ストレージ →