AWSでKMSを使用する機会はあると思いますが、特にAmazon S3(以下、「S3」)に適用するためにどのように選択するかを今回記載したいと思います。
KMSの種類
KMSには大きく以下の2種類があります。
- AWSマネージド型キー
- カスタマー管理型のキー
AWSマネージド型キーはその名の通りAWSが管理を行っております。
そのためユーザー側でのキーの管理が最小限に抑えられることができますが、反面で設定可能な内容は非常に限られており細かい制御を行うことはできません。
カスタマー管理型のキーは詳細をユーザーが設定管理することができます。
キー自体も外部から取り込むこともでき、削除や有効化/無効化の制御も行うことができます。
そのため拡張性が高いのが特徴となりますが、管理はユーザーが適切に行うことを求められます。
どちらもリクエスト数による従量課金制ですが、カスタマー管理型のキーの場合はさらにそこに月額1ドルが発生いたします。
どう使い分けをするか
AWSマネージド型キーはAWSが管理を行うため、キーポリシーなどの設定が行えません。
そのため、以下のようなリソースに対して設定をするのに向いています。
- 暗号化が必要
- 自身のAWSアカウント内に閉じているリソース
- 細かい制御が不要
従ってAmazon RDSやDynamoDBなど、外部からアクセスが行われにくいものに向いていると言えると思います。
代わりにカスタマー管理型のキーは詳細を設定できるため、クロスアカウントや細かいアクセス制御を行うリソースに向いております。
S3の暗号化に関して
S3に関してはさらにこの2種類に追加してSSE-S3という別の暗号化方式が存在するため、さらに考慮が必要となります。
SSE-S3は、S3で特段設定を行わない場合にデフォルトで設定される暗号方式であり、無料で使用することができます。
無料である代わりにキーに対しての制御は一切行うことができず、「いつ」「誰が」使用したのかを追うこともできません。
そのため、S3に対してどのような制御を行いたいかの要件によって使用するキーの種類が変わってきます。
-
「いつ」「誰が」使用したかの証跡が必要
→KMSキー(AWSマネージド型、またはカスタマー管理型) -
デフォルトの暗号化以外の方式で秘匿性を高めたい
→KMSキー(AWSマネージド型、またはカスタマー管理型) -
キーに対して細かい制御が必要(クロスアカウントでのアクセスなど)
→KMSキー(カスタマー管理型)
※Bucketに対してのクロスアカウントアクセスのみであればSSE-S3でも可。
ここでは「キーに対する制御」がポイントとなります。 -
上記以外
→SSE-S3
AWSマネージド型とカスタマー管理型のどちらでもよい場合は、AWSマネージド型を選ぶ方がよいと思います。
ただし一部の処理によってはSSE-S3でないとエラーが発生するケースもありますので、事前にきちんと調査を行い適切な暗号化の種類を選択いたしましょう。
今回はKMSについて簡単ですが記載をさせていただきました。
皆様の開発の一助となれば幸いです。

