【AWS】KMSがややこしすぎるのでいいかげんちゃんと向き合ってみた【セキュリティ】

2月 12, 2022

どもども。またCalvan Kleinのシャツを買ってしまったsaisaiです。


2週間ほど前にAWS Solution Architect Professionalに無事合格しまして、さあ次はAWS Security Specialtyでもとるかと意気込んでいる分けなんですけども


KMSの仕組みがややこしすぎでは!?


と勉強しながら思いまして…。


今回はAWS Key Management Serviceについて整理しながら学習し、記事にしていこうと思います。

AWS Key Management Serviceとはなんぞや!?

AWS Key Management Service(以下KMS)とはAWS内リソースの暗号化に用いられる暗号化キーの作成と管理ができるAWSのマネージドサービスです。


AWSにおいてデータを持つサービスを暗号化する場合はほぼ間違いなくKMSによる暗号化を行うことになります。またキーの操作履歴はCloud Trailで追跡もできるみたいですね。


キー本体の可用性や管理するハードウェア部分はAWSが担保してくれるのでその点は非常に安心ですね。


では、実際にどのようにデータを暗号化・複合化していくのか調べてみましょう。

データの暗号化・複合化

KMSで使用される暗号化方式はエンベロープ型暗号化と呼ばれる方式です。データを暗号化するキーをさらに暗号化することによってその強度を保っています。


KMSでは2種類の鍵が登場します。

・Customer Master Key(以下CMK、キーを暗号化するキーです。)
・Customer Data Key(以下CDK、データを暗号化するキーです。"D"とつく方がデータ暗号化と覚えましょう)


暗号化の流れとしてざっくりまとめると

①CDKを発行
②KMSにてCMKを生成
③CMKで暗号化されたCDKを作成
④暗号化されていないCDKで暗号化されたデータを作成
⑤暗号化されていないデータとCDKを削除
⑥暗号化されたCDKとデータをDBに格納

上記のようなフローになるようです。なるほど、整理してみると分かりやすい…。


では複合化はどのような流れなのかというと

①KMSからCMKを取り出す
②CMKを使用してCDKを複合化する
③CDKを使用して暗号化データを複合化する

このようなフローになっているようです。


KMSによるキーの操作はKMS APIというものを使用するのですが、上記のフローを抑えておくとそれぞれのAPIが何をしているのかわかるようになるので是非とも押さえておきたいですね!

CMKについて

ここでさらにCMKについて詳しくみていきましょう。


CMKには大きく分けて以下の3種類が存在します。それぞれの名前と特徴を紹介します。

・カスタマー管理CMK
AWSユーザーが作成、管理、保有します。アプリのデータなどユーザ側のデータ
暗号化(クライアントサイド暗号化)に使用するキーですね。1年更新です。(任意)

・AWS管理CMK
AWS側で作成、管理、保有します。S3やRDSなどAWSサービスのデータを暗号化
(サーバーサイド暗号化)する際に使用します。3年更新です。(強制)

・AWS所有CMK
AWSが保有し使用しているキーです。ユーザが触れることはありません。


また、CMKは作成及び削除ができます。


不要になったCMKは削除することが可能ですが、一度削除したCMKは元に戻せない
ためデータが永遠に暗号化されたまま…なんて事態が発生する可能性もあります。


CMKの削除には十分注意しましょう。ただし、実際に削除されるまでには待機期間が
存在するので速攻削除されるということはありません。


この削除待機期間に該当CMKが使用された場合にアラートを出すといった設定も
可能なので考慮しておくといいかと思います。

KMS使用における制約事項

最後にKMSを使用する際の注意事項を2つほどピックアップしておきたいと思います。


・CMKでの直接暗号化
CMKを使用してデータを直接暗号化できますがその際の最大容量は4KBまでです。
そのため一般的にはCDKを用いた暗号化が推奨されます。

・リージョン間でのキー共有はできない
CMKは生成したリージョン内でのみ使用できます。

他にもKMS APIのレート上限やリソース作成数の上限など制約はありますが、
実際に使用する上で意識しておくべきなのは上記2点だと思います。

あとがき

以上がKMSについてのまとめでした!


順序立てて理解すると少し理解しやすかったように思います。
少しややこしいサービスなので迂回してしまいがち(僕みたいに)
ですが本記事でより効率よく学習できるきっかけになれば幸いです。


HSMもちゃんと勉強しないとなあ(泣)


ここまで読んでいただきありがとうございました!


↓オススメ教材

AWS

Posted by CY