導入
「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マネージドキーで十分、と覚えておくと選択に迷いません。