導入
「S3に保存したデータが漏洩しても中身は読めない」ようにするには、保存されているデータそのものを暗号化しておく必要があります。それを支えるのがAWS KMSです。
説明
AWS KMS(Key Management Service) は、暗号化に使う鍵(キー)を安全に作成・管理・利用できるマネージドサービスです。
| 用語 | 意味 |
|---|---|
| CMK(カスタマーマネージドキー) | 利用者が作成・管理する暗号鍵。ローテーションやアクセス権限を自分で制御できる |
| AWSマネージドキー | AWSが自動的に作成・管理する鍵。手軽だが細かい制御はできない |
| エンベロープ暗号化 | データ自体は「データキー」で暗号化し、そのデータキーをKMSの鍵(マスターキー)でさらに暗号化して保護する方式 |
エンベロープ暗号化 はKMSの中核的な仕組みです。大量のデータをKMS側で直接暗号化するのは非効率なため、実際のデータ暗号化はローカルで生成した使い捨ての「データキー」で行い、そのデータキー自体をKMSのマスターキーで暗号化して安全に保管します。
flowchart LR
D["データ(平文)"] -- "データキーで暗号化" --> E["暗号化されたデータ"]
DK["データキー"] -- "KMSマスターキーで暗号化" --> EDK["暗号化されたデータキー"]
E --> S["S3に保存"]
EDK --> S
主要なAWSサービスは、設定を有効にするだけでKMSと連携した保管時暗号化(Encryption at Rest)ができます。
| サービス | 暗号化の設定方法 |
|---|---|
| S3 | バケットのデフォルト暗号化を有効化(SSE-S3 または SSE-KMS) |
| EBS | ボリューム作成時に「暗号化」を選択(既存ボリュームはスナップショット経由で暗号化可能) |
| RDS | DBインスタンス作成時に「暗号化を有効化」(作成後の変更は不可、スナップショット経由で移行) |
具体例
医療データを扱うシステムで、鍵の選択が要件によって分かれる場面を見てみましょう。
- 一般的な業務データ → AWSマネージドキー … 「保存データは暗号化しておきたい」程度なら、S3やRDSの暗号化を有効にするだけ。鍵はAWSが自動管理し、手間ゼロ。
- 規制対象の患者データ → カスタマーマネージドキー(CMK) … コンプライアンス要件で「鍵は自社で管理し、1年ごとにローテーションし、誰がいつ鍵を使ったかを監査ログに残すこと」が求められる。この細かい制御はCMKでしかできない。さらに「退職した委託先には鍵の使用権を即座に剥奪する」といったアクセス制御もCMKなら可能。
内部の仕組みは共通で、大量データはローカルの使い捨てデータキーで暗号化し、そのデータキーをKMSのマスターキーで包むエンベロープ暗号化。KMSが直接巨大データを暗号化しないので高速です。
判断軸はシンプル。「独自のローテーションや細かいアクセス制御・監査が要件か?」がYesならCMK、単に暗号化したいだけならAWSマネージドキー。要件から一段深く読むのがSAAです。
読んでみよう
「独自の鍵ローテーションポリシーが必要」「鍵の利用をアカウント間で細かく制御したい」といった要件が出たらカスタマーマネージドキー、単に「保存データを暗号化したい」だけならAWSマネージドキーで十分、と覚えておくと選択に迷いません。