本記事について
当サイトを閲覧いただきありがとうございます。 本記事はシリーズ『生成AI時代のアーキテクチャ超入門』の「セキュリティアーキテクチャ」カテゴリ第7弾として、秘密情報管理(Secrets Management)について解説する記事です。
APIキー・パスワード・証明書・トークンなど一人のうっかりが会社ごと傾ける情報を保管・配布・ローテーションする仕組みです。GitHubに誤コミットされたAWS Access Keyは数秒でボットに拾われ、Bitcoinマイニング用の超大型インスタンスが勝手に立ち上がる──シークレット漏洩は数時間で数千万円の被害に直結します。本記事ではVault/Secrets Managerの選定、ローテーション・CI/CD統合・誤コミット検知・ゼロ秘密化まで解説します。
本記事のテーマについてさらに詳しく知りたい方は『セキュア・バイ・デザイン』も参考にしてみてください。
この記事の結論
- ハードコード禁止+Secret Scanningを初日から有効にする
- 自動ローテーションを整える
- IAM Role / OIDCで「そもそも秘密を持たない」ゼロ秘密化を目指す
この記事を読む前に
本記事は認証・認可・暗号化といったセキュリティ用語が多めに登場します。IT用語にあまり馴染みがない方は、基礎編の「セキュリティと認証の基本」を先に読んでおくと格段に分かりやすくなると思います。また、読んでいて分からない用語が出てきたときは用語集で調べながら読み進められます。
そもそも秘密情報管理とは何か
家の鍵の管理を想像してください。合鍵を何本も作って友人や業者に渡し、誰が持っているか把握していない状態は危険です。まして合鍵を玄関マットの下に置いておくのは鍵をかけていないのと同じです。
秘密情報管理(Secrets Management)は、システムが使うAPIキー・パスワード・証明書・トークンなどの「合鍵」を安全に保管・配布・回収する仕組みです。誰がどの鍵を持っているかを常に把握し、不要になった鍵は回収し、定期的に鍵を交換する──物理の鍵管理と同じことをデジタルの世界で自動化します。
もし秘密情報管理がなければ、パスワードがソースコードにハードコードされ、退職者のアクセスキーが何年も有効なまま放置され、1件の漏洩で全システムが丸裸になります。
なぜ秘密情報管理が必要か
第一に、漏洩がそのまま不正アクセスになるからです。シークレットが漏れれば攻撃者は正規ユーザー・正規システムとして操作できます。WAFもMFAも認可ルールも、正規のキーを持っている相手には全て通過を許してしまいます。
第二に、GitHubへの誤コミット事故が毎日どこかで発生しているからです。「うっかり .env をコミット」「デバッグのつもりでログにAPI Keyを出力」──1度パブリックに出たら「履歴から消せば大丈夫」ではなく、即ローテーション必須です。「Gitにpushしたシークレットは世界中のボットに渡したと同義」というのは業界で共有される定番の警告です。
第三に、規制要件です。SOC 2・ISO 27001・PCI DSSのいずれもシークレットの安全な管理を要求し、監査でGitリポジトリやWikiから平文のシークレットが見つかれば即レッドカードです。
なお守るべきシークレットは、外部サービスのAPIキー(Stripe・OpenAI等)、DBパスワード、TLS証明書・秘密鍵、OAuthトークン、SSHキー、クラウド認証情報(IAMアクセスキー)、データ暗号化用のマスターキーと多岐にわたります。どれか1つでも漏れれば致命的になり得るため、全種類を同じ厳しさで管理するのが鉄則です。
Secrets Manager — 中央集約で管理する
シークレットを専用サービスで集中管理するのが現代の標準です。アプリは起動時にAPI経由で取得し、ディスクやコードには残さない運用にします。クラウド各社が標準サービスとして提供しているので、自前で暗号化ストレージを組む理由はほとんどありません。
主役は2つです。AWS Secrets Managerは自動ローテーションとIAM連携が強力で、AWS単独ならこれで十分なケースが大半です(より安価でシンプルなSSM Parameter Storeという弟分もあります)。HashiCorp VaultはOSS・マルチクラウド対応で機能では頂点ですが、運用が重く専属1〜2名が必要になるため、「マルチクラウド+動的シークレット必須」に踏み込んでから検討するのが現実的です。その他、Google Secret Manager・Azure Key Vault(各クラウドネイティブ統合)、Doppler・1Password(開発者向けSaaS、UXが洗練)があります。
ライフサイクル全体を設計する
シークレットは「発行→配布→保管→利用→ローテーション→失効」というライフサイクルで管理します。どのフェーズにも漏洩リスクが潜んでいるため、全段階に対策が必要です。
| フェーズ | やること | 自動化ツール | 目安 |
|---|---|---|---|
| 発行 | 強度の高い乱数 + 短命推奨 | Vault Dynamic Secrets | — |
| 配布・保管 | KMS暗号化 + アクセス制御 | Secrets Manager経由 | — |
| 利用 | 環境変数・メモリのみ・ログ禁止 | アプリ起動時にAPI取得 | — |
| ローテーション | 自動・定期的 | Secrets Manager / Vault自動ローテーション | 30〜90日 |
| 失効 | 漏洩時は即時 | インシデント対応プレイブック | 5分以内 |
| 監視 | 誤コミット検知 | GitHub Secret Scanning / GitLeaks | コミット時 |
ローテーション頻度の目安は、DBパスワード・APIキー30〜90日、TLS証明書60〜90日(Let’s Encryptは自動)、OAuth Refresh Tokenはセッション単位、暗号化キー年次、サービスアカウント30日。定期ローテーションは「いつか漏れる」前提の保険であり、手動ローテーションは必ず忘れられる前提で自動化が必須です。シークレットの寿命は短ければ短いほど安全です。
開発環境での扱い — 本番シークレットは開発PCに置かない
ローカル開発は .env.local + .gitignore + モック、CI/CDはGitHub Secrets、ステージング・本番はSecrets Manager(互いに分離)と使い分けます。.env を .gitignore に入れるのは最低ラインで、リポジトリ作成直後の空コミットで .gitignore を先に入れる習慣を持つと安全です。
Secret Scanning — 誤コミットを自動検知する
ソースコードへのシークレット混入を自動検知する仕組みです。主役はGitHub Secret Scanning(全リポジトリ標準・無料、主要サービスのAPIキーを検知して自動通知)と、pre-commit hookで「コミットしてから気づく」を防ぐGitLeaks(OSS)。その他、Git履歴を全スキャンするTruffleHog、SaaSで高機能なGitGuardian等があります。pre-commit hookは開発者全員に配るのが理想です。
ゼロ秘密アーキテクチャ — そもそもシークレットを持たない
一歩踏み込むと、シークレットを持たない設計という選択肢が現代では有力です。IAM Role(EC2・Lambda・ECSが一時認証情報を自動取得)、GCP Workload Identity・Azure Managed Identity(各クラウドの同等機能)、IRSA(EKSのPodからAWS APIへ)を使えば、アプリに永続的なAPIキーを配布する必要がなくなります。
GitHub ActionsからAWSにデプロイする際も、API Keyを使わずOIDC Federationで一時認証を取るのが新しいベストプラクティスです。永続シークレットを減らせば、そもそも漏洩できるものが減ります。
なおシークレットとは別に、個人情報(PII)やクレカ情報も同レベルの厳格な管理が必要です。クレカ情報は自社保存せずStripe等に任せるのがベストプラクティス──保存しなければ、そもそも漏洩のしようがありません。
3つのシナリオで考える
個人開発・小規模の場合
GitHub SecretsとAWS SSM Parameter Store、.env.local の組み合わせで十分だと思います。開発中は .env.local(.gitignore 済み)、CI/CDはGitHub Secrets、本番はSSM Parameter Storeという使い分けです。GitHubのSecret Scanningは無料で標準有効になっていますので、この最小構成ならコストはほぼゼロに収まってしまいます。
中小SaaS企業の場合
AWS Secrets ManagerとOIDC Federation、GitLeaksの三点セットが本命です。Secrets Managerで自動ローテーションを回し、GitHub ActionsからAWSへはOIDCでAPI Keyレスにして、pre-commitでGitLeaksのチェックを入れます。永続APIキーを極力持たない設計に寄せていくのがポイントだと考えています。
大企業・規制業種の場合
マルチクラウドであればHashiCorp VaultとWorkload Identity、専門運用チームの体制に踏み込んで、Dynamic Secrets(動的発行)で永続シークレットを根絶する方向になります。金融・医療・政府系ではVault EnterpriseにHSM(FIPS 140-2認定)、監査ログ、職務分掌まで持ち上げる必要があります。「やっています」ではなく「証明できます」が求められる世界ですので、発行・利用・変更の全証跡を残して初めて監査を通せる水準になるのです。
AI判断軸 ― AIにシークレットを見せない
AIツールへの秘密情報漏洩が新しいリスク経路になった
AIコーディングアシスタント(GitHub Copilot・Claude Code・Cursor等)を使う開発フローでは、.envファイルや設定ファイルの中身がAIのコンテキストに入るリスクがあります。AIがAPI応答の一部として秘密情報を含むコードを提案し、そのままコミットされる事故も報告されています。
対策として必要なのは以下の3点です。
.envファイルをAIツールの除外対象に設定する(.cursorignore・.github/copilot-ignore等)- pre-commitフックでGitLeaks / TruffleHogを実行し、秘密情報のコミットを阻止する
- プロンプトに秘密情報を含む変数値を貼り付けない運用ルールの明文化
ゼロ秘密化がAI時代の理想形
OIDC FederationやWorkload Identityを使えば、CI/CDパイプラインやサービス間通信でAPI Keyを一切持たない構成が可能です。GitHub ActionsからAWSにデプロイする際も、OIDCトークンで一時クレデンシャルを取得する方式なら、リポジトリのSecretsに長期キーを保管する必要がありません。
秘密情報がゼロであれば、AIのコンテキストに漏洩するリスクもゼロです。ゼロ秘密化はセキュリティとAI活用の両面で最善策です。
やってはいけないこと
シークレット領域で事故る典型を、特に危険な6つに絞ります。どれも漏洩=即不正アクセスに直結します。
| 禁じ手 | なぜダメか → どうするか |
|---|---|
| ソースコードにハードコード | Git履歴に永久に残る。Uber事件(5,700万人流出)の原因 → Secrets Managerに集中する |
| .envをGitにコミット | 数秒でボットに拾われBitcoinマイナーが稼働 → .gitignore 先行 + 出たら即ローテーション |
| Slack / メール / Wikiで平文共有 | ログアーカイブで漏れる・退職者も見られる → Secrets Manager経由で配布する |
| 共通シークレットを全員で共有 | 誰が漏らしたか追跡不能 → 人数に関係なく個別発行する |
| シークレットをログに出力 | CloudWatch Logsに永久保存され漏洩 → マスキングを必須にする |
| ローテーション未実施で運用 | 「いつか漏れる」前提の保険がない → 自動ローテーションを設定する |
なお「暗号化して保存すれば安全」という過信も危険です。復号キーが近くに平文で置いてあれば意味がなく、KMS・Vaultで鍵と暗号文を分離管理するのが必須です。
筆者メモ — 「たった1行の誤コミット」が会社を傾けた事例
2016年に発覚したUberデータ流出事件では、社内エンジニアのプライベートGitHubに残っていたAWS認証情報を突かれ、約5,700万人分のドライバー・利用者データが流出しました。Uberは当初この事実を隠蔽し、攻撃者に10万ドルを「バグバウンティ」名目で支払って公表を先送りした結果、後の集団訴訟で1億4,800万ドル規模の和解金に発展しています。
2023年にはSamsung半導体部門でエンジニアが機密ソースコードをChatGPTに貼り付けて相談した結果、機密コードが外部学習対象になり得る状態になった事件が報じられ、同社はChatGPTの業務利用を全社禁止しました。「プロンプト欄に貼る」という行為が新しい漏洩経路として浮上した、AI時代ならではの事例です。
どちらも一人のうっかりが組織全体の評判を揺るがした事例です。個人の注意力に頼る設計は確率的にいつか破綻する──それを前提に、仕組みで防ぐ(Secret Scanning・AI用フィルタ・ゼロ秘密化)のがアーキテクトの責任です。
決めるべきこと — 自分のプロジェクトでの答えは?
以下の項目について、自分のプロジェクトの答えを1〜2文で言語化してみてください。曖昧なまま着手すると、必ず後から「なぜそう決めたんだっけ」が問われます。
- Secrets Managerの選定(AWS / Vault / Doppler)
- 開発環境の分離(本番シークレットを開発PCに置かない)
- Secret Scanningの導入(GitLeaks / GitHub標準)
- ローテーション頻度(30〜90日基準)
- ゼロ秘密化の範囲(IAM Role・Workload Identity・OIDC)
- AI開発時のポリシー(AIへの秘匿)
- 漏洩時の対応手順(即時失効・インシデント対応)
この記事に関連する記事
まとめ
本記事は秘密情報管理について、Secrets Manager・Secret Scanning・自動ローテーション・IAM Role/OIDCでのゼロ秘密化・AIにシークレットを見せない設計まで含めて解説しました。如何だったでしょうか。
ハードコード禁止、自動ローテーション、ゼロ秘密化を目指し、Secret Scanning+AIから隠す。これが2026年の秘密情報管理の現実解です。
次回は脆弱性診断(SAST・DAST・SBOM・依存ライブラリ管理)について解説します。
シリーズ目次に戻る → 『生成AI時代のアーキテクチャ超入門』の歩き方
本記事で扱った内容の詳細は AWS Secrets Manager も合わせて参考にしてください。
それでは次の記事も閲覧いただけると幸いです。
📚 シリーズ:生成AI時代のアーキテクチャ超入門(58/95)
