【しーくれっとかんり】

シークレット管理 とは?

最終更新:
💡 パスワードやAPIキーを安全に守る「金庫番」

パスワード・APIキー・証明書などの機密情報(シークレット)を安全に保管・配布・更新する仕組み。ソースコードや設定ファイルにシークレットを直接書かずに済ませるための基盤。

📌 このページのポイント
シークレット管理 安全な方法(Vault / シークレットマネージャー) アプリ 1. シークレット要求 Vault シークレットマネージャー 2. 認証 認証確認 3. 認証できたら値を返す(API Key / パスワード) 暗号化して保管 危険な方法(ハードコード) ソースコード API_KEY = "sk-abc123..." DB_PASS = "password123" リスク Git履歴に残る 誰が使ったか追跡しにくい ローテーション困難
シークレット管理の仕組み
ひよこ ひよこ
シークレット管理って何で必要なの?設定ファイルに書いておけばよくない?
ペンギン先生 ペンギン先生
設定ファイルやソースコードに書いたパスワードは、Gitの履歴に残ったり、誤って公開リポジトリにpushされたりしやすいんだ。公開された認証情報は不正利用の標的になるから、GitHubも公開された秘密情報を検知する仕組みを用意しているよ。だからシークレットはコードとは別の安全な場所に保管するのが基本なんだ
ひよこ ひよこ
具体的にどうやって管理するの?
ペンギン先生 ペンギン先生
AWS Secrets Managerを例にすると、シークレットを暗号化して保管しておいて、アプリは自分の権限で認証を受けてからAPIで値を受け取る。コードには「どのシークレットを使うか」という名前だけ書いておけばいいんだ。誰がいつ取得したかの記録も残せるよ
ひよこ ひよこ
おもしろい!環境変数に入れるのはダメなの?
ペンギン先生 ペンギン先生
OWASPのチートシートでは、環境変数はほかのプロセスから読めたり、ログやメモリダンプに含まれたりすることがあるから、ほかの方法が使えない場合を除いて推奨しないとしているよ。特にコンテナのイメージにENVで値を焼き込むと、定義から漏れやすいんだ
ひよこ ひよこ
シークレットのローテーションって面倒じゃない?なんでやるの?
ペンギン先生 ペンギン先生
漏れていた場合に、盗まれた値が使える期間を短くするためだよ。ただ、DBのパスワードを変えた瞬間に古い値で接続しに来るアプリがいると失敗することがある。AWS Secrets Managerの場合、1つのユーザーのパスワードを変える方式ではごく短い時間だけ拒否される可能性があるから再試行で備え、止められない用途では2つのユーザーを交互に更新して、更新中もどちらかが必ず使える方式が案内されているんだ
もっと詳しく知りたい人へ

うっかりAPIキーをGitHubにpushしてしまったら、コミットを消せば大丈夫?

消すだけでは不十分です。一度公開されたキーは誰かにコピーされている前提で扱い、まず発行元でキーを無効化して新しいキーに差し替えます。GitHubのドキュメントも、検知したらすぐに認証情報をローテーションするよう案内しており、Gitの履歴からの削除は手間がかかるうえ、無効化済みなら必須でないことも多いと説明しています。GitHubのシークレットスキャンは提携する発行元に検知を通知する仕組みもありますが、すべての種類のキーを検知できるわけではありません。pushの段階で止めるプッシュ保護という機能も用意されています。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「シークレット管理」って出てきたら「パスワードやAPIキーなどの機密情報を、コードとは別の金庫で安全に管理する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Secret Management」 = 秘密の管理
💬 Secret(秘密・機密)をManagement(管理)する。「秘密は金庫に入れて、鍵の持ち主と出し入れを記録しよう」という発想だよ

参考資料

← 用語集にもどる