本記事について
当サイトを閲覧いただきありがとうございます。 本記事はシリーズ『生成AI時代のアーキテクチャ超入門』の「セキュリティアーキテクチャ」カテゴリ第7弾として、秘密情報管理(Secrets Management)について解説する記事です。
APIキー・パスワード・証明書・トークンなど一人のうっかりが会社ごと傾ける情報を保管・配布・ローテーションする仕組みです。GitHub に誤コミットされた AWS Access Key は数秒でボットに拾われ、Bitcoin マイニング用の超大型インスタンスが勝手に立ち上がる──シークレット漏洩は数時間で数千万円の被害に直結します。本記事では Vault/Secrets Manager/Cloud KMS の選定、ローテーション・最小権限・CI/CD 統合・誤コミット検知まで解説します。
このカテゴリの他の記事
なぜ秘密情報管理が必要か
漏洩がそのまま不正アクセスになる
シークレットが漏れれば、攻撃者は正規ユーザー・正規システムとして操作できます。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 経由で取得し、ディスクやコードには残さない運用にします。クラウド各社が標準サービスとして提供しているので、自前で暗号化ストレージを組む理由はほとんどありません。
flowchart TB
subgraph BAD_WAY["アンチパターン (絶対NG)"]
CODE[コードに直書き] -.→ GIT[(Git)]
ENV_FILE[.envをコミット] -.→ GIT
GIT -.->|パブリックリポジトリ<br/>= 数秒でBot拾う| LEAK[クレカ請求/<br/>マイニング被害]
end
subgraph GOOD_WAY["現代の標準"]
APP[アプリ] -->|起動時API| SM[Secrets Manager<br/>AWS/GCP/Azure/Vault]
SM -->|短命トークン| APP
SM -.|自動ローテーション| ROT[毎日/毎週<br/>キー更新]
end
classDef bad fill:#fee2e2,stroke:#dc2626;
classDef good fill:#dcfce7,stroke:#16a34a;
classDef sm fill:#dbeafe,stroke:#2563eb,stroke-width:2px;
class BAD_WAY,CODE,ENV_FILE,GIT,LEAK bad;
class GOOD_WAY,APP,ROT good;
class SM sm;
| サービス | 特徴 |
|---|---|
| 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(Protected Health Information=保護対象医療情報)保護・暗号化 |
ケース別の選び方
個人・小規模開発(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 で鍵を守り、シークレット発行・利用・変更を全て監査ログに残し、鍵管理者と利用者を組織的に分離する。ここまでやって監査を通せる水準になります。
よくある勘違い
「.envをコミットしたら履歴から消せばいい」
Git 履歴から完全削除は極めて困難です。一度パブリックに出たら即ローテーションが必須で、履歴消しは気休めにしかなりません。2016年の Uber 事件は、社内エンジニアのプライベート GitHub に誤って AWS 認証情報が残っていたのを突かれ、約5,700万人分のドライバー/利用者データが流出、開示遅延を理由に後の訴訟で1億4,800万ドルの和解金に発展しました。
「社内Gitなら安全」
退職者・離脱者が社内 Git から情報を持ち出す事故は多発しています。社内でも平文禁止が鉄則です。
「開発者が少ないから共通キーでOK」
誰が漏らしたか追跡不能になります。人数に関係なく個別に発行するのが基本です。
「シークレットは暗号化して保存すれば安全」
暗号化しても復号キーが近くに平文で置いてあれば意味がありません。KMS・Vault で鍵と暗号文を分離管理するのが必須です。
シークレット運用の段階別実務表
シークレット管理は「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 キーを持ち続け、漏洩リスクを累積させる |
2016年の Uber データ流出事件(GitHub 誤コミットの AWS 認証情報を突破口に、5,700万人分の流出 + 1.48億ドル和解金)、2023年の Samsung ChatGPT 貼付事件はどちらも、「一人のうっかり」が組織全体の評判を揺るがす事例の典型です。
シークレットは「持たないのが最高の管理」ゼロ秘密化(IAM Role/OIDC)を目指します。
AI時代の視点
AI 駆動開発(バイブコーディング)と AI 活用が前提になると、シークレット管理にはAI エージェントに対して秘匿するという新しい観点が加わります。AI がソースコードを学習・提案する時代には、AI に見せてよいもの/悪いものを厳密に分ける必要があります。
| AI時代のリスク | 対策 |
|---|---|
| AI がコード提案時にシークレットを含める | .env を AI に読ませない |
| AI にプロンプト経由で秘密送信 | 機密プロンプト検知 |
| AI コピペで流出 | ChatGPT・Copilot の利用ポリシー |
| エージェント用キーの漏洩 | 短命・スコープ限定 |
Cursor・Copilot・ChatGPT にシークレットを見せないためのフィルタリングや、AI 用のサンドボックス環境を用意するのが新しい常識です。2023年には Samsung の半導体部門でエンジニアがソースコードを ChatGPT に貼り付けてしまい、機密コードが外部学習対象になり得る状態になった事件が報じられ、同社は ChatGPT の業務利用を禁止しました。シークレットやコードをプロンプト欄に貼るという行為そのものが、新しい漏洩経路として浮上しているということです。
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への秘匿)
- 漏洩時の対応手順(即時失効・インシデント対応)
最終的な判断の仕方
秘密情報管理の核心は漏洩がそのまま不正アクセスになるという直結性です。暗号化も認証も、シークレットが漏れれば全て無効化されてしまいます。GitHub 誤コミット・社内 Wiki 平文保管・共通キー共有といったアンチパターンを組織的に禁止し、Secrets Manager での集中管理・自動ローテーション・Secret Scanning の三点セットを運用として定着させるのが合理的な判断です。さらに一歩進んで、IAM Role/Workload Identity/OIDC Federation でそもそもシークレットを持たない設計(ゼロ秘密)を目指すのが現代の方向性になっています。
もう一つの決定的な軸はシークレットをAIから隠すことです。Copilot/Cursor/ChatGPT がソースコードを学習・提案する時代、AI に見せてよいもの/悪いものを厳密に分ける必要があります。.env を AI に読ませない、プロンプトに混入させない、AI 用サンドボックス環境を用意する──これが新しい常識として加わりました。
選定の優先順位
- ハードコード禁止 — ソース・Wiki・Slack は即禁止、Secrets Manager に集中
- 自動ローテーション — 30〜90日で自動更新、人手を介さない
- ゼロ秘密化を目指す — IAM Role/Workload Identity/OIDC Federationで永続キーを減らす
- Secret Scanning + AIから隠す — pre-commitでGitLeaks、AIへの混入を防ぐフィルタ
「ハードコード禁止、自動ローテ、AIから隠す」最も事故が多い領域を、運用ではなく仕組みで抑え込むのがアーキテクトの仕事です。
まとめ
本記事は秘密情報管理について、Secrets Manager・Secret Scanning・自動ローテーション・IAM Role/OIDCでのゼロ秘密化・AIにシークレットを見せない設計まで含めて解説しました。如何だったでしょうか。
ハードコード禁止、自動ローテーション、ゼロ秘密化を目指し、Secret Scanning+AIから隠す。これが2026年の秘密情報管理の現実解です。
次回は脆弱性診断(SAST・DAST・SBOM・依存ライブラリ管理)について解説します。
シリーズ目次に戻る → 『生成AI時代のアーキテクチャ超入門』の歩き方
それでは次の記事も閲覧いただけると幸いです。
📚 シリーズ:生成AI時代のアーキテクチャ超入門(52/89)