はじめに
AWS Solutions Architect Associate (SAA) の学習中に整理した AWS KMS / 暗号化 関連の知識をまとめました。
S3 の暗号化方式の選択、KMS キーの種類、Multi-Region Key の制約など、セキュリティ設計で問われるポイントを網羅しています。
本記事は個人の学習ノートをベースにしています。誤りがあればコメントでご指摘いただけると助かります。
サービス概要
S3 暗号化方式
| 方式 | キー管理 | 暗号化処理 | 監査ログ |
|---|---|---|---|
| SSE-S3 | S3 | S3 | ❌ |
| SSE-KMS | KMS | S3 | ✅ |
| SSE-C | 顧客 | S3 | ❌ |
| クライアントサイド | 顧客 | 顧客 | - |
判断のポイントです。
- 監査ログが必要 → SSE-KMS 一択
- キーは自前、暗号化処理は S3 → SSE-C
- オーバーヘッドなし + 各オブジェクトに一意のキー → SSE-S3
KMS キーの種類
| キー種類 | 自動ローテーション |
|---|---|
| AWS 管理キー(aws/s3 等) | ✅(年次、制御不可) |
| Customer Managed Key | ✅(有効化が必要) |
| インポートキー | ❌(手動のみ) |
KMS の重要ルール
- シングルリージョンキー → マルチリージョンキーへの変換は不可
- KMS キーは別リージョンに共有できない
- マルチリージョンキーは作成時にマルチリージョンとして作成する必要がある
- 暗号化は不可逆(未暗号化には戻せない)
S3 Bucket Keys
- バケットレベルの KMS キーからローカルでデータキーを生成
- KMS API 呼び出しを最大99%削減(コスト削減)
- SSE-KMS のセキュリティ特性は維持
RDS 暗号化
- DB 作成時のみ設定可能(後から有効化不可)
- 未暗号化 DB → スナップショット → 暗号化コピー → 復元で暗号化
- マスターが未暗号化なら Read Replica も暗号化不可
EBS 暗号化
- 保存データ、スナップショット、転送中のすべてが暗号化
- 暗号化は一方通行(不可逆)
暗号化レイヤー
| レイヤー | 方法 | 対象 |
|---|---|---|
| At Rest(保存時) | KMS 暗号化 | ディスク上のデータ |
| In Transit(転送中) | SSL/TLS | ネットワーク通信 |
試験で問われる設計パターン
S3 暗号化系
暗号化 + 監査ログ + 年次キーローテーション → SSE-KMS
シナリオ: S3 に保存するデータを暗号化し、誰がいつ暗号化キーを使用したかの監査ログを残したいです。キーは年次で自動ローテーションさせたいです。
正解: SSE-KMS + 自動キーローテーション
- 監査ログが必要 → SSE-KMS(SSE-S3 では不可)
- インポートキーは自動ローテーション不可
- CloudHSM は運用負荷が最大
SSE-KMS のコスト削減 → S3 Bucket Keys
シナリオ: SSE-KMS を使っていますが、KMS リクエストのコストが増大しています。暗号化を維持したままコストを削減するには?
正解: S3 Bucket Keys を有効化
- KMS API 呼び出しを最大99%削減
- SSE-S3 に切り替えると監査ログを失う
ファイルごとに異なる暗号化キー → SSE-S3
シナリオ: 各ファイルを異なるキーで暗号化したいですが、鍵管理のオーバーヘッドは避けたいです。
正解: 単一 S3 バケット + SSE-S3
- SSE-S3 は各オブジェクトに一意のキーを自動生成
- 複数バケットに分ける必要はない
自前キー + S3 で暗号化処理 → SSE-C
シナリオ: 暗号化キーはオンプレミスで管理していますが、暗号化処理は S3 に任せたいです。
正解: SSE-C
- SSE-C: 顧客がキーを提供、S3 が暗号化処理を実行
- クライアントサイド暗号化: 暗号化処理も顧客側
Multi-Region Key 系
S3 CRR + KMS 暗号化 → Multi-Region Key
シナリオ: S3 のデータを SSE-KMS で暗号化しつつ、別リージョンにクロスリージョンレプリケーション(CRR)したいです。Athena でクエリも行います。
正解: 新バケット作成(SSE-KMS Multi-Region Key)+ CRR + Athena
- CRR で暗号化データをレプリケーションするなら両リージョンで同じキーが必要
- Multi-Region Key が必須
KMS キーのリージョン変換
シナリオ: 既存のシングルリージョン KMS キーをマルチリージョンキーに変換できますか?
正解: できません
- シングル → マルチリージョン変換は不可
- KMS キーは別リージョンに共有できない
- マルチリージョンキーは作成時にマルチリージョンとして作成する必要がある
RDS / EBS 暗号化系
暗号化 EBS ボリュームで暗号化されるもの(3つ選択)
シナリオ: EBS ボリュームの暗号化を有効にした場合、どのデータが暗号化されますか?
正解:
- 保存データ(at-rest)
- スナップショット
- インスタンス ⇔ ボリューム間(in-transit)
- 暗号化 EBS = すべて暗号化、暗号化は不可逆
既存の未暗号化 RDS を暗号化
シナリオ: 既存の未暗号化 RDS データベースを暗号化する必要があります。
正解: スナップショット → 暗号化コピー → 復元 → 旧 DB 削除
- 暗号化は DB 作成時のみ設定可能
- コンソールから暗号化を有効化するオプションは存在しない
RDS データ転送中の暗号化 → SSL/TLS
シナリオ: RDS のデータを転送中に暗号化したいです。
正解: RDS で SSL/TLS を設定
- at-rest = KMS、in-transit = SSL/TLS
- RDS には SSH できない(SSH 関連の選択肢はダミー)
AMI の暗号化ルール
シナリオ: AMI の共有・コピー・暗号化について正しい記述を3つ選んでください。
正解:
- AMI はクロスリージョンコピー可能
- AMI は別 AWS アカウントと共有可能
- 暗号化スナップショットのコピーは暗号化解除不可
- 暗号化は一方通行
おわりに
KMS / 暗号化は SAA のセキュリティドメインの中核です。「監査ログ → SSE-KMS」「コスト削減 → Bucket Keys」「シングル → マルチリージョン変換は不可」「暗号化は一方通行」という判断パターンを覚えておけば、ほとんどの問題に対応できます。
間違いや補足があればぜひコメントで教えてください。