開発・設計者向け / 第10章 シークレット情報の管理

ページ 2 / 5

第10章セキュリティ

約4分で読む

シークレット情報の管理

「鍵を入れたファイルが、あちこちにコピーされていない?」

秘密を一か所で管理し、必要な人やシステムへ安全に渡す方法を見てみましょう。

  1. 01困りごと

    鍵まで一緒に!

    コピー先が増える

    共有したファイルに鍵まで入っていた!コピーを減らせないかな。

  2. 02工夫

    金庫へまとめる

    取得を制御する

    鍵は金庫で管理して、必要な権限で取りに行く形にしよう。

  3. 03試す

    必要な鍵を取り出す

    取得後も保護

    金庫から取得して使えた。端末に出た後も、大切に扱おう。

  4. 04改善

    配るコピーを減らせた

    交換も一連の手順に

    交換は金庫だけで終わらず、発行元と利用側まで揃えるんだね。

この章の合言葉

鍵は金庫に集約。交換は発行元と利用側まで揃える。

※「金庫」は秘密情報の管理サービスのたとえです。取得後の保護も必要で、保存値の更新だけでは鍵の交換は完了しません。

読みはじめる

なぜローカルに秘密を置かないのか

いちばん手軽なのは、API キーや DB パスワードを手元の .env ファイルに書く方法。でもそれは、パソコンの中に『むき出しの鍵』を置いている状態です。紛失や誤コミット1つで漏れ、共有の鍵なら全員・全システムに影響が及びます。

.env に平文で保存PCの中に鍵が居座る
紛失・誤コミットで流出漏れたら全員に影響
鍵の更新が大変全員に配り直し
取得権限を絞る人とプログラムのID
必要なときに取得取得後も秘密として扱う
交換手順を自動化発行元・金庫・利用側

各ブロックや矢印をクリックすると、その仕組みの説明がここに表示されます。

手元の鍵は紛失・誤コミットで漏れる — 更新も全員の手作業になる

この図をテキストで読む

構成図「鍵を手元に置く? 置かない?」。ブロック6個、つながり4本。 枠: ❌ 手元に鍵を置く(ブロック3個)、金庫へ保管・配布を集約(ブロック3個)。 【ブロック】 - .env に平文で保存: PCの中に鍵が居座る - 紛失・誤コミットで流出: 漏れたら全員に影響 - 鍵の更新が大変: 全員に配り直し - 取得権限を絞る: 人とプログラムのID - 必要なときに取得: 取得後も秘密として扱う - 交換手順を自動化: 発行元・金庫・利用側 【図の符号】墨の囲み枠=守られた内側 【流れ】 - ❌ 手元に置く世界: .env に平文で保存 → 紛失・誤コミットで流出 → 鍵の更新が大変 - 金庫へ集約する: 取得権限を絞る → 必要なときに取得 → 交換手順を自動化

取得・利用・交換を一連で管理する

SSOや実行IDで認証取得元の認証一時的な資格情報を発行一時キーシークレットを指定して取得取得要求API キー・DB パスワードを返す鍵を受領取得した秘密を必要な範囲で使う秘密を利用取得した鍵で接続接続応答を返す応答発行元で新しい鍵を準備新しい鍵を準備新しい鍵を金庫へ保存金庫を更新再取得・切替を確認利用側を切替旧鍵を失効し、拒否を確認旧鍵を失効
開発者 / アプリローカル or 本番
認証基盤本人確認の窓口
Secrets Managerクラウドの鍵の金庫
外部サービスDB / 外部API

各ステップ・参加者・分岐をクリックすると、その仕組みの説明がここに表示されます。

この図をテキストで読む

シーケンス図「都度取得の流れ」。参加者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等による検査を組み合わせます。事前フックに加え、共有先へ入る段階でも確認すると、個人の設定漏れを補いやすくなります。

検知した後の手順も用意する

漏洩した秘密は、ファイルから削除するだけでは無効になりません。発行元での失効・交換まで行います。

押さえておきたい用語

シークレット
APIキー・DBパスワード・各種トークン等、漏れると悪用される秘密の値。取得先と利用中の両方を保護する。
SSO(シングルサインオン)
IdPのログインを複数サービスで利用する仕組み。有効なセッションの範囲で再入力を省けるが、資格情報の保護は残る。
この用語の解説を読む
シークレットマネージャ
秘密の保管・取得権限・監査を集約する金庫。発行元の鍵更新や失効は、別途連携して行う。
.env
環境変数をまとめたファイル。平文なので秘密は書かず、接続先など非機密の設定だけに使う。
一時的な資格情報
有効期限つきの資格情報。長期の鍵の配布を減らせるが、保存先の保護・権限・失効の管理は必要。
ローテーション
資格情報を新しいものへ交換し、旧資格情報を失効する運用。発行元・金庫・利用側の切替を連携する。
ゴール

『ログインと守りの基本』を読み終えました。

認証・認可・MFA・SSO を区別して使い分け、自社のログイン周りの守りを点検できるようになります。

ページ 2 / 5