シークレット情報の管理
「鍵を入れたファイルが、あちこちにコピーされていない?」
秘密を一か所で管理し、必要な人やシステムへ安全に渡す方法を見てみましょう。
01困りごと
鍵まで一緒に!
コピー先が増える共有したファイルに鍵まで入っていた!コピーを減らせないかな。
02工夫
金庫へまとめる
取得を制御する鍵は金庫で管理して、必要な権限で取りに行く形にしよう。
03試す
必要な鍵を取り出す
取得後も保護金庫から取得して使えた。端末に出た後も、大切に扱おう。
04改善
配るコピーを減らせた
交換も一連の手順に交換は金庫だけで終わらず、発行元と利用側まで揃えるんだね。
なぜローカルに秘密を置かないのか
いちばん手軽なのは、API キーや DB パスワードを手元の .env ファイルに書く方法。でもそれは、パソコンの中に『むき出しの鍵』を置いている状態です。紛失や誤コミット1つで漏れ、共有の鍵なら全員・全システムに影響が及びます。
各ブロックや矢印をクリックすると、その仕組みの説明がここに表示されます。
手元の鍵は紛失・誤コミットで漏れる — 更新も全員の手作業になる
この図をテキストで読む
構成図「鍵を手元に置く? 置かない?」。ブロック6個、つながり4本。 枠: ❌ 手元に鍵を置く(ブロック3個)、金庫へ保管・配布を集約(ブロック3個)。 【ブロック】 - .env に平文で保存: PCの中に鍵が居座る - 紛失・誤コミットで流出: 漏れたら全員に影響 - 鍵の更新が大変: 全員に配り直し - 取得権限を絞る: 人とプログラムのID - 必要なときに取得: 取得後も秘密として扱う - 交換手順を自動化: 発行元・金庫・利用側 【図の符号】墨の囲み枠=守られた内側 【流れ】 - ❌ 手元に置く世界: .env に平文で保存 → 紛失・誤コミットで流出 → 鍵の更新が大変 - 金庫へ集約する: 取得権限を絞る → 必要なときに取得 → 交換手順を自動化
取得・利用・交換を一連で管理する
各ステップ・参加者・分岐をクリックすると、その仕組みの説明がここに表示されます。
この図をテキストで読む
シーケンス図「都度取得の流れ」。参加者4人、ステップ11個。 【参加者】(左から右) - 開発者 / アプリ: ローカル or 本番 - 認証基盤: 本人確認の窓口 - Secrets Manager: クラウドの鍵の金庫 - 外部サービス: DB / 外部API 【流れ】(上から下へ) ── ① 取得のための認証 ── 1. 開発者 / アプリ → 認証基盤: SSOや実行IDで認証 2. 認証基盤 → 開発者 / アプリ: 一時的な資格情報を発行(応答) ── ② 必要なときに鍵を取り出す ── 3. 開発者 / アプリ → Secrets Manager: シークレットを指定して取得 4. Secrets Manager → 開発者 / アプリ: API キー・DB パスワードを返す(応答) 5. 開発者 / アプリ(自身で処理): 取得した秘密を必要な範囲で使う ── ③ 鍵を使ってサービスを呼ぶ ── 6. 開発者 / アプリ → 外部サービス: 取得した鍵で接続 7. 外部サービス → 開発者 / アプリ: 応答を返す(応答) ── ④ 鍵を入れ替えるとき(運用) ── 8. 開発者 / アプリ → 外部サービス: 発行元で新しい鍵を準備 9. 開発者 / アプリ → Secrets Manager: 新しい鍵を金庫へ保存 10. 開発者 / アプリ(自身で処理): 再取得・切替を確認 11. 開発者 / アプリ → 外部サービス: 旧鍵を失効し、拒否を確認
安全な手順を、いつもの手順にする
開発者が接続のたびに鍵を探して貼り付ける運用では、私物のメモや共有チャットにコピーが増えがちです。会社の認証でログインし、必要な秘密だけを取得して接続する手順を、ツールやコマンドにまとめると扱いやすくなります。
人の作業ではSSOのセッションを活用し、本番のプログラムでは実行IDで取得を自動化します。必要なときに取得できるかだけでなく、再取得・更新・失効の動作も確認します。秘密の値をログへ出さないことも含めて設計します。
Gitへの誤コミットには、git-secretsやgitleaks等による検査を組み合わせます。事前フックに加え、共有先へ入る段階でも確認すると、個人の設定漏れを補いやすくなります。
検知した後の手順も用意する
漏洩した秘密は、ファイルから削除するだけでは無効になりません。発行元での失効・交換まで行います。
押さえておきたい用語
- シークレット
- SSO(シングルサインオン) この用語の解説を読む
- シークレットマネージャ
- .env
- 一時的な資格情報
- ローテーション
『GitHubアレルギーをなくす』を読み終えました。
Git と GitHub の関係、ブランチとプルリクエストの流れがわかり、GitHub の話題に構えなくなります。