DevSecOps

Secret Management

シークレット管理

Category: DevSecOps / Updated: 2026-05-26

📖

Overview

シークレット管理(Secret Management)とは、アプリケーションやインフラストラクチャで使用されるAPIキー、データベースパスワード、暗号鍵、証明書、トークンなどの機密情報(シークレット)を安全に保管・配布・ローテーションするための体系的なプラクティスです。開発から本番運用まで、ライフサイクル全体を通じてシークレットの漏洩を防止し、最小権限の原則に基づいたアクセス制御を実現します。

従来、シークレットはソースコード内にハードコーディングされたり、設定ファイルに平文で保存されたりすることが多く、GitリポジトリやCI/CDパイプラインを通じて意図せず漏洩するリスクが高い状態でした。HashiCorp VaultAWS Secrets Managerなどの専用ツールを導入することで、シークレットの一元管理、動的な生成、自動ローテーション、詳細な監査ログの記録が可能になります。

現代のDevSecOps環境では、シークレット管理はセキュリティの基盤です。git-secretsTruffleHogなどのシークレットスキャンツールをCI/CDパイプラインに組み込み、コードリポジトリへのシークレット混入を自動検出することが不可欠です。さらに、エンベロープ暗号化によるシークレットの多層防御や、定期的なローテーションポリシーの適用により、万が一の漏洩時にも被害を最小限に抑えることができます。

🔬

Details

Vaultソリューション(HashiCorp Vault)

HashiCorp Vaultは、シークレット管理のデファクトスタンダードとなっているオープンソースツールです。静的シークレットの安全な保管に加え、データベース認証情報やクラウドIAMトークンなどの動的シークレットを必要に応じて自動生成し、使用後に自動的に破棄する機能を備えています。

Vaultは複数の認証バックエンド(LDAP、OIDC、Kubernetes Service Account、AWS IAMなど)をサポートし、きめ細かいポリシーベースのアクセス制御を実現します。シークレットへのすべてのアクセスは監査ログに記録され、誰がいつどのシークレットにアクセスしたかを追跡できます。

クラウドネイティブなシークレット管理(AWS Secrets Manager)

AWS Secrets Managerは、AWSが提供するフルマネージドのシークレット管理サービスです。RDSやRedshift等のAWSサービスとネイティブに統合され、データベースパスワードの自動ローテーションを簡単に設定できます。Azure Key VaultやGoogle Cloud Secret Managerも同様の機能を提供しています。

クラウドネイティブなシークレット管理サービスは、KMSとの統合による暗号化、IAMポリシーによるアクセス制御、CloudTrailによる監査ログなど、クラウドエコシステムとのシームレスな連携が最大の強みです。マルチリージョンレプリケーションにより、災害復旧シナリオにも対応できます。

シークレットスキャン(git-secrets / TruffleHog)

git-secretsは、AWSが開発したツールで、gitのpre-commitフックとして動作し、AWSアクセスキーやシークレットキーなどの機密情報がコミットに含まれることを防止します。カスタムパターンの追加も可能で、組織固有のシークレット形式にも対応できます。

TruffleHogは、Gitリポジトリのコミット履歴全体をスキャンし、高エントロピー文字列や既知のシークレットパターンを検出するツールです。過去のコミットに含まれる漏洩済みシークレットの発見にも有効で、GitHub ActionsやGitLab CI/CDとの統合が容易です。GitHubが提供するSecret Scanningも、パートナープログラムを通じて多数のサービスプロバイダーのトークンパターンを自動検出します。

シークレットローテーション

シークレットローテーションとは、定期的にシークレットの値を更新し、古い値を無効化するプロセスです。ローテーションにより、漏洩したシークレットの有効期間を制限し、不正アクセスのリスクを低減します。理想的には、アプリケーションのダウンタイムなしにローテーションを実行できる仕組みが必要です。

自動ローテーションでは、新しいシークレットの生成、アプリケーションへの配布、古いシークレットの無効化という一連のプロセスを自動化します。デュアルシークレット戦略(2つの有効なシークレットを同時に保持し、ローリングアップデートで切り替える)により、ローテーション中のサービス中断を回避できます。

エンベロープ暗号化

エンベロープ暗号化(Envelope Encryption)は、シークレットを保護するための多層暗号化手法です。データを暗号化するデータ暗号鍵(DEK)と、そのDEKを暗号化する鍵暗号鍵(KEK)の2層構造により、暗号鍵の管理と実際のデータ暗号化を分離します。

AWS KMS、Google Cloud KMS、Azure Key Vaultなどのクラウドサービスは、エンベロープ暗号化をネイティブにサポートしています。KEKはHSM(Hardware Security Module)内で保護され、外部に取り出すことができないため、たとえ暗号化されたデータとDEKが漏洩しても、KEKなしにはデータを復号できません。

Kubernetes環境でのシークレット管理

