本文へスキップ
BecomeCoder

AWS SAA(ソリューションアーキテクト)コース · 第3章 セキュアなアーキテクチャ設計 · レッスン13

保管時の暗号化とKMS

導入

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ボリューム作成時に「暗号化」を選択(既存ボリュームはスナップショット経由で暗号化可能)
RDSDBインスタンス作成時に「暗号化を有効化」(作成後の変更は不可、スナップショット経由で移行)

読んでみよう

「独自の鍵ローテーションポリシーが必要」「鍵の利用をアカウント間で細かく制御したい」といった要件が出たらカスタマーマネージドキー、単に「保存データを暗号化したい」だけならAWSマネージドキーで十分、と覚えておくと選択に迷いません。