AWS KMSとは

目次

1.KMSとは

KMS(Key Management Service)は、暗号化などに使う鍵を作成・保護し、利用権限を管理するAWSのサービスです。

金庫に例えると、データは書類、暗号化は金庫に入れること、暗号鍵は金庫の鍵です。KMSは、その鍵を厳重に管理する仕組みに当たります。

できること 内容
鍵の作成・保護 KMSキーを作成し、安全に保管する
利用権限の制御 誰が鍵を使って暗号化・復号できるかを決める
鍵の運用 対応する鍵のローテーション、無効化、削除予約などを行う
利用状況の確認 CloudTrailを使って鍵への操作や利用を記録・確認する
KMSは、 S3などに保存するデータを守るための、鍵の管理を担当します。

2.基本用語

用語 意味
暗号化 データを、鍵がなければ読めない形式に変えること
復号 暗号化したデータを、鍵を使って元に戻すこと
KMSキー KMSで管理する鍵。データキーの保護などに使う
データキー データ本体の暗号化に使う鍵
キーポリシー そのKMSキーを誰が管理・利用できるかを定めるルール
エイリアス alias/demo-s3-keyのような、鍵に付ける分かりやすい名前

AWS管理のキーとカスタマーマネージドキー

AWS管理のキーはAWSサービスが作成・管理します。カスタマーマネージドキーは利用者が作成し、キーポリシーや有効・無効などを管理できます。

KMSで管理される「AWS管理のキー」と、下記のSSE-S3で使う「S3管理のキー」は区別が必要です。

3.データを守る仕組み

S3のSSE-KMSなどでは、データを暗号化する鍵を、KMSキーでさらに保護する「エンベロープ暗号化」を使います。

データキーの役割

ファイル本体を暗号化する。

KMSキーの役割

データキーを暗号化して保護する。
  1. S3がKMSにデータキーの生成を依頼する。
  2. S3が平文のデータキーでファイルを暗号化する。
  3. S3が暗号化済みファイルと暗号化済みデータキーを保存し、平文のデータキーをメモリから削除する。
  4. 読み出し時は、権限を確認したうえでKMSにデータキーの復号を依頼し、S3がファイルを復号して返す。
利用者がKMSキーの中身をダウンロードしたり、毎回手動で復号したりする必要はありません。通常、連携するAWSサービスが処理します。

上記はS3の基本的な説明です。S3バケットキーを有効にした場合は、KMSへのリクエストを減らす仕組みが加わります。

4.簡単な使用例:S3のファイルを保護する

例:社内資料の sample.txt を、指定したKMSキーで保護してS3に保存します。 検証用バケットと、小さなテストファイルを使う想定です。

① KMSキーを用意する

  1. AWSコンソールで「KMS」を開き、S3バケットと同じリージョンを選ぶ。
  2. 「カスタマーマネージドキー」からキーを作成する。
  3. キーのタイプは「対称」、使用法は「暗号化および復号」を選ぶ。
  4. エイリアスを demo-s3-key とし、キー管理者・キー利用者を設定する。

キー利用者には、アップロードやダウンロードを行うIAMユーザー・IAMロールを指定します。鍵の管理者と利用者は役割が異なります。

② S3のアップロード画面で指定する

  1. S3で検証用バケットを開き、sample.txt のアップロードを開始する。
  2. アップロード画面の「プロパティ」などにあるサーバー側の暗号化設定を開く。
  3. バケットのデフォルト設定を上書きし、暗号化タイプとして SSE-KMS を選ぶ。
  4. 作成したKMSキーを指定してアップロードする。
  5. 保存したオブジェクトの「プロパティ」で、SSE-KMSとKMSキーのARNを確認する。

画面の表記・配置は変更される場合があります。バケットのデフォルト暗号化にSSE-KMSを設定する方法もあります。

③ ダウンロードする

権限のある利用者が通常どおりダウンロードすると、S3が復号してファイルを返します。ダウンロード後のファイル自体が、引き続きKMSで暗号化されているわけではありません。

必要な権限の考え方

操作 S3の権限 KMSの権限
通常のアップロード s3:PutObject kms:GenerateDataKey
ダウンロード s3:GetObject kms:Decrypt

マルチパートアップロードでは、KMS側に両方の権限が必要です。実際の許可はIAMポリシー、キーポリシー、バケットポリシーなどの組み合わせで決まります。

参考:AWS CLIでアップロードする例

AWS CLIの認証と必要な権限が設定済みで、カレントフォルダーに sample.txt がある場合の例です。キーとバケットは東京リージョンにある想定です。

aws s3 cp sample.txt s3://YOUR-TEST-BUCKET/sample.txt --sse aws:kms --sse-kms-key-id alias/demo-s3-key --region ap-northeast-1

Windowsのコマンドプロンプト・PowerShellでも1行で実行できます。同名オブジェクトがある場合は上書きされ、バージョニング有効時は新バージョンになります。

5.混同しやすい点と注意点

疑問 回答
S3はKMSを使わないと
暗号化されない?
いいえ。S3への新規アップロードは、標準でSSE-S3により保存時に暗号化されます。SSE-KMSではKMSキーを使います。
SSE-KMSにすると
S3は非公開になる?
暗号化と公開範囲は別の設定です。
通信もKMSで暗号化する? この使用例でKMSが関わるのは保存時の暗号化です。通信中の保護にはHTTPS/TLSを使います。
デフォルト暗号化を変えると
既存ファイルも変わる?
いいえ。既存オブジェクトは自動では再暗号化されません。
費用はかかる? キーの種類・数、KMSへのリクエスト数などに応じた料金がかかります。S3の利用料金も別途発生します。
利用中の鍵の無効化・削除は慎重に。 鍵が利用できなくなると、その鍵で保護されたデータを復号できなくなります。カスタマーマネージドキーを削除する場合は、利用先を確認してください。
KMSは「データを守る鍵」と「その鍵を使える人・システム」を管理するサービスです。

関連の記事

AWS S3アクセスログとは

△上に戻る