目的
AWSサービスの暗号化としてAWS KMSを学習したので、それについてまとめる。
SAA資格取得を志すどなたかの参考になれば嬉しい。
AWS KMSの概要
AWSにおける暗号化方法は次の二つがあるが、特に奥深いのはCMKsの方である。
-
AWSマネージド型キー(AWS Managed Keys)
暗号化キーの生成から管理、暗号化・複合化を全てAWSでやってくれる暗号化方法である。カスタムができない一方でAWSにおけるデフォルトの暗号化方法である。 -
カスタムマネージド型キー(Customer Managed Keys; CMKs)
暗号化からキーの管理までユーザーが行う暗号化方法である。暗号化のタイミングや暗号化するデータ、暗号化キーそのものも全てユーザーがカスタマイズできる。詳しくは次項。
Customer Managed Keys; CMKs
CMKsではエンベロープ暗号化方式が採用されている。ここでは具体的な暗号化方法の流れとルートキーの生成方法について解説する。
エンベロープ暗号化方式
より簡潔には、データ管理のセキュリティをより強固にするために考案された暗号化方式で、データを暗号化する暗号化キー(データキー)をさらに別のキー(ルートキー)を使って暗号化する方式である。
比較項目 | ルートキー | データキー |
---|---|---|
役割 | データキーを生成、暗号化、復号する | データを暗号化、復号する |
生成方法 | KMS APIによる生成 | KMS APIによる生成 |
管理場所 | AWS KMS(AWS内部で永続化される) | ユーザーの管理場所(AWS内部で永続化されない) |
エクスポート | 不可 | 可 |
キー | AWSが管理、ユーザーはルートキーIDのみを使用 | ユーザーがキー本体を扱う |
データの暗号化・復号化
- キーの生成@AWS内部
- ユーザーはAWS KMS APIでCreateKeyを実行し、ルートキーが生成されるがユーザーはそのもの事態を知ることはできず、ルートキーIDを返却される。ルートキーはAWS内部で管理される。
- ユーザーはルートキーIDを指定してAWS KMS APIでGenerateDataKeyを実行し、データキーを生成する。
- データの暗号化@ローカル
- 生成されたデータキー(平文)でデータ(平文)を元に暗号化されたデータ(暗号)を生成する
- ルートキーでデータキー(平文)を元に暗号化されたデータキー(暗号)を生成する
- データ(平文)とデータキー(平文)を削除する ←ここ重要
- データの復号化@ローカル
- ルートキーでデータキー(暗号)を元にルートキー(平文)を復元する
- 復元したデータキー(平文)でデータ(暗号)を元にデータ(平文)を復元する
ルートキーの生成元(キーマテリアルオリジン)
ルートキーの生成元をユーザーは次の4つから選ぶことができる。
- KMS:最も推奨される方法でルートキーの生成、管理をAWSが行うデフォルト設定
- 外部(キーマテリアルのインポート):外部で生成したルートキーをKMSにインポートして使用する方法。独自のセキュリティ要件を持っているプロジェクトや企業の場合に使われたりする。ルートキー自体はAWSが管理する。
- AWS CloudHSM キーストア:ユーザーがHSMインスタンスを生成し、そこでルートキーの生成と管理を行う方法。セキュリティ要求が高いシステム向けに、HSMデバイス上で鍵を生成・管理するため、より物理的に強固な保護を提供する。
- 外部キーストア:企業が独自に運用するキーストアをAWS KMSと連携させる方法で、完全に自社管理のインフラやセキュリティモデルを使用する場合に採用される。
※ここでキーストアとは下記である。
- 鍵の安全な保存: 鍵が漏洩しないよう、暗号化された形で保存。
- 鍵のアクセス管理: 誰がその鍵にアクセスできるのかを制御。
- 鍵のライフサイクル管理: 鍵の生成、更新、削除、ローテーションなどを行う。
- 鍵の操作: 暗号化や復号化など、鍵を使った操作を安全に行う。
キーマテリアルオリジンがKMSの場合はルートキーのローテーションを設定することができる。要するにルートキーの有効期限を設定し、ルートキーの有効期限が切れると新しいルートキーを発行し、自動的に新しいルートキーで暗号化してくれるようになる。ただし、古いルートキーによって暗号化されたデータキーはそのまま古いルートキーによって複合することができる。
まとめ
SAAの試験対策レベルですがとっかかりで理解するには十分な内容かと思う。
図も作ってもっと分かりやすくしときます。