データ保護に使う暗号化キーを一元管理。AWS KMS をグラレコで解説
Author : 米倉 裕基
※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は 、Jerry Hargrove 氏が運営しているサイトです。
builders.flash 読者のみなさん、こんにちは ! テクニカルライターの米倉裕基と申します。
本記事では、各種 AWS サービス上のデータを暗号化する際に使用する暗号化キーの作成と管理を行うマネージドサービス「AWS Key Management Service (以下 KMS)」を紹介します。
AWS では、クラウドのセキュリティを最優先事項と考えています。AWS が提供する各サービスは、インフラレベル、ネットワークレベルで、高いセキュリティを確保するように設計されていますが、これらのサービスが扱うデータ自体を暗号化することでさらにセキュリティを向上できます。KMS を使うことで、データの暗号化処理に使用される暗号化キーを容易に作成・管理できます。
KMS の特徴
暗号化とは、機密データを第三者に読み取られないようにするために、解読不可能な状態に加工することです。暗号化処理には、暗号化用の固有の鍵を使用します。暗号化されたデータを元のデータに復号するには適切な鍵が必要になります。この固有の鍵を厳密に管理することで、不適切なアクセスに対してデータが開示されてしまうことを防ぎます。
暗号化においては、暗号化キーがどこで管理され、どこで使われ、誰が使用でき、どのようにセキュリティが確保されているかが重要です。KMS では、堅牢なシステムに複数の暗号化キーを一元管理し、権限を持ったユーザー以外のアクセスを制限します。さらに、多くの AWS サービスと統合しているため、複雑な操作をすることなく AWS サービス上のデータを保護する暗号化キーを簡単に作成、管理できる利便性の高さもサービスの特徴の一つです。
2022 年 9 月現在、KMS で提供している主な機能は以下のとおりです。
- KMS キーの生成と安全な保管
- KMS キー利用の権限管理
- KMS キー利用の監査
- 最大 4KB のデータ暗号化
- AWS サービスとの統合
- KMS キーのインポート
本記事では、KMS が提供する機能と特徴を以下の順で説明します。
KMS キー
KMS は、暗号化キーを作成、所有、管理するサービスです。ここでは KMS キーの種類と作成方法について説明します。
KMS キーの種類
KMS キーは以下の 3 種類があります。
KMS キーのタイプ | 特徴 | ユーザーがキーを管理可能 | AWS アカウント のみで使用 | キーのメタデータを表示可能 | 自動ローテーション |
カスタマーマネージドキー | ユーザーの AWS アカウント内で、ユーザーが任意で作成、所有、管理できる KMS キーです。 ユーザーが KMS を使って、アクセス制御や、有効化・無効化、キーの削除スケジュールの設定などの操作を行えます。KMS キーの自動ローテーションは 1 年 に 1 度自動で実行されますが、任意のタイミングでユーザーが手動で行うこともできます。 |
はい | はい | はい | オプション。毎年 (約 365 日) |
AWS マネージドキー | ユーザーの AWS アカウント内の AWS のサービスが、ユーザーに代わって作成、管理、使用する KMS キーです。 ユーザーは KMS を使って、キーポリシーや暗号化設定などメタデータの確認のみ行えます。KMS キーのローテーションは 1 年に 1 度自動で実行され、ユーザーの任意で行えません。 |
いいえ | はい | はい | 必須。毎年 (約 365 日) |
AWS 所有のキー | 関連する AWS サービスを 複数の AWS アカウントで利用するために、AWS が所有、管理している KMS キーです。ユーザーが、作成、管理、監査できる暗号化キーではありません。 | いいえ | いいえ | いいえ | 可変 |
ユーザーが KMS を使って作成、所有、管理できる KMS キーはカスタマーマネージドキーで、AWS マネージドキーはキー ID や、キーのタイプ (対称キーあるいは非対称キー)、キーの仕様など、キーのメタデータの表示のみ可能です。AWS 所有のキーは、一部の AWS サービスが暗黙的にデータ暗号化に利用する KMS キーで、ユーザーが特に意識するものではありません。
KMS キーについて詳しくは、「カスタマーキーと AWS キー」をご覧ください。
KMS キーの作成
KMS キーは、マネジメントコンソール、AWS CLI および AWS SDK を使っていつでも任意のタイミングで作成できます。
キーの作成方法について詳しくは、「キーの作成」をご覧ください。
![](https://d1.awsstatic.com/Developer%20Marketing/jp/magazine/2022/img_awsgeek-kms_01.fbc089a33598a9988c3f633a76ed4f3daecb7868.png)
キーマテリアルオリジンのタイプ
KMS キーを作成する際には、キーマテリアルオリジンのタイプを選択する必要があります。KMS がサポートしているキーマテリアルオリジンは以下の 3 種類です。
キーマテリアルオリジン | キーのタイプ | 特徴 |
KMS | 対称 / 非対称 | KMS 上でキーマテリアルを持つ KMS キーを作成・管理します。特別な要件がない限り、ほとんどのユースケースでこのオプションを選択します。KMS ではこのオプションのみ非対称キーをサポートしています。 |
外部 | 対称 | ユーザー所有のキーをインポートしてキーマテリアルを生成します。「外部」を利用する場合、キーの可用性はユーザーの責任になります。詳細は、次の「ユーザー所有のキーのインポート」をご覧ください。 |
カスタムキーストア | 対称 | AWS CloudHSM クラスターで管理しているキーを使って、KMS キー用のキーマテリアルを生成します。AWS CloudHSM が準拠するコンプライアンス要件と、KMS が提供する利便性を統合できます。「外部」と同様、「カスタムキーストア」を利用する場合、キーの可用性はユーザーの責任になります。 |
通常は、KMS 上でキーマテルアルを含む KMS キーを作成・管理するキーマテリアルオリジン「KMS」を選択します。KMS 以外で生成したキーを使いたい場合、ユーザー所有のキーのインポートを前提とした「外部」、または AWS CloudHSM で管理しているキーを利用する「カスタムキーストア」を選択します。
AWS CloudHSM は、クラウドベースのハードウェアセキュリティモジュール (HSM) です。主に FIPS 140-2 Level 3 と呼ばれるコンプライアンス要件を満たすために利用されます。「カスタムキーストア」として AWS Cloud HSM を利用することで、このコンプライアンス要件を満たしながら、KMS を利用できます。
キーマテリアルオリジンについて詳しくは、「キーマテリアルのオリジン」をご覧ください。
ユーザー所有のキーのインポート
KMS では、ユーザーが独自に作成した暗号化キーを KMS キーとしてインポートできます。この機能は、ユーザー所有のキーを KMS に持ち込むという意味で、Bring Your Own Key (BYOK) と呼ばれます。
KMS キーのインポート
KMS キーのインポートの手順は以下のとおりです。
- キーマテリアルオリジンを「外部」に選択し、空の KMS キーを作成する。
- ラップキーとインポートキーをダウンロードする。
- ラップキーを使ってユーザーが作成したキーを暗号化する。
- 手順 3 で暗号化したキーと手順 2 でダウンロードしたインポートキーを KMS にアップロードする。
上記の手順でユーザー所有のキーを KMS キーとしてインポートできます。
![](https://d1.awsstatic.com/Developer%20Marketing/jp/magazine/2022/img_awsgeek-kms_02.8a4a967e75fb5ab2423df903e107bb37a387bc02.png)
BYOK の制約事項
BYOK で KMS キーを作成した場合、以下の制約事項があります。
- インポート可能なキーマテリアルは 256bit の対称キーのみ。
- 自動キーローテーションは不可。キーローテーションは手動で行う必要がある。
- リージョン障害などで KMS キーに障害があった際に自動復旧されないため、ユーザー側でバックアップをしておく必要がある。
KMS キーのインポート方法について詳しくは、「キーを AWS Key Management Service にインポートするにはどうすればよいですか ?」をご覧ください。
自動キーローテーションと操作ログの監査
KMSは、悪意のある第三者による KMS キーへのアクセスを防止・監視するための機能や堅牢なシステムを備えています。
KMS で保存している KMS キーはエクスポートできないため、KMS がその耐久性の責任を負います。KMS では、KMS キーを 99.9999999% (イレブンナイン) の高耐久性を持つストレージで安全に保管します。また、キーポリシー や、IAM ポリシー、グラント などによるアクセス制御で不正アクセスを防ぐことができます。
ここでは、KMS キーを自動で更新する自動キーローテーションと、AWS CloudTrail による監査機能について説明します。
自動キーローテーション
AWS マネージドキーの場合は、1 年間に 1 度自動でキーローテーションが行われます。ユーザーは、自動キーローテーションを無効にしたり、手動でローテーションを行うことはできません。
一方、カスタマーマネージドキーの場合は、1 年間に 1 度実行される自動キーローテーションの有効化・無効化を選択できます。また、キーローテーションを任意のタイミングで手動で行うことができるため、独自のキーローテーションスケジュールを設定できます。
KMS のキーローテーションについて詳しくは、「AWS KMS keys ローテーション」をご覧ください。
操作ログの監査
KMS は AWS CloudTrail と完全に統合しており、KMS へのすべての API コールのログを記録して Amazon S3 バケットに送信します。記録されるログ情報には、ユーザーの詳細、時間、日付、API アクション、関連する場合には使用されるキーが含まれます。誰がどのキーを、どのリソースで、いつ使用したかを監査できるため、KMS キーへの不適切な操作がないか確認できます。
AWS CloudTrail による操作ログの記録について詳しくは、「AWS KMS による AWS CloudTrail API 呼び出しのログ記録」をご覧ください。
AWS サービス統合
KMS は、データを扱うさまざまな AWS サービスと統合しています。Amazon S3 や Amazon EFS、Amazon EBS などのデータストレージサービスはもちろん、2022 年 9 月現在、100 を超える AWS サービスと統合しており、それら AWS サービス上で扱うデータの暗号化やデジタル署名に利用できます。
現在、KMS が統合されている AWS サービスの一覧については、「AWS のサービスの統合」をご覧ください。なお、KMS がサポートしていない AWS サービスであっても、サービスが扱うデータは AWS 所有のキーで暗黙的に暗号化されます。
![](https://d1.awsstatic.com/Developer%20Marketing/jp/magazine/2022/img_awsgeek-kms_04.d073add3768f43ae167c1289ad4da1d8ee90ec32.png)
エンベロープ暗号化
KMSでは、KMS キーとカスタマーデータキー (CDK) の 2 種類の暗号化キーを使ってデータの暗号化・復号を行うエンベロープ暗号化という仕組みをサポートしています。
エンベロープ暗号化には、以下のような利点があります。
利点 | 内容 |
データキーの保護 | データキーを暗号化するため、データと共にデータキーを安全に保護できます。 |
複数のキーを使用した同じデータの暗号化 | データを異なるキーで何度も再暗号化する代わりに、データを保護するデータキーのみを再暗号化するため、暗号化処理にかかる時間を短縮できます。 |
複数のアルゴリズムの強度の結合 | 対称キーアルゴリズムの高速性と、パブリックキーアルゴリズムのキー管理の簡易性を両立させることができます。 |
AWS サービス側でデータ暗号化処理を行うサーバーサイド暗号化の場合、自動でエンベロープ暗号化のプロセスが実行されます。一方、ユーザーのアプリケーション側でデータ暗号化処理を行うクライアントサイド暗号化の場合は、ユーザー自身が AWS Lambda などでエンベロープ暗号化のプロセスをアプリケーションに組み込む必要があります。
エンベロープ暗号化のプロセス
エンベロープ暗号化を使った暗号化プロセスは以下のとおりです。
- アプリケーションから AWS SDK の GenerateDataKey オペレーションを使って CDK を生成する。
- KMS で保管している暗号化 KMS キーが復号され、プレーン (暗号化されていない平文の) KMS キーを使って手順 1. で生成した CDK を暗号化する。
- KMS からアプリケーションに、暗号化 CDK とプレーン CDK が返される。
- プレーン CDK を使って対象のデータを暗号化する。
- プレーン CDK と暗号化前のデータを削除する。
- 暗号化データと暗号化 CDK をデータベースなどに保管する。
上記の手順で、エンベロープ暗号化のプロセスに従ったデータの暗号化処理が実行されます。
![](https://d1.awsstatic.com/Developer%20Marketing/jp/magazine/2022/img_awsgeek-kms_05.ea055ad2924a0e9edfc37492f7b9f4d519799118.png)
暗号化されたデータを復号する際は、上記の手順で保管した暗号化データおよび暗号化 CDK と、KMS 上の暗号化 KMS キー を使います。エンベロープ暗号化について詳しくは、「エンベロープ暗号化」をご覧ください。
KMS の利用料金
KMS は、管理している KMS キーの個数や API リクエストの頻度に合わせて自動的にスケールします。複数の暗号化キーの管理を KMS に一元化できるため、スケーラブルなキー管理インフラストラクチャを必要としている場合は、ライセンスコストと運用の負担を軽減できます。
KMS では、KMS キーのストレージ使用量と、KMS への API リクエストに対して従量課金で料金が発生します。
キーストレージ
KMS で作成した KMS キーには、対称キー、非対称キー、HMAC キー、各マルチリージョンキー、キーマテリアルをインポートしたキー、カスタムキーストアのキーなど種類に関わらず、一律で 1 USD / 月の料金が発生します。詳しくは、「キーストレージ」をご覧ください。
なお KMS キーを無効化しても、KMS 内に KMS キーがある限りストレージ料金は継続して発生します。ストレージ料金を止めるには、該当の KMS キーを削除する必要があります。ただし、一度削除したキーは復元できないためご注意ください。
KMS では、今後本当に使用されないキーか確認するために、削除する前に待機期間を設定することができます。詳しくは、「AWS KMS keys を削除する」をご覧ください。
![](https://d1.awsstatic.com/Developer%20Marketing/jp/magazine/2022/img_awsgeek-kms_06.570d41af38dee41aa46dedadf0347c0e11bc1032.png)
キーの使用量
無料利用枠 (20,000 件のリクエスト/月) を超えた API リクエストに対して料金が発生します。
10,000 件のリクエストごとに 0.03 USD の利用料金がかかります。ただし、ECC GenerateDataKeyPair など一部の API リクエストには、10,000 件 / 月を超えるリクエストに 0.03 USD 以上のコストがかかることにご注意ください。詳しくは、「キーの使用量」をご覧ください。
KMS の利用料金について詳しくは、「AWS Key Management Service の料金」をご覧ください。
まとめ
それでは最後に、本記事で紹介した機能の全体図を見てみましょう。
![](https://d1.awsstatic.com/Developer%20Marketing/jp/magazine/2022/img_awsgeek-kms_full.0e5a18e9d629396e71c06650760b0c292751e042.png)
機密データを扱うシステムでは、データを安全に保護するために、暗号化の仕組みを導入することがセキュリティ管理上のベストプラクティスです。暗号化の仕組みを導入する際は、鍵の厳密な管理が必要になります。KMS は、煩雑な鍵管理を、簡易な操作で低コストに提供する AWS サービスです。さまざまなセキュリティ要件を満たしつつ、大切なデータをリスクや脅威から守るためにも、KMS の特徴や機能をよく理解して導入することをお勧めします。
KMS をまだ利用したことがない方や、さらに詳しく知りたい方は、ぜひ製品ページの「AWS Key Management Service (KMS)」も合わせてご覧ください。
AWS グラレコ解説のその他の記事はこちら
- 選択
- 今話題のブロックチェーンをAWSで実現する仕組みをグラレコで解説 »
- サーバーレスって何が便利なの ? AWS でサーバーレスを構築するためのサービスをグラレコで解説 »
- 機械学習のワークフローってどうなっているの ? AWS の機械学習サービスをグラレコで解説 »
- 外部から AWS のバックエンドサービス利用を実現する仕組みをグラレコで解説 »
- AWS でデプロイの自動化を実現するベストプラクティスをグラレコで解説 »
- コンテナを使ってモノリスを分割する方法をグラレコで解説 »
- クラウドへ移行する理由とそのステップをグラレコで解説 »
- Windows ワークロードをクラウドへ移行するためのベストプラクティスをグラレコで解説 »
- サーバーレスのイベントバスって何 ? Amazon EventBridge をグラレコで解説 »
- サーバーレスで SaaS を構築する方法をグラレコで解説 »
- 「あなたへのおすすめ」はどう生成するの ? Amazon Personalize で簡単に実現する方法をグラレコで解説 »
- クラウド設計・運用のベストプラクティス集「AWS Well-Architectedフレームワーク」をグラレコで解説 »
- 特定の顧客セグメントにメッセージ送信。「Amazon Pinpoint」の仕組みをグラレコで解説 »
- アプリにユーザー認証機能を簡単に追加できる「Amazon Cognito」をグラレコで解説 »
- わずか数分で WordPress サイトを構築できる「Amazon Lightsail」をグラレコで解説 »
- 異なるアプリケーション同士の疎結合を実現。「Amazon SQS」をグラレコで解説 »
- Web アプリを高速に開発できる「AWS Amplify」をグラレコで解説 »
- 機械学習の知識ゼロでもテキストデータを分析。Amazon Comprehend をグラレコで解説 »
- ビジネスデータをまとめて可視化 & 分析。Amazon QuickSight をグラレコで解説
- 人工衛星の地上局を 1 分単位で利用。AWS Ground Station をグラレコで解説
- カオスエンジニアリングで本当にカオスにならないための進め方をグラレコで解説
- GraphQL API を簡単に作成 & 運用。AWS AppSync をグラレコで解説
- IoT 環境を必要な機能を選択するだけで構築。AWS IoT をグラレコで解説
- 高い可用性と耐久性のオブジェクトストレージ。Amazon S3 をグラレコで解説
- サーバーレスでイベント駆動型アプリケーションを実現。AWS Lambda をグラレコで解説
- データサイエンス教育の強い味方。Amazon SageMaker Studio Lab をグラレコで解説
- 高速で柔軟な NoSQL データベースサービス。Amazon DynamoDB をグラレコで解説
- リレーショナルデータベースを簡単・迅速に実現。Amazon RDS をグラレコで解説
- アプリのワークフローを視覚的に構成。 AWS Step Functions をグラレコで解説
- データ保護に使う暗号化キーを一元管理。AWS KMS をグラレコで解説
- アプリケーションへのトラフィックを効率的に負荷分散。Application Load Balancer をグラレコで解説
- AWS で簡単にコンテナアプリケーションを構築 ! Amazon ECS をグラレコで解説
- 大規模データセットも簡単クエリ! Amazon Athena をグラレコで解説
- キャッシュ機能でアプリの高速化を実現 ! Amazon ElastiCache をグラレコで解説
- 使い慣れたプログラミング言語でクラウド環境を構築 ! AWS CDK をグラレコで解説
- ストリーミングデータを簡単にキャプチャ、処理、保存 ! Amazon Kinesis Data Streams をグラレコで解説
- AWS で始める機械学習はじめの一歩 ! AWS の主要な AI/ML サービスをグラレコで解説
- リレーショナルデータベースをサーバーレス化 ! Amazon Aurora Serverless をグラレコで解説
- ML 駆動の検索エンジンで企業の情報管理を革新! Amazon Kendra をグラレコで解説
- オンプレミス、エッジ、どこでも楽々コンテナ管理 ! Amazon EKS Anywhere をグラレコで解説
- 生成 AI アプリケーション開発をもっと身近に、簡単に ! Amazon Bedrock をグラレコで解説
- わずか数クリックで多様な脅威を監視しクラウドを保護 ! 脅威検出サービス Amazon GuardDuty をグラレコで解説
筆者プロフィール
![](https://d1.awsstatic.com/Developer%20Marketing/jp/magazine/profile/photo_yonekura-yuki.cbf4c08901cf4e1f69d269038a1b8026095f3f53.jpg)
米倉 裕基
アマゾン ウェブ サービス ジャパン合同会社
テクニカルライター・イラストレーター
日英テクニカルライター・イラストレーター・ドキュメントエンジニアとして、各種エンジニア向け技術文書の制作を行ってきました。
趣味は娘に隠れてホラーゲームをプレイすることと、暗号通貨自動取引ボットの開発です。
現在、AWS や機械学習、ブロックチェーン関連の資格取得に向け勉強中です。
AWS を無料でお試しいただけます