キーのローテーションと検知
キーをローテーションし、漏洩を検知します。
「キーのローテーションと検知」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
キーをローテーションする理由
キーローテーションとは、シークレットを定期的に新しいものへ置き換え、古いものを廃止する運用です。完全に安全に保存されたキーであっても、ローテーションにはメリットがあります。
- 露出期間を制限する:キーが気づかれないまま漏洩していても、ローテーションによって無効化できます。
- 暗号処理上の消耗を減らす:1 つのキーで暗号化されるデータ量を減らせます。
- コンプライアンス要件を満たす:PCI DSS などの基準では、定期的なローテーションが義務付けられています。
- 退職者のアクセスを排除する:元従業員が知っていた認証情報を使えなくできます。
基本的な考え方は、シークレットが変わる頻度が高いほど、攻撃者にとっての価値が低下するということです。ローテーションにより、漏洩を恒久的な問題ではなく一時的な問題にできます。
ローテーションのライフサイクル
単純なローテーションでは、古いキーを削除して新しいキーを作成するため、利用者が古いキーを保持していると即座に動作しなくなり、障害が発生します。安全なローテーションでは、有効期間を重複させます。
- 1. 生成:既存のキーと並行して新しいキーを生成します。
- 2. 配布:すべての利用者に新しいキーを配布します。
- 3. 有効化:新しい操作には新しいキーを使用します。
- 4. 猶予期間:利用者が切り替える間、両方のキーを有効にしておきます。
- 5. 廃止:誰も使用していないことを確認してから、古いキーを失効させます。
この2 つのキーの重複期間が、ゼロダウンタイムのローテーションの基盤です。
実践的なゼロダウンタイムローテーション
トラフィックを途切れさせずにローテーションするには、猶予期間中、サービスが古いキーと新しいキーの両方を受け入れる必要があります。検証側は、受信したトークンを現在有効なキーのいずれかと照合します。
署名キーの場合は、複数の公開キーを公開し、ヘッダーのキー ID(kid)でトークンの署名に使われたキーを特定します。コンシューマーは一致するキーを自動的に選択します。
テレメトリによって古いキーへのトラフィックがゼロになったことを確認してから、古いキーを廃止します。
# A JWKS endpoint publishes multiple valid public keys.
# Tokens carry a 'kid' so verifiers select the right one,
# allowing old and new keys to coexist during rotation.
{
"keys": [
{ "kid": "2024-q1", "kty": "RSA", "n": "...", "e": "AQAB" },
{ "kid": "2024-q2", "kty": "RSA", "n": "...", "e": "AQAB" }
]
}ローテーションの自動化
手動ローテーションは実施されることが少なく、エラーが起きやすく、プレッシャー下では省略されがちです。自動化してください。クラウドやVaultのプラットフォームでは、人手を介さずにスケジュールに従ってローテーションを実行できます。
- AWS Secrets Managerは、ローテーション用のLambdaを実行し、新しい認証情報を作成してテストしたうえで、それを昇格させます。
- HashiCorp Vaultはルート認証情報をローテーションし、短命の動的シークレットを発行するため、ローテーションが継続的に行われます。
- Cloud KMSは、固定間隔で暗号化キーを自動ローテーションできます。
自動ローテーションは、漏えいが疑われる場合にも最も信頼できる対応です。1つのコマンドまたはスケジュールで、すべての環境に適用できます。
# Enable automatic rotation every 30 days in AWS Secrets Manager
aws secretsmanager rotate-secret \
--secret-id prod/billing/db \
--rotation-lambda-arn arn:aws:lambda:...:func:rotate-pg \
--rotation-rules AutomaticallyAfterDays=30暗号化キーと認証情報のローテーション
パスワードのローテーションは簡単です。新しいものを発行し、利用側を更新します。一方、暗号化キーのローテーションは、古いデータが古いキーで暗号化されているため、より困難です。
標準的な解決策はエンベロープ暗号化です。データをオブジェクトごとのデータキーで暗号化し、そのデータキーをマスターのキー暗号化キー(KEK)で暗号化します。ローテーションでは、データセット全体ではなく、小さなデータキーだけを新しいKEKで再暗号化します。
VaultのTransitエンジンは、バージョン付きキーによってこの処理を行います。各暗号文の暗号化に使われたバージョンを追跡し、最新バージョンに再ラップできます。
# Rotate a Transit key to a new version
vault write -f transit/keys/orders-key/rotate
# Rewrap old ciphertext under the newest key version
# (cheap - re-encrypts the data key, not the whole payload)
vault write transit/rewrap/orders-key ciphertext='vault:v1:abc...'緊急ローテーション
定期ローテーションはセキュリティ衛生のためですが、緊急ローテーションは侵害への対応です。キーが侵害されたことが判明した場合や、その疑いがある場合は、時間のかかる猶予期間を設けず、必要であれば短時間の中断を受け入れて直ちにローテーションします。
準備しておくことで、この事態にも対応できます。
- シークレットの種類ごとにローテーションするための、テスト済みのランブックを用意します。
- 各シークレットのすべての利用者を事前に把握します。
- 緊急ローテーションを調査作業ではなく1つのコマンドで実行できるよう、自動化を準備しておきます。
緊急ローテーションの速さが、侵害による被害の規模を直接左右します。
漏えいの検出:シークレットスキャン
ローテーションは既知の漏えいに対処し、検出は未知の漏えいを見つけます。シークレットスキャナーは、認証情報のパターンを求めてコード、履歴、ログ、アーティファクトを検索します。
多層防御のため、複数の層でスキャンします。
- コミット前 リポジトリに入る前にシークレットをブロックします。
- CIパイプライン ローカルフックをすり抜けたものを検出します。
- リポジトリ全体 完全な履歴を定期的に深くスキャンします。
- プラットフォーム側 push時にGitHub/GitLabのシークレットスキャンを実行します。
gitleaksやtrufflehogなどのツールは、正規表現とエントロピー分析を使って、キーのように見えるランダム性の高い文字列を見つけます。
# CI step: fail the build if a secret is found in the diff
gitleaks detect --source . --redact --exit-code 1
# Verify candidates by testing them live (trufflehog)
trufflehog git file://. --only-verified --jsonエントロピーとパターンによる検出
スキャナーは、相補的な2つの手法を使います。
- パターンマッチング 既知のプレフィックスや形式を利用します。たとえば、AWSキーは
AKIAで始まり、Stripeのライブキーはsk_live_で始まり、GitHubトークンはghp_で始まります。 - エントロピー分析 ランダム性を測定します。実際のシークレットはエントロピーが高い文字列であり、既知のプレフィックスがなくても、長くランダムに見える値は疑わしいものです。
パターンは精度(誤検知の少なさ)を高め、エントロピーは再現率(未知の形式の検出)を高めます。優れたツールは両方を組み合わせ、しきい値と許可リストを調整してノイズを管理できるようにします。
# Shannon entropy heuristic: high-randomness strings flag as candidate secrets
# AKIAIOSFODNN7EXAMPLE -> matches AWS prefix pattern
# 4f8b2c9e1a7d6f3b... -> flagged by entropy threshold
# 'hello world' -> low entropy, ignoredハニートークン:存在だけでなく使用を検出
スキャンは、本来存在すべきでない場所にあるシークレットを見つけます。ハニートークン(またはカナリアトークン)は、攻撃者によってシークレットが使用されたことを検出します。
設定ファイルや公開リポジトリなど、攻撃者が興味を持ちそうな場所に、実在しそうに見える偽の認証情報(AWSキー、APIトークン、データベース接続情報など)を仕込みます。この認証情報は役に立ちませんが、使用を試みるとアラートが発生します。
正規のシステムがハニートークンに触れることはないため、すべての検出が、侵入を示す信頼度の高いシグナルになります。これは、攻撃者がシークレットストアやコードベースにアクセスしたことを知らせる早期警告です。
# A canary AWS key: looks real, grants nothing, alerts on any API call.
# Plant it in a config file or a fake .env.
# When an attacker tries: aws s3 ls --profile leaked
# the canary service logs the source IP and pages your team.異常な使用の監視
ハニートークンに加えて、実際のシークレットがどのように使われているかを監視します。Vaultやクラウドプロバイダーの監査ログから、悪用のパターンがわかります。
- 新しい地域 キーが予期しない国から突然使用されます。
- 時間外のアクセス ジョブが実行されていない午前3時に認証情報が使用されます。
- 権限の探索 読み取り専用キーが書き込みや管理者向けAPIを試行します。
- 量の急増 API呼び出し数が突然増加します。
これらのログをアラート機能付きのSIEMに送ります。検出と迅速なローテーションを組み合わせることが、予防をすり抜けた漏えいへの実践的な対策です。
まとめ:ローテーション戦略
成熟したプログラムでは、予防的なローテーションと継続的な検出を組み合わせます。
- 短命の動的シークレットを優先することで、ローテーションを自動かつ継続的に行います。
- 避けられない静的シークレットについては、定期ローテーションを自動化する。
- 署名キーをゼロダウンタイムでローテーションするため、2つのキーを重複させる。
- コミット前、CI、履歴、プラットフォームなど、あらゆる場所をスキャンする。
- ハニートークンを配置し、監査ログで異常な使用を監視する。
- 確認された漏えいに対して数分でローテーションできるよう、緊急時のランブックを用意する。
目的は、すべてのシークレットを短命にし、すべての漏えいを検出可能にし、すべてのローテーションを迅速かつ日常的なものにすることです。
理解度チェック
検出手法についての理解度を確認します。
振り返り:鍵ローテーションと検出
シークレットを最新の状態に保ち、見逃された漏えいを検出する方法を学びました。
- ローテーションは露出期間を短縮し、コンプライアンス要件を満たします。安全なローテーションでは、ゼロダウンタイムのために2つのキーを重複させます。
- クラウドマネージャー、Vault、KMSを通じてローテーションを自動化し、短命の動的シークレットを優先してローテーションを継続的に行います。
- 暗号化キーのローテーションにはエンベロープ暗号化を使い、データセット全体ではなく小さなデータキーを再ラップします。
- 緊急ローテーションには、ランブックと、すべての利用者を事前に把握しておくことが必要です。
- 検出では、シークレットスキャン(パターン+エントロピー)、使用を明らかにするハニートークン、監査ログとSIEMによる異常監視を組み合わせます。
- 成熟した戦略では、予防的なローテーションと継続的な検出を一体化し、漏えいの影響を短期間に抑え、可視化し、迅速に封じ込めます。
これで「シークレット管理と鍵ローテーション」コースは完了です。
AI チューターと学ぶ Cyber Security Academy — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 76
- レッスン
- 303
よくある質問
「キーのローテーションと検知」レッスンは無料ですか?
はい。「キーのローテーションと検知」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「キーのローテーションと検知」で何を学びますか?
キーをローテーションし、漏洩を検知します。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「キーのローテーションと検知」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- シークレットの拡散問題
- Vaultとシークレットストア
- 動的シークレットとリース
- キーのローテーションと検知