AWS Key Management Service (KMS) 入門
Aug 17, 2019 16:43 · 1504 words · 4 minute read
AWS Key Management Service (AWS KMS) は、データの暗号化に使用される暗号化キーの作成と管理を容易にするマネージド型サービスです。お客様が AWS KMS で作成するカスタマーマスターキーは、ハードウェアセキュリティモジュール (HSM) によって保護されています。
データの暗号化と、その復号化の権限を制御するのにIAMが使えるようなサービスと考えればよさそう
AWS Key Management Service の概念
カスタマーマスターキー (CMK)
AWS KMS のプライマリリソースはカスタマーマスターキー (CMK) です。CMK を使用してデータを最大 4 KB (4096 バイト) まで暗号化したり復号することができます。データを暗号化するために AWS KMS の外で使用するデータキーの生成、暗号化、復号には、通常 CMK を使用します。この戦略は、エンベロープ暗号化と呼ばれています。
- 情報の暗号と復号ができる
- 扱えるデータは4KBまで
- それより大きいデータを扱うためのデータキーを生成するのにもCMKを使う
データキーとは
CMKだけでなくデータキーを使うのは以下の場合
- より厳しい秘匿情報の取り回しが必要なとき
- 暗号化するデータが4KBよりも大きい
- トークンとかだけならCMKで管理できる
データキーは、大量のデータや他のデータ暗号化キーといったデータを暗号化するための暗号化キーです。
CMKは4KBまでしか暗号/復号ができないのでそれ以上大きいのはデータキーを使う
AWS KMS カスタマーマスターキー (CMK) を使用して、データキーの生成、暗号化、復号化を実行できます
CMKを使ってデータキーを作る
ただし、AWS KMS はデータキーの保存、管理、追跡、またはデータキーの暗号化オペレーションを実行しません。AWS KMS の外部でデータキーを使用して管理する必要があります。
作ったデータキーはユーザが管理することになる
AWS KMS はデータキーを使用してデータを暗号化することはできませんが、OpenSSL や AWS 暗号化 SDK のような暗号化ライブラリなどを使用して、KMS の外部でデータキーを使用することができます。
データキーはAWS上のサービスではない。使うときはユーザが自分の手元でOpenSSLなどと使う
エンベロープ暗号化とは
データキーを使ったデータの秘匿方式
データを暗号化するとデータは保護されますが、暗号化キーを保護する必要があります。1 つの戦略としては、それを暗号化します。エンベロープ暗号化は、データキーでプレーンテキストデータを暗号化してから、そのデータキーを別のキーで暗号化する手法です。
- データを暗号化するには鍵が必要
- しかし鍵が漏れてしまうと(暗号化されていないと)、暗号化されたデータは漏洩してしまう
- それを防ぐため、鍵をさらに暗号化しておけばそれ(暗号化した鍵)が漏洩してもデータは守られる。
- しかし鍵を暗号化した鍵はまだ暗号化されていないので… と無限に続いてしまう
- そこで絶対に安全な方式で保管されているマスターキーを使って鍵を暗号化することにする
このフローは AWS KMS を使うとこうなる
- CMK を
絶対に安全な方式で保管されているマスターキー
とする - CMK をつかってデータキー (鍵) を生成
- つくったデータキー(平文)でプレーンテキストデータを暗号化
- ユーザはデータキーを暗号化した状態で管理
- 暗号化されたプレーンテキストデータを復号化するとき
- 暗号化されたデータキーをCMKをつかって復号化
- 復号化したデータキーを使ってプレーンテキストデータを復号化
なお、基本的にはひとつのデータに対して、ひとつのデータキーしか生成しない
このあたりまでドキュメントを読んで、おそらくそこまで厳格な秘匿化は不要そうだったので読むのをやめました (APIトークンの管理などはおそらくCMKだけで十分)