本文へスキップ
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マネージドキー … 「保存データは暗号化しておきたい」程度なら、S3やRDSの暗号化を有効にするだけ。鍵はAWSが自動管理し、手間ゼロ。
  • 規制対象の患者データ → カスタマーマネージドキー(CMK) … コンプライアンス要件で「鍵は自社で管理し、1年ごとにローテーションし、誰がいつ鍵を使ったかを監査ログに残すこと」が求められる。この細かい制御はCMKでしかできない。さらに「退職した委託先には鍵の使用権を即座に剥奪する」といったアクセス制御もCMKなら可能。

内部の仕組みは共通で、大量データはローカルの使い捨てデータキーで暗号化し、そのデータキーをKMSのマスターキーで包むエンベロープ暗号化。KMSが直接巨大データを暗号化しないので高速です。

判断軸はシンプル。「独自のローテーションや細かいアクセス制御・監査が要件か?」がYesならCMK、単に暗号化したいだけならAWSマネージドキー。要件から一段深く読むのがSAAです。

読んでみよう

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

次のレッスンへ →