LESSON 30分

ストーリー

田中VPoE
セキュリティパイプラインでコードの脆弱性を検出できるようになった。次は「シークレット管理」だ。パイプライン自体が安全でも、APIキーやパスワードの管理が杜撰なら全てが無意味になる
あなた
半年前にうちの組織でもAPIキーがGitHubに公開されるインシデントがありましたよね
田中VPoE
まさにそれだ。GitHubに公開されたシークレットは数秒で自動スキャンされ、悪用される。公開から悪用までの時間は年々短くなっている。シークレット管理は「漏れた時にどうするか」ではなく「漏れないようにどう設計するか」が重要だ
あなた
環境変数にAPIキーを入れるのでは不十分ですか?
田中VPoE
不十分だ。環境変数はログに出力されることがある。プロセスのメモリダンプで露出する。コンテナの環境変数はdocker inspectで見える。専用のシークレット管理基盤が必要だ

シークレットとは

シークレットの種類

種類リスク
APIキーAWS Access Key, Stripe API Key不正利用、料金発生
データベース認証情報PostgreSQL接続文字列データ漏洩、改ざん
暗号鍵AES-256キー、RSA秘密鍵暗号化の無力化
OAuth/JWTシークレットクライアントシークレット、署名鍵認証のバイパス
TLS証明書/秘密鍵サーバー証明書の秘密鍵通信の傍受
サービスアカウントトークンKubernetes ServiceAccountインフラへの不正アクセス
SSH鍵デプロイキー、サーバーアクセス鍵サーバーへの不正アクセス

シークレット漏洩の統計

指標数値
GitHubで年間検出されるシークレット数百万件以上
公開から悪用までの平均時間数分〜数時間
シークレット漏洩が原因のセキュリティインシデント割合約20%
企業の平均シークレット数数千〜数万件
シークレットのスプロール率(管理外シークレット)約70%

シークレット管理のアンチパターン

避けるべきパターン

アンチパターン問題点代替案
ソースコードへのハードコードgit historyに残る、全開発者に公開シークレット管理サービス
環境変数(平文)ログ出力、docker inspect、プロセス一覧で露出シークレット管理サービスから動的取得
設定ファイル(.env)誤コミット、バックアップ経由の漏洩.gitignore + シークレット管理サービス
共有シークレット誰がアクセスしたか追跡不能、ローテーション困難個人/サービス別のシークレット
長期間有効なシークレット漏洩時の影響期間が長い短期間トークン + 自動ローテーション
暗号化されていないバックアップバックアップ経由の漏洩暗号化バックアップ
危険なパターン:

// ハードコード(最悪)
const apiKey = "sk-live-abc123def456";

// .env ファイル(git管理外でも危険)
// .env
DATABASE_URL=postgres://user:password@host:5432/db

// CI/CD の環境変数(改善の余地あり)
env:
  AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
  # → プロセス環境変数として全サブプロセスに公開

// 推奨パターン
// アプリケーション起動時にVaultから動的取得
const dbPassword = await vault.read("secret/data/myapp/database");

シークレット管理のアーキテクチャ

理想的なアーキテクチャ

シークレット管理の階層:

Layer 1: シークレットストア(Source of Truth)
├── HashiCorp Vault
├── AWS Secrets Manager
├── Azure Key Vault
└── Google Secret Manager

Layer 2: シークレット配布
├── Kubernetes Secrets(Vault Agent Injector経由)
├── AWS Parameter Store(Systems Manager)
├── 環境変数(Vault Agent経由で動的設定)
└── ファイルマウント(tmpfs経由、一時的)

Layer 3: アプリケーション統合
├── SDK/ライブラリ(Vault SDK, AWS SDK)
├── Sidecar/Init Container(Vault Agent)
├── CSI Driver(Secret Store CSI Driver)
└── 外部シークレット同期(External Secrets Operator)

Layer 4: 監査と監視
├── アクセスログ(誰が何のシークレットを読んだか)
├── 異常検出(通常と異なるアクセスパターン)
├── アラート(高感度シークレットへのアクセス通知)
└── コンプライアンスレポート

クラウド別のシークレット管理サービス比較

機能AWS Secrets ManagerHashiCorp VaultAzure Key VaultGCP Secret Manager
自動ローテーションあり(RDS, Redshift等)あり(プラグイン)ありあり
動的シークレットなしあり(DB認証情報等)なしなし
マルチクラウドなしありなしなし
暗号化AES-256(KMS)AES-256-GCMHSM/ソフトウェアEnvelope暗号化
監査ログCloudTrail内蔵監査ログAzure MonitorCloud Audit Logs
料金$0.40/シークレット/月OSS無料 / Enterprise有料$0.03/操作$0.06/10,000操作
PKI(証明書発行)ACM(別サービス)あり(内蔵PKI)ありなし

「マルチクラウドや複雑な認証要件がある場合はVault、AWSに閉じるならSecrets Managerが現実的だ。重要なのは、どのサービスを選ぶかより、シークレットを一元管理する仕組みを作ることだ」 — 田中VPoE


シークレット管理の基本原則

原則内容実装例
最小権限必要最小限のシークレットのみアクセス可能にするVault ポリシーでパス単位のアクセス制御
一元管理シークレットの散在(スプロール)を防ぐ全シークレットをVault/Secrets Managerに集約
暗号化保存時・転送時ともに暗号化するVault の暗号化ストレージ + TLS通信
監査すべてのアクセスを記録するVault の監査ログ + CloudTrail
ローテーションシークレットを定期的に更新する自動ローテーション(30-90日)
短期間トークン長期間有効なシークレットを避けるVault の動的シークレット(TTL: 1時間)
検出と防止シークレットの漏洩を検出・防止するGitleaks + GitHub Secret Scanning

まとめ

ポイント内容
シークレットの種類APIキー、DB認証情報、暗号鍵、トークン、証明書等
アンチパターンハードコード、平文環境変数、共有シークレット、長期間有効
アーキテクチャシークレットストア→配布→アプリ統合→監査の4層構造
基本原則最小権限、一元管理、暗号化、監査、ローテーション、短期間トークン

チェックリスト

  • シークレットの種類とそれぞれのリスクを理解した
  • シークレット管理のアンチパターンを列挙できる
  • シークレット管理の4層アーキテクチャを説明できる
  • クラウド別のシークレット管理サービスを比較できる

次のステップへ

次は「Vault設計パターン」を学びます。HashiCorp Vaultを中心に、エンタープライズ向けのシークレット管理基盤の設計方法を身につけましょう。


推定読了時間: 30分