AWSで暗号化の話しになると登場するKMSについて勉強したのでこのエントリーを書きました。
公式のKMSドキュメントはKMS全般の優れたドキュメントですが、ここではマスターキーとデータキーの関係に絞って書こうと思います。

マスターキーとデータキー

KMSの言うところのマスターキー(CMKとかカスタマーマスターキーとも呼ばれます)と、データキーって何?どんな関係なの?という点を図解します。例えばS3のサーバーサイド暗号化を例にとると、KMSを使う場合は以下のような関係になります。

S3_SSE_with_KMS.jpg

KMSがやってくれるのは、マスターキーの管理とデータキーの復号ということですね。データの暗号化に使うデータキーは使う側でちゃんと管理しないといけないと。

マスターキー

マスターキーの作成ですが、AWSマネージドの方法に加えて、ユーザー側で生成した暗号鍵をマスターキーとしてKMSに保管することもできるみたいです。

KMS_MasterKey_AWS.jpg
KMS_MasterKey_external.jpg

自分で生成した秘密鍵をKMSに登録する具体的方法は公式ドキュメントに記載があります。RSAで暗号化してやりとりするんですねー。

データキー

データキーの生成は、KMSにGenarateDataKeyリクエストをすることで行います。
KMS_DataKey.jpg
平文データキーが不要な場合は、GenerateDataKeyWithoutPlaintextリクエストと言うのもあります。

マスターキーの権限管理

カスタマーマスターキーを使用する権限をIAMユーザーやIAMロールに付与しようとした場合、IAMのポリシーをどうのこうのしただけでは不十分で、KMSのキーポリシーでも権限を与えてあげる必要があります。KMSのキーポリシーはCMK毎に設定するCMKに対する権限のポリシーです。
具体的にどうすればいいのかは公式ドキュメントにあります。

TOP