Kubernetes Secretsはデフォルトではetcdにbase64エンコードで保存されるだけであり、暗号化されていないため、そのままでは安全とは言えません。External Secrets Operatorを使用してVaultやAWS Secrets Managerから動的にシークレットを取得する方法や、Sealed SecretsでGitリポジトリに暗号化されたシークレットを安全に保存する方法が推奨されます。

また、CSI Secrets Store Driverを使用すると、シークレットをKubernetes Secretとしてではなく、ボリュームマウント経由でPodに直接注入できます。これにより、etcdへのシークレット保存を完全に回避し、メモリ上でのみシークレットを扱うことが可能になります。

🛡️

Security Measures

  • 01
    専用シークレット管理ツールの導入:シークレットをソースコードや設定ファイルにハードコーディングせず、HashiCorp VaultやAWS Secrets Managerなどの専用ツールで一元管理してください。環境変数での受け渡しも、プロセスリストやクラッシュダンプからの漏洩リスクがあるため、可能な限りシークレット管理サービス経由での取得を推奨します。
  • 02
    CI/CDパイプラインへのシークレットスキャン統合:git-secrets、TruffleHog、GitHub Secret Scanningなどのツールをpre-commitフックおよびCI/CDパイプラインに組み込み、シークレットのコミットを自動的にブロックしてください。既存リポジトリの全履歴スキャンも定期的に実施し、過去に漏洩したシークレットの無効化を行いましょう。
  • 03
    自動ローテーションポリシーの適用:すべてのシークレットに有効期限を設定し、自動ローテーションの仕組みを構築してください。データベースパスワードは90日以内、APIキーは180日以内のローテーションを推奨します。動的シークレットを活用して、使い捨ての短寿命認証情報を発行する方式も有効です。
  • 04
    最小権限の原則に基づくアクセス制御:シークレットへのアクセス権限は、各アプリケーションやサービスが必要とする最小限のシークレットのみに制限してください。ロールベースアクセス制御(RBAC)を適用し、開発者が本番環境のシークレットに直接アクセスできないよう、環境ごとに分離されたシークレットストアを使用しましょう。
  • 05
    エンベロープ暗号化による多層防御:保存時のシークレットはエンベロープ暗号化で保護し、鍵暗号鍵(KEK)はHSMやクラウドKMSで管理してください。暗号化されたシークレットと暗号鍵を別々のストレージに保管することで、単一の侵害ポイントからの全シークレット漏洩を防止できます。
  • 06
    包括的な監査ログとアラートの設定:すべてのシークレットへのアクセス・変更・ローテーションイベントの監査ログを記録し、異常なアクセスパターン(深夜の大量アクセス、未知のIPからのアクセスなど)に対するリアルタイムアラートを設定してください。インシデント発生時に、影響範囲を迅速に特定できる体制を整えましょう。
⚠️

Incidents

📋 Uber社GitHubリポジトリからのAWSキー漏洩(2016年)

2016年、Uber社の開発者がプライベートGitHubリポジトリにAWSのアクセスキーをハードコーディングしていたことが判明しました。攻撃者はこのキーを使用してAWS S3バケットにアクセスし、約5,700万人の乗客と運転手の個人情報(氏名、メールアドレス、電話番号、運転免許証番号)を窃取しました。

Uber社はこの漏洩を1年以上隠蔽し、攻撃者に10万ドルの「口止め料」を支払っていたことも後に発覚しました。事件後、Uber社はシークレット管理ツールの導入とGitリポジトリの自動スキャンを義務化しました。この事例は、シークレットのハードコーディングがもたらす壊滅的なリスクを象徴しています。

📋 CircleCI社シークレット大量漏洩インシデント(2023年)

2023年1月、CI/CDサービス大手のCircleCI社で大規模なセキュリティインシデントが発生しました。攻撃者が従業員のラップトップを経由して本番環境に侵入し、CircleCIに保存されていたすべての顧客のシークレット(環境変数、コンテキスト、プロジェクトAPIトークンなど)が漏洩した可能性があると発表されました。

CircleCIは全顧客に対してすべてのシークレットの即座のローテーションを要請し、業界全体に大きな衝撃を与えました。この事例は、サードパーティCI/CDサービスにシークレットを保管するリスクと、迅速なローテーション能力の重要性を浮き彫りにしました。

📋 Samsung社GitLabサーバーからのシークレット漏洩(2019年)

2019年、Samsung社のエンジニアが社内のGitLabインスタンスを誤ってインターネットに公開し、パスワードも設定されていない状態でした。セキュリティ研究者がこの公開インスタンスを発見し、複数のプロジェクトのソースコードとともに、AWSアカウントの認証情報、GitLabのプライベートトークン、証明書の秘密鍵などが含まれていることを報告しました。

一部のリポジトリにはSmartThingsプラットフォームのバックエンドコードが含まれており、顧客データへのアクセスにつながる可能性がありました。Samsung社は報告を受けて速やかにアクセスを遮断しましたが、シークレットの分散管理と公開設定の管理不備が同時に発生した典型的な事例となりました。

🔗

Related Terms