【しーくれっとかんり】

シークレット管理 とは?

💡 パスワードやAPIキーを安全に守る「金庫番」
📌 このページのポイント
シークレット管理 安全な方法(Vault / シークレットマネージャー) アプリ 1. シークレット要求 Vault シークレットマネージャー 2. 認証 認証確認 3. シークレット返却(API Key / パスワード) 暗号化して保管 危険な方法(ハードコード) ソースコード API_KEY = "sk-abc123..." DB_PASS = "password123" リスク Git履歴に残る 権限管理ができない ローテーション困難
シークレット管理の仕組み
ひよこ ひよこ

シークレット管理って何で必要なの?設定ファイルに書いておけばよくない?

ペンギン先生 ペンギン先生

設定ファイルに書いたパスワードGitHubにプッシュされて大事故、というのは本当によくある話なんだ。AWSのアクセスキーがGitHubに公開されると、ボットが数分で検知して暗号通貨のマイニングに悪用するなんてことも起きている。だからシークレットはコードとは別の安全な場所に保管するのが鉄則だよ。

ひよこ ひよこ

具体的にどうやって管理するの?

ペンギン先生 ペンギン先生

AWS Secrets Managerを例にすると、シークレットをAWSに暗号化して保存して、アプリからはAPIで取得する。コードにはシークレットの「名前」だけ書いて、実際の値は実行時にAPI経由でもらうんだ。誰がいつアクセスしたかのログも残るよ。

ひよこ ひよこ

おもしろい!環境変数に入れるのはダメなの?

ペンギン先生 ペンギン先生

環境変数は設定ファイルよりはマシだけど、プロセス環境変数は子プロセスに引き継がれるし、クラッシュレポートに含まれることもある。本番環境では専用のシークレット管理ツールを使う方が安全だよ。

ひよこ ひよこ

シークレットのローテーションって面倒じゃない?なんでやるの?

ペンギン先生 ペンギン先生

ここがシークレット管理の中でも運用上一番やっかいなところでね。パスワードを定期的に変更するのは「漏洩していた場合の被害期間を限定する」ためなんだけど、実際にローテーションするとアプリの接続が切れるリスクがある。AWS Secrets ManagerはRDSのパスワードを自動ローテーションできるけど、そのタイミングでアプリが古いパスワードでDBに接続しようとして失敗するケースがある。「シークレット取得のキャッシュ期間」と「ローテーション間隔」のタイミングがずれると障害になるんだ。ダウンタイムなしのローテーションは「デュアルシークレット(新旧両方を一定期間有効にする)」パターンで対処するんだけど、これを全システムで統一的に実装するのは地味に難しいんだよ。

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