要点: 暗号化は、アイデンティティ、アクセス、キー、運用手順をまとめて管理して初めて安全になります。
この記事の用語: KMS:暗号鍵管理サービス。Envelope Encryption:データ鍵をさらにMaster Keyで保護する方式。
現場の課題
環境ファイルのシークレットは長期間残り、サービスには必要以上の権限が与えられがちです。どのデータがどの鍵を使うか分からなければローテーションも進みません。
すべてのサービスがMaster Keyを読めるなら暗号化の効果は限定的です。Workload Identity、最小権限、キー バージョン、ローテーション、復元を一つのライフサイクルとして管理します。
設計と実装
- シークレットとキーを、担当者、利用サービス、期限ごとに棚卸しします。
- 静的認証情報を配布せず、Workload Identityで短期シークレットを取得します。
- Envelope Encryptionを使い、暗号文と一緒にキー バージョンを保存します。
実装例
record = { ciphertext, wrappedDataKey, masterKeyVersion }
dataKey = kms.decrypt(record.wrappedDataKey, context = tenantId)
plaintext = decrypt(dataKey, record.ciphertext)
if record.masterKeyVersion != current:
enqueueRewrap(record.id)本番導入の進め方
シークレットを棚卸ししてソースコードから除き、一サービスへ短期アイデンティティを導入します。重要なデータ種別からEnvelope Encryptionを適用し、ローテーションと復元を訓練して広げます。
まとめ
鍵管理はアイデンティティ、アクセス、ローテーション、復旧のライフサイクルであり、一度の暗号化処理ではありません。
