はじめに
先日、AWS12冠を達成しましたが、AWSのセキュリティ資格(SCS)を勉強していてつまずた点を思い出したので、今回はその KMSの暗号化方式についてまとめていこうと思います。
具体的には、以下の様な似た言葉が多く、読むだけでは混乱しやすい領域だと思います。
- SSE
- CSE
- Envelope Encryption
- GenerateDataKey
1. KMSの暗号化方式は大きく3種類
まずは全体像だけ押さえていきますが、暗号化方式には大きく分けると以下の3種類が存在します。
- サーバーサイド暗号化(SSE-KMS)
- クライアントサイド暗号化(CSE-KMS)
- エンベロープ暗号方式(Envelope Encryption)
SCSのKMS問題はこの3つの違いを理解すればほぼ突破できるかと思います。
2. SSE-KMS(Server Side Encryption – KMS)
AWSサービス側が自動でデータを暗号化してくれる方式。
特徴
- データは AWS サービス側で暗号化される
- 自分で暗号化処理を書かなくてよい
- KMSのCMK(カスタマーマスターキー)を使用
代表的な利用サービス
- S3(SSE-KMS)
- EBS(暗号化ボリューム)
- RDS(暗号化ストレージ)
- Lambda(環境変数の暗号化)
試験ポイント(SCS)
- SSE-S3 と SSE-KMS の違いを問われる
- SSE-KMS は CloudTrail にキー利用ログが残る
- KMSキーのポリシーでアクセス制御できる
3. CSE-KMS(Client Side Encryption – KMS)
アプリケーション側で暗号化 → 暗号化済みデータをAWSに送る方式。
特徴
- 暗号化処理はアプリ側で実施
- KMSから GenerateDataKey で鍵を取得
- AWSサービスは暗号文しか受け取らない
使用されるケース
- 法的要件でAWS側に平文を渡せない場合
- 機密性の高いデータを扱うとき
- S3アップロード前にアプリ側で暗号化したい場合
試験ポイント
- KMSのAPI(GenerateDataKey)が登場したら ほぼCSEの問題
4. Envelope Encryption(エンベロープ暗号方式)
SCSで最も混乱しやすい領域ですが、本質はシンプルです。
仕組み
- データを データキー(AES)で暗号化
- データキー自体を KMSのCMKで暗号化
→ データ と データキー を分けて暗号化する方式。
メリット
- 暗号化処理が高速
- CMKへの負荷が少ない
- 大量データに向いている
試験での要点
- CMKは巨大データを直接暗号化できない
- SSE-KMSの内部でも Envelope Encryption が使われている
- Decrypt の流れを理解しておく
5. SCSでよく出るひっかけ問題まとめ
SSE-KMS vs SSE-S3
- SSE-S3 → S3管理のキー
- SSE-KMS → KMSのCMK利用(CloudTrailに残る)
GenerateDataKey が登場した場合
→ CSEまたはEnvelope Encryption
CMKは巨大データを直接暗号化できるか?
→ できない(暗号化可能サイズは数KBレベルの為)
データキーの管理について問われたら場合
→ Envelope Encryptionの流れを思い出す
6. 使い分け表
| 方式 | 向いているケース |
|---|---|
| SSE-KMS | もっとも一般的。標準の選択肢。 |
| CSE-KMS | 極めて高機密なデータ。AWSに平文を渡せない場合。 |
| Envelope Encryption | 大量データ暗号化、性能重視、KMSの負荷分散。 |
7. まとめ:KMSは「誰が暗号化するか」を整理して考えましょう
- AWSが暗号化 → SSE-KMS
- 自分で暗号化 → CSE-KMS
- 鍵を鍵で守る仕組み → Envelope Encryption
私自身、試験勉強の過程で混乱した領域だったので、この記事が誰かの理解の助けになれば嬉しいです![]()