本記事について
当サイトを閲覧いただきありがとうございます。 本記事はシリーズ『生成AI時代のアーキテクチャ超入門』の「セキュリティアーキテクチャ」カテゴリ第7弾として、秘密情報管理(Secrets Management)について解説する記事です。
APIキー・パスワード・証明書・トークンなど一人のうっかりが会社ごと傾ける情報を保管・配布・ローテーションする仕組みです。GitHub に誤コミットされた AWS Access Key は数秒でボットに拾われ、Bitcoin マイニング用の超大型インスタンスが勝手に立ち上がる──シークレット漏洩は数時間で数千万円の被害に直結します。本記事では Vault/Secrets Manager/Cloud KMS の選定、ローテーション・最小権限・CI/CD 統合・誤コミット検知まで解説します。
本記事のテーマについてさらに詳しく知りたい方は『セキュア・バイ・デザイン』も参考にしてみてください。
そもそも秘密情報管理とは何か
家の鍵の管理を想像してください。合鍵を何本も作って友人や業者に渡し、誰が持っているか把握していない状態は危険です。まして合鍵を玄関マットの下に置いておくのは鍵をかけていないのと同じです。
秘密情報管理(Secrets Management)は、システムが使うAPIキー・パスワード・証明書・トークンなどの「合鍵」を安全に保管・配布・回収する仕組みです。誰がどの鍵を持っているかを常に把握し、不要になった鍵は回収し、定期的に鍵を交換する──物理の鍵管理と同じことをデジタルの世界で自動化します。
もし秘密情報管理がなければ、パスワードがソースコードにハードコードされ、退職者のアクセスキーが何年も有効なまま放置され、1件の漏洩で全システムが丸裸になります。
なぜ秘密情報管理が必要か
漏洩がそのまま不正アクセスになる
シークレットが漏れれば、攻撃者は正規ユーザー・正規システムとして操作できます。WAF も MFA も認可ルールも、正規のキーを持っている相手には全て通過を許してしまいます。防御機構は無力で、被害額は桁違いに増えます。
GitHubに誤コミットする事故が頻発
「うっかり .env をコミット」「デバッグのつもりでログに API Key を出力」── これらの事故は毎日どこかで発生しています。1度パブリックに出たら「履歴から消せば大丈夫」ではなく、即ローテーション必須です。
規制要件を満たす必要がある
SOC 2(米国系 SaaS で事実上の標準になっているセキュリティ監査)、ISO 27001、PCI DSS── いずれもシークレットの安全な管理を要求します。監査で Git リポジトリや Wiki から平文のシークレットが見つかれば、即レッドカードです。
シークレットの種類
守るべきシークレットは多岐にわたります。どれか1つでも漏れれば致命的になる可能性があり、全種類を同じ厳しさで管理するのが鉄則です。
| 種類 | 例 |
|---|---|
| APIキー | Stripe・OpenAI・SendGrid など外部サービス連携 |
| DBパスワード | マスターパスワード・接続文字列 |
| 証明書・秘密鍵 | TLS 証明書・コード署名用・ホストキー |
| OAuthトークン | リフレッシュトークン |
| SSHキー | サーバーアクセス用の秘密鍵 |
| クラウド認証情報 | AWS IAM アクセスキー・GCP サービスアカウント |
| 暗号化キー | データ暗号化用のマスターキー |
アンチパターン — 絶対にやってはいけない扱い方
事故の多くは「やってはいけないパターンをやってしまった」ことが原因です。以下はどれも即座に禁止すべきで、レビューで見かけたら差し戻す対象です。
| アンチパターン | なぜ危険か |
|---|---|
| ソースコードにハードコード | Git履歴に永久に残り、追跡も削除も困難 |
| .envをGitにコミット | 公開リポジトリなら秒単位でボットに拾われる |
| Slack・メールで共有 | ログが残る、アーカイブ経由で漏れる |
| 社内Wikiに平文保管 | 退職者・離脱者からも閲覧可能 |
| 共通シークレットを全員で共有 | 誰が漏らしたか追跡不能 |
| ログに出力 | 監査ログ・CloudWatch 経由で漏洩 |
どれか1つでも運用に残っている組織は、即見直しが必要です。「Gitに push したシークレット」は「公開した」ではなく世界中のボットに渡したと同義、というのは業界で共有される定番の警告です。
Secrets Manager — 中央集約で管理する
シークレットを専用サービスで集中管理するのが現代の標準です。アプリは起動時に API 経由で取得し、ディスクやコードには残さない運用にします。クラウド各社が標準サービスとして提供しているので、自前で暗号化ストレージを組む理由はほとんどありません。
| サービス | 特徴 |
|---|---|
| AWS Secrets Manager | ローテーション自動化・IAM 連携が強力 |
| AWS Systems Manager Parameter Store | 安価・シンプル・小規模向け |
| Google Secret Manager | GCP ネイティブ統合 |
| Azure Key Vault | Azure 統合・暗号鍵管理も |
| HashiCorp Vault | OSS・マルチクラウド・機能最強 |
| Doppler・1Password | 開発者向け SaaS・UX が洗練 |
HashiCorp Vault が機能では頂点ですが、運用が重いのがネックです。AWS 単独ならクラウドマネージドで十分なケースが多く、Vault は「マルチクラウド + 動的シークレット必須」に踏み込んでから検討するのが現実的です。
シークレットのライフサイクル
シークレットは「発行 → 配布 → 利用 → ローテーション → 失効」というライフサイクルで管理します。どのフェーズにも漏洩リスクが潜んでいるため、全段階に対策が必要です。
| フェーズ | 対策 |
|---|---|
| 発行 | 強度の高い乱数・短命トークン推奨 |
| 配布 | 暗号化通信・最小配布 |
| 保管 | Secrets Manager・暗号化 |
| 利用 | 環境変数・メモリのみ・ログ禁止 |
| ローテーション | 自動・定期的 |
| 失効 | 速やかに・漏洩時は即時 |
定期ローテーションは「いつか漏れる」前提の保険で、90日程度が一般的な目安です。手動でやる限り必ず忘れられるので、Secrets Manager の自動ローテーション機能を素直に使うのが安全です。
開発環境での扱い — 本番シークレットは開発PCに置かない
開発中だからといって本番シークレットを開発PCに置くべきではありません。開発用には別のシークレット(モック・サンドボックス環境)を使い、本番アクセスは厳格に制限します。
| 用途 | 推奨される扱い |
|---|---|
| ローカル開発 | .env.local + .gitignore + モック |
| CI/CD | GitHub Secrets・GitLab CI Variables |
| ステージング | Secrets Manager(本番と分離) |
| 本番 | Secrets Manager + 監査ログ |
.env ファイルを .gitignore に入れるのは最低ライン。できればリポジトリ作成直後の空コミットで .gitignore を先に入れる習慣を持つと安全です。
Secret Scanning — 誤コミットを自動検知する
ソースコードにシークレットが混入していないかを自動検知する仕組みです。GitHub は全リポジトリで Secret Scanning を標準提供しており、主要サービスの API キーを検知すると自動通知が飛びます。
| ツール | 用途 |
|---|---|
| GitHub Secret Scanning | GitHub 標準・無料 |
| GitLeaks | OSS・pre-commit hook で事前検知 |
| TruffleHog | OSS・Git 履歴全スキャン |
| Detect-secrets | Yelp 製 OSS |
| GitGuardian | SaaS・高機能 |
pre-commit hook で GitLeaks を走らせれば、コミット時点で誤混入を検知できます。「コミットしてから気づく」を防ぐ最後の砦で、開発者全員に配るのが理想です。
ローテーション戦略
シークレットは必ず定期的に変更するのが原則です。いつ漏れているか分からない以上、定期的に失効させることが唯一の防御策になります。手動ローテーションは必ず忘れられるため、自動化が必須と割り切るべきです。
| シークレット種別 | 推奨頻度 |
|---|---|
| DBパスワード | 30〜90日 |
| APIキー | 30〜90日 |
| TLS証明書 | 60〜90日(Let’s Encryptは自動) |
| OAuth リフレッシュトークン | セッション単位 |
| 暗号化キー | 年次 |
| サービスアカウント | 30日 |
AWS Secrets Manager・Vault は自動ローテーション機能を備えており、人手を介さず更新できます。「人間が触らないと回らないローテーション」は存在しない、と割り切って設計します。
ゼロ秘密アーキテクチャ — そもそもシークレットを持たない
一歩踏み込むと、シークレットを持たない設計という選択肢が現代では有力です。IAM Role・Workload Identity・IRSA(IAM Roles for Service Accounts)を使えば、アプリに永続的な API キーを配布する必要がなくなります。
| 技術 | 用途 |
|---|---|
| AWS IAM Role | EC2・Lambda・ECS が一時認証情報を自動取得 |
| GCP Workload Identity | GKE・Cloud Run |
| Azure Managed Identity | Azure 全般 |
| IRSA | EKS(K8s Pod → AWS API) |
| OIDC Federation | GitHub Actions → AWS の一時認証 |
GitHub Actions から AWS にデプロイする際も、API Key を使わず OIDC で一時認証を取るのが新しいベストプラクティスです。永続シークレットを減らせば、そもそも漏洩できるものが減ります。
機密データとPIIの扱い
シークレットとは別に、個人情報(PII、Personally Identifiable Information=個人を特定できる情報)や機密ビジネスデータも厳密な管理が必要です。PII の漏洩は法規制上も制裁金対象で、シークレットと同レベルの扱いが求められます。
| データ種別 | 推奨対策 |
|---|---|
| 個人情報(PII) | 暗号化・マスキング・アクセスログ |
| クレカ情報 | PCI DSS 準拠・トークン化 |
| マイナンバー | 法的管理・厳格な保管 |
| ヘルスケア情報 | HIPAA 準拠・暗号化 |
クレカ情報は自社保存せず Stripe 等に任せるのがベストプラクティスです。保存しなければ、そもそも漏洩のしようがありません。
判断基準①:組織規模
シークレット管理の重装度は規模で決まります。小規模なら GitHub Secrets + クラウドのマネージドサービスで十分、大企業は Vault 中心の統合基盤が必要になります。
| 規模 | 推奨される基盤 |
|---|---|
| 個人・小規模 | AWS SSM Parameter Store / GitHub Secrets |
| スタートアップ | AWS Secrets Manager |
| 中堅 | Vault or Doppler |
| 大企業 | Vault Enterprise + HSM |
判断基準②:コンプライアンス
規制対応が必要な業種では、監査ログ・ローテーション履歴・アクセス制御の全てを証跡として残せる必要があります。「やっています」ではなく「証明できます」が求められる世界です。
| 規制 | 主要要件 |
|---|---|
| SOC 2 | ローテーション・ログ・アクセス制御 |
| ISO 27001 | 文書化された管理プロセス |
| PCI DSS | 鍵管理の厳格なルール |
| HIPAA | PHI保護・暗号化 |
ケース別の選び方
個人・小規模開発(1〜5人)
GitHub Secrets + AWS SSM Parameter Store + .env.local の組み合わせで十分です。開発中は .env.local(.gitignore 済)、CI/CD は GitHub Secrets、本番は SSM Parameter Store。最小構成でコストはほぼゼロで済みます。
スタートアップ・中規模SaaS
AWS Secrets Manager + OIDC Federation + GitLeaks の三点セットが本命です。Secrets Manager で自動ローテーション、GitHub Actions → AWS は OIDC で API Key レスに、pre-commit で GitLeaks チェック。永続 API キーを極力持たない設計に寄せるのがポイントです。
マルチクラウド・中堅企業
HashiCorp Vault + Workload Identity + 専門運用チームの体制に踏み込みます。AWS / GCP / Azure / オンプレを跨いでシークレットを一元管理し、Dynamic Secrets(動的発行)で永続シークレットを根絶する方向です。Vault 運用には1〜2名の専属が必要になる点は覚悟が要ります。
規制業種(金融・医療・政府)
Vault Enterprise + HSM + 監査ログ + 職務分掌まで持ち上げます。FIPS 140-2 認定の HSM で鍵を守り、シークレット発行・利用・変更を全て監査ログに残し、鍵管理者と利用者を組織的に分離する。ここまでやって監査を通せる水準になります。
シークレット運用の段階別実務表
シークレット管理は「Secrets Manager に入れて終わり」ではなく、ライフサイクル全体を設計するものです。
| フェーズ | やること | 自動化ツール | SLA |
|---|---|---|---|
| 発行 | 強度の高い乱数 + 短命推奨 | Vault Dynamic Secrets | — |
| 配布 | 暗号化通信・Secrets Manager 経由 | AWS Secrets Manager / Vault | — |
| 保管 | KMS 暗号化 + アクセス制御 | マネージド Secrets Manager | — |
| 利用 | 環境変数・メモリのみ・ログ禁止 | アプリ起動時に API 取得 | — |
| ローテーション | 自動・定期的 | Secrets Manager / Vault 自動ローテーション | 30〜90日 |
| 失効 | 漏洩時は即時 | インシデント対応プレイブック | 5分以内 |
| 監視 | Secret Scanning で誤コミット検知 | GitHub Secret Scanning / GitLeaks | コミット時 |
ローテーション頻度の目安は、DB パスワード 30〜90日、API キー 30〜90日、TLS 証明書 60〜90日(Let’s Encrypt は自動)、OAuth Refresh Token はセッション単位、暗号化キー年次、サービスアカウント 30日。手動ローテーションは忘れられる前提で自動化が必須です。
シークレットの寿命は短ければ短いほど安全です。永続キーは極限まで排除するのが方向性です。
やってはいけないこと
シークレット領域で事故る典型パターン。どれも漏洩=即不正アクセスに直結します。
| 禁じ手 | なぜダメか |
|---|---|
| ソースコードにハードコード | Git 履歴に永久に残る。Uber 事件(5,700万人流出、1.48億ドル和解金)の原因 |
| .envをGitにコミット | GitHub のボットが数秒で拾う。即 Bitcoin マイナー稼働 |
| Slack/メール/Wikiで平文共有 | ログアーカイブで漏れる、退職者も見られる |
| 共通シークレットを全員で共有 | 誰が漏らしたか追跡不能 |
| シークレットをログに出力 | 監査ログ経由で漏洩、CloudWatch Logs に永久保存 |
| AWS Access KeyをパブリックGitHubにpush | 数時間で Bitcoin マイナー用大型インスタンスが勝手に起動、数十万円の請求 |
| ローテーション未実施で運用 | 「いつか漏れる」前提の保険なし |
.env.exampleに本物の鍵を残す | 検証用と思い込んで半年後に漏洩発覚 |
| Samsung事件のようにChatGPTに機密コード貼付 | 外部学習対象、2023年に同社が ChatGPT 業務利用を禁止 |
| Dependabotアラートを無視して放置 | 初日に500件並び通知が壁紙化、通知疲れで本物のアラートも見逃し |
| ゼロ秘密化(IAM Role/OIDC)を検討しない | 永続 API キーを持ち続け、漏洩リスクを累積させる |
| 「.envをコミットしても履歴から消せばいい」と油断 | Git履歴から完全削除は困難、即ローテーション必須 |
| 「社内Gitなら安全」と平文で保管 | 退職者による持ち出し事故多発、社内でも平文禁止 |
| 「開発者が少ないから共通キーでOK」と妥協 | 誰が漏らしたか追跡不能、人数に関係なく個別に発行が基本 |
| 「暗号化して保存すれば安全」と過信 | 復号キーが近くに平文で置いてあれば意味なし、KMS・Vault で鍵と暗号文を分離管理が必須 |
2016年の Uber データ流出事件(GitHub 誤コミットの AWS 認証情報を突破口に、5,700万人分の流出 + 1.48億ドル和解金)、2023年の Samsung ChatGPT 貼付事件はどちらも、「一人のうっかり」が組織全体の評判を揺るがす事例の典型です。
シークレットは「持たないのが最高の管理」ゼロ秘密化(IAM Role/OIDC)を目指します。
AI判断軸
| AI時代に有利 | AI時代に不利 |
|---|---|
| Secrets Managerで集中管理 | ソースコードにハードコード |
| Secret Scanning(pre-commit検知) | 誤コミット検知なし |
| ゼロ秘密化(IAM Role/OIDC) | 永続API Key運用 |
| AIにシークレットを見せないフィルタ | プロンプトに機密情報を混入 |
- ハードコード禁止 — ソース・Wiki・Slackは即禁止、Secrets Managerに集中
- 自動ローテーション — 30〜90日で自動更新、人手を介さない
- ゼロ秘密化を目指す — IAM Role/Workload Identity/OIDC Federationで永続キーを減らす
- Secret Scanning + AIから隠す — pre-commitでGitLeaks、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活用の両面で最善策です。
筆者メモ — 「たった1行の誤コミット」が会社を傾けた事例
シークレットの誤コミットが数億円単位の損害に直結した事例は、業界で半ば語り草になっています。
2016年に発覚した Uber データ流出事件では、社内エンジニアのプライベート GitHub に残っていた AWS 認証情報を突かれ、約5,700万人分のドライバー・利用者データが流出しました。Uber は当初この事実を隠蔽し、攻撃者に10万ドルを「バグバウンティ」名目で支払って公表を先送りした結果、後の集団訴訟で1億4,800万ドル規模の和解金に発展しています。「たった1個のAPIキー」が、会社の評判と財務を同時に傷つけた典型例です。
もう一つ、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)
- AI開発時のポリシー(AIへの秘匿)
- 漏洩時の対応手順(即時失効・インシデント対応)
この記事に関連する記事
https://senkohome.com/arch-intro-security-iam/ https://senkohome.com/arch-intro-security-network/ https://senkohome.com/arch-intro-security-overview/
まとめ
本記事は秘密情報管理について、Secrets Manager・Secret Scanning・自動ローテーション・IAM Role/OIDCでのゼロ秘密化・AIにシークレットを見せない設計まで含めて解説しました。如何だったでしょうか。
ハードコード禁止、自動ローテーション、ゼロ秘密化を目指し、Secret Scanning+AIから隠す。これが2026年の秘密情報管理の現実解です。
次回は脆弱性診断(SAST・DAST・SBOM・依存ライブラリ管理)について解説します。
シリーズ目次に戻る → 『生成AI時代のアーキテクチャ超入門』の歩き方
本記事で扱った内容の詳細は AWS Secrets Manager も合わせて参考にしてください。
それでは次の記事も閲覧いただけると幸いです。
📚 シリーズ:生成AI時代のアーキテクチャ超入門(52/89)
