AWS KMS を使った 2つの暗号化方式の違いを、用途・仕組み・制約の観点で整理します。
① aws kms encrypt(直接暗号化)
仕組み
- KMS に 平文データを直接渡す
- KMS が CMK(KMSキー)で暗号化して暗号文を返す
制約
-
暗号化できるデータサイズは最大 4KB(※実質 2KB 程度と理解されがち)
- API上限は 4KB だが、メタデータ等を考慮して「小さなデータ向け」
特徴
- シンプル
- KMS API コール毎に KMS 内で暗号化処理
- 大量・大容量データには不向き
主な用途
- パスワード
- トークン
- 設定値(シークレット)
- 小さな鍵情報
② aws kms generate-data-key(Envelope 暗号化)
仕組み
- KMS が データキー(平文+暗号化済み)を生成
- 平文データキーで ローカル(アプリ側)暗号化
- 暗号化済みデータキーだけを保存
- 復号時は
Decryptでデータキーを復号
制約
- データサイズ制限なし(実質無制限)
- KMS は データキーのみを保護
特徴
- 高性能(大容量データに向く)
- KMS API コール回数を最小化
- AWS 推奨方式
主な用途
- ファイル
- オブジェクトストレージ(S3)
- DBデータ
- バックアップ
両者の比較(一覧)
| 観点 | kms encrypt | generate-data-key(Envelope) |
|---|---|---|
| 暗号化対象 | データそのもの | データキー |
| サイズ制限 | 最大 4KB | なし |
| 暗号化処理 | KMS 内 | アプリ側 |
| パフォーマンス | 低め | 高い |
| KMS API 回数 | データ毎 | キー生成時のみ |
| 推奨用途 | シークレット | 大容量データ |
どちらを選ぶべき?
-
2KB以下の小さなデータ
→kms encrypt -
ファイル・ログ・大量データ
→generate-data-key(Envelope 暗号化)