- KMSについて調べているけど専門用語が多くてわかりにくい
- KMSの使い道がわからない
- カスタマーマスターキーやカスタマーデータキーといったよく似た言葉がわからない
KMSに関して、このように悩んでいませんか?
今の世の中、KMSのようなセキュリティサービスに関する知識は重要視されてきています。
そこで、この記事では、現役のAWSエンジニアの私が、KMSの基本的な知識から、KMSの暗号化の仕組みについて初心者にもわかりやすく解説しています。
この記事を読めば、KMSについて理解でき、今後のAWS学習を効率的に進めることができるようになりますよ。
初心者にもわかりやすいように、喩えなどを使ってKMSについて解説しています!
以下の記事では、AWSを無料で勉強する方法をまとめているので、あわせて参考にしてください。
なお、 KMSに関しては侍テラコヤ
\侍テラコヤの無料プランは無期限だから今すぐ登録してもOK!/
メールアドレスだけで10秒で登録できちゃいます!
それでは、さっそくKMSについて解説していきます!
この記事の内容は以下の書籍を参考にしています。
KMSとは?
KMSの概要と目的
AWS KMS(Key Management Service)とは、暗号化に用いる鍵(とりあえずはパスワードのようなものをイメージしてください)をAWSで作成や管理をしてくれるサービスです。
セキュリティ対策が重要視される今の世の中で、データの暗号化は避けては通れません。
しかし、データの暗号化や、暗号化したデータの復元(復号といいます)を自前で行うのは結構大変です。
例えば、暗号化には鍵というものを利用しますが、この鍵を作るのにも手間がかかりますし、鍵の管理も大変です。
なぜなら、貧弱な鍵を使えば暗号化の意味がないですし、鍵を紛失・漏洩してしまうと大切なデータまで紛失・漏洩してしまうので一大事となってしまいます。
そこで、一歩間違えれば危険を伴うような、暗号化の鍵の管理をAWSにお任せしてしまおうというのがKMSです。
暗号化とは?
初心者の方に向けて暗号化について少し解説しておきます。
ここでは一般的な暗号化・復号の話をし、KMSの暗号化の仕組みについては後ほど説明します。
すでに暗号化って何か分かっている人は読み飛ばしてくださいね!
暗号化とは、生のデータを盗まれても中身がばれないようにするための方法です。
実際の暗号化では、データの中身を書き換える(例えば、”hello”という文字列を”khaooir”に変換する)のですが、初心者の方は「データを金庫に入れて鍵をかける」のをイメージしましょう!
そのため、暗号化には「暗号化するデータ」と「暗号化のための鍵」がセットで必要です。
データを安全に相手に届けたい人は、データを金庫に入れて鍵をかけた暗号化データを送ります。
受取手は、事前に受け取っていた「合鍵」を使って金庫からデータを取り出します(復号)。
このようにすれば、もしデータを届ける途中で誰かにデータを盗まれても、鍵がなければ中身を見られる心配はありません(金庫を壊す、というのはなしでお願いします)。
しかしながら、この鍵を無くしたり、知らない間に鍵のコピーを取られたりしていると、データを盗まれると中身まで見られてしまいます。
また、簡易な鍵だと、鍵がなくても開けられてしまう可能性もあります(ピッキングされる)。
このように、暗号化では鍵の作成や管理が非常に重要です。
KMSでは、強力な鍵の作成と、安全な鍵の管理を実現してくれるサービスです。
KMSの料金
KMSでは、
- 鍵の管理
- 鍵の取得などのKMSとの通信
に対して料金が発生します。
鍵の管理では、鍵ひとつあたり1USD/月の料金が発生します。
鍵の取得などのKMSとの通信というのは、KMSで作成した鍵をうけとるときの通信に対する課金です。
例えば、KMSとの通信10,000 件当たり0.03USDなど、です。
こちらは無料利用枠(20,000件/月)があるので、試しに使用する分にはお金はかからないでしょう。
最新の料金はこちらの公式サイトをご覧ください(日本語対応はしていないようです)。
KMSの制約
KMSには、他のAWSサービスと同様に数などの制限(クォータ)が存在します。
例えば、一度に管理できる鍵は100,000個まで、などの制限です。
初心者の方がこれらの制約を超えることはまずないのであまり気にする必要はないでしょう。
さらに詳しいクォータの一覧はこちらの公式サイトをご覧ください。
KMSの暗号化の仕組み
KMSの概要について理解したところで、KMSの暗号化について見ていきましょう。
KMSには複数の鍵の種類があり、いくつかの鍵を用いてデータの暗号化を行います。
以下ではKMSの鍵の種類と暗号化の仕組みを説明していきますね。
カスタマーマスターキーとカスタマーデータキー
KMSの鍵には、カスタマーマスターキー(CMK)とカスタマーデータキー(CDK)というものがあります。
名前がややこしいので、以下ではマスターキーとデータキーと呼びますね。
書籍や他サイトではCMKやCDKといった略称を使われていることが多いですが、ややこしいのでここではマスターキーとデータキーとさせてください。
データキーは、実際にデータを暗号化する鍵(データをいれる金庫の鍵)です。
一方で、マスターキーは、データキーを暗号化する鍵(データキーをいれる金庫の鍵)です。
少しややこしいですが、KMSではこのように、データキーをさらに別の鍵(マスターキー)で暗号化して、セキュリティを高めているわけですね。
「暗号化とは?」でも触れましたが、暗号化では鍵を盗まれると中身が見られてしまいます。
一方で、データを暗号化する以上は、復号したい人にデータキー渡したり、データキーをどこかで管理しておく必要があります(データキーがなければ暗号化したデータを二度と復元できなくなります)。
このような、
- データキーを誰かに渡すとき
- データキーを管理しているとき
に、データキーがもし盗まれてしまったら、その泥棒は暗号化データをいつでも復号できてしまいます(たちが悪いことに、泥棒はこっそり合鍵を作るので盗まれたことすら気づかない)。
このように、そもそもデータキーを渡したり管理する必要がある、というのが危険なのです。
そこで、KMSでは、データキーをさらにマスターキーで暗号化したものを渡したり管理するという方式を取ります。
これだと、もし暗号化したデータキーが盗まれても、このデータキーを復号できなければ(データキーをいれた金庫を解錠できなければ)データを解読されることはありません。
また、データを暗号化した人が、使ったデータキーを捨ててしまうことで、どこからもデータキーが漏れる心配はありません。
データキーを復号したい場合は、KMSにあるマスターキーを使います。
KMSからマスターキーを受け取り、マスターキーを使ってデータキーを復号し、さらに復号したデータキーを使ってデータを復号します。
マスターキーはAWSが厳格に管理しているため、漏洩などの心配もありません。
暗号化データを誰かに送る場合も、マスターキーは直接送らず、KMSから取得するようにすることでマスターキーが盗み取られる心配もないです。
このように、データキーをさらに別の鍵で暗号化する方式を「エンベロープ暗号化」といいます。
エンベロープとは封筒のことで、データキーを封筒に入れて送る感じですね(今回は封筒ではなく金庫で例えましたが)。
カスタマー管理キーとAWS管理キー
KMSの暗号化の仕組みについて説明しました。
その中で、マスターキー(正しくはカスタマーマスターキー)が登場しました。
これは、データを暗号化するデータキーを暗号化するための鍵でしたね。
実は、このマスターキーには以下の3種類があります。
- カスタマー管理キー
- AWS管理キー
- AWS所有キー
最後のAWS管理キーは、AWSが内部で利用しているだけなので、気にしなくてOKです。
カスタマー管理キーとは、カスタマー、つまりわれわれのようなAWSの利用者が、用途に応じてKMS上で作成するマスターキーのことです。
一方で、AWS管理キーというのは、AWS側で最初から作成されているマスターキーです。
AWS管理キーは、S3用やRDS用などのように、AWSサービスごとに用意されていて、自分でマスターキーを作らなくても手っ取り早くKMSによる暗号化を利用することができます(しかも無料)。
カスタマー管理キーだと、キーの作成を自分で行う必要があり、キーの管理に少し料金が発生します。
ではカスタマー管理キーはいらないのでは?と思われるかもしれません。
実は、AWS管理キーは、S3などの特定のAWSサービスに対してのみ利用できます。
一方で、カスタマー管理キーは、アプリケーションで使うデータや、データベースに保存するデータなど、自由な使い方ができます。
どんなシチュエーションで暗号化をするのかによって、どちらのマスターキーを使うのかが変わってくるわけですね。
キーのローテーション
マスターキーは、いくらAWS側で管理しているとはいえ、いつまでも同じものを使っていては少し心配です。
そこで、KMSのマスターキーは、一定期間で内容が入れ替わるローテーションという機能があります。
このローテーションには自動ローテーションと手動ローテーションの2種類がありますので、それぞれ説明します。
自動ローテーション
KMSのマスターキーは、自動で言って期間経過後に内容を入れ替えるようにすることができます。
ローテーションの期間は1年です。
ちなみに、カスタマー管理キーのローテーションは任意(有効か無効化を選べる)ですが、AWS管理キーは必ず自動ローテーションします。
ローテーションしても、マスターキーのID(復号するときなどに利用するID)は変わらないので、「どのIDのマスターキーを使うか?」といった部分のアプリケーションの修正は不要です。
また、ローテーションする前のマスターキーで暗号化したデータも、ローテーション後も復号できるので問題ありません。
手動ローテーション
KMSのマスターキーは、1年ごとに自動でローテーションさせることができますが、「1年じゃ長すぎる!」という場合には手動でローテーションさせることも可能です。
手動でローテーションといっても、実際には新しいマスターキーを作成して、使うマスターキーを新しいものに入れ替えるだけです。
この場合は、まったく新しいマスターキーを作成するので、マスターキーのIDは変わってしまいます。
そのため、ローテーションするたびにアプリケーションの修正が必要になりますが、マスターキーには「エイリアス」という別名を付けることが可能です。
アプリケーション側では、このエイリアスを用いてマスターキーを指定して、手動でローテーションした際にはエイリアスを新しいマスターキーに付け替えることで、アプリケーションの修正をする必要はなくなります。
まとめ
以上、KMSに関して解説しました。
KMSは、データの暗号化をサポートしてくれるサービスです。
KMSにはカスタマーデータキーとカスタマーマスターキーがあり、それぞれの役割は以下の通り。
キーの種類 | 役割 |
---|---|
カスタマーデータキー | データを暗号化するための鍵 |
カスタマーマスターキー | カスタマーデータキーを暗号化するための鍵 |
KMSでは、データを暗号化する鍵を、さらにマスターキーを使って暗号化することでセキュリティ強度を高めていたのでしたね。
このマスターキーは、AWSで厳重に管理されているので、紛失や漏洩の心配をすることなく、安全にデータの暗号化ができるのが魅力です。
さらに、マスターキーは1年ごとに自動で内容が変わる(ローテーション)ことでも、セキュリティ強度を高めています。
このように、データの暗号化をセキュリティ性能を高く、手軽に始めることができるのがKMSです。
なお、 KMSに関しては侍テラコヤ
\侍テラコヤの無料プランは無期限だから今すぐ登録してもOK!/
メールアドレスだけで10秒で登録できちゃいます!
記事の中で不明点や指摘などがあれば、気軽にコメントやお問い合わせください。
Twitter/X(https://twitter.com/enjunior_blog)もやっているので、DM等も歓迎です!
それでは、引き続きAWSの勉強がんばりましょう!
コメント