メインコンテンツに移動
AWS グラレコ解説

データ保護に使う暗号化キーを一元管理。 AWS KMS をグラレコで解説

2022-10-03 | Author : 米倉 裕基

はじめに

builders.flash 読者のみなさん、こんにちは ! テクニカルライターの米倉裕基と申します。
本記事では、各種 AWS サービス上のデータを暗号化する際に使用する暗号化キーの作成と管理を行うマネージドサービス「AWS Key Management Service (以下 KMS)」を紹介します。

AWS では、クラウドのセキュリティを最優先事項と考えています。AWS が提供する各サービスは、インフラレベル、ネットワークレベルで、高いセキュリティを確保するように設計されていますが、これらのサービスが扱うデータ自体を暗号化することでさらにセキュリティを向上できます。KMS を使うことで、データの暗号化処理に使用される暗号化キーを容易に作成・管理できます。

※ 本連載では、様々な AWS サービスをグラフィックレコーディングで紹介する awsgeek.com を、日本語に翻訳し、図の解説をしていきます。awsgeek.com は 、Jerry Hargrove 氏が運営しているサイトです。


X ポスト » | Facebook シェア » | はてブ »

builders.flash メールメンバー登録

builders.flash メールメンバー登録で、毎月の最新アップデート情報とともに、AWS を無料でお試しいただけるクレジットコードを受け取ることができます。 
今すぐ登録 »

KMS の特徴

暗号化とは、機密データを第三者に読み取られないようにするために、解読不可能な状態に加工することです。暗号化処理には、暗号化用の固有の鍵を使用します。暗号化されたデータを元のデータに復号するには適切な鍵が必要になります。この固有の鍵を厳密に管理することで、不適切なアクセスに対してデータが開示されてしまうことを防ぎます。

暗号化においては、暗号化キーがどこで管理され、どこで使われ、誰が使用でき、どのようにセキュリティが確保されているかが重要です。KMS では、堅牢なシステムに複数の暗号化キーを一元管理し、権限を持ったユーザー以外のアクセスを制限します。さらに、多くの AWS サービスと統合しているため、複雑な操作をすることなく AWS サービス上のデータを保護する暗号化キーを簡単に作成、管理できる利便性の高さもサービスの特徴の一つです。

2022 年 9 月現在、KMS で提供している主な機能は以下のとおりです。

  • KMS キーの生成と安全な保管

  • KMS キー利用の権限管理

  • KMS キー利用の監査

  • 最大 4KB のデータ暗号化

  • AWS サービスとの統合

  • KMS キーのインポート


本記事では、KMS が提供する機能と特徴を以下の順で説明します。

  1. KMS キー

  2. ユーザー所有のキーのインポート

  3. 自動キーローテーションと操作ログの監査

  4. AWS サービス統合

  5. エンベロープ暗号化

  6. 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 を使っていつでも任意のタイミングで作成できます。

キーの作成方法について詳しくは、「キーの作成」をご覧ください。

A diagram in Japanese illustrating AWS Key Management Service (KMS) key management, showing the creation and import of keys, integration with CloudHSM, AWS SDK, and AWS CLI.

キーマテリアルオリジンのタイプ

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 キーのインポートの手順は以下のとおりです。

  1. キーマテリアルオリジンを「外部」に選択し、空の KMS キーを作成する。

  2. ラップキーインポートキーをダウンロードする。

  3. ラップキーを使ってユーザーが作成したキーを暗号化する。

  4. 手順 3 で暗号化したキーと手順 2 でダウンロードしたインポートキーを KMS にアップロードする。

上記の手順でユーザー所有のキーを KMS キーとしてインポートできます。

BYOK の制約事項
BYOK で KMS キーを作成した場合、以下の制約事項があります。

インポート可能なキーマテリアルは 256bit の対称キーのみ。 

自動キーローテーションは不可。キーローテーションは手動で行う必要がある。 

リージョン障害などで KMS キーに障害があった際に自動復旧されないため、ユーザー側でバックアップをしておく必要がある。

KMS キーのインポート方法について詳しくは、「キーを AWS Key Management Service にインポートするにはどうすればよいですか ?」をご覧ください。

A Japanese-language diagram illustrating the step-by-step process for importing a key into AWS Key Management Service (KMS). The diagram shows four steps: creating an empty KMS key, downloading the wrap key and import key, encrypting your own key with the wrap key, and uploading both your key and the import key. The diagram includes icons for each step and a note that the download is valid for 24 hours.

自動キーローテーションと操作ログの監査

KMSは、悪意のある第三者による KMS キーへのアクセスを防止・監視するための機能や堅牢なシステムを備えています。
KMS で保存している KMS キーはエクスポートできないため、KMS がその耐久性の責任を負います。KMS では、KMS キーを 99.9999999% (イレブンナイン) の高耐久性を持つストレージで安全に保管します。また、キーポリシー や、IAM ポリシーグラント などによるアクセス制御で不正アクセスを防ぐことができます。

ここでは、KMS キーを自動で更新する自動キーローテーションと、AWS CloudTrail による監査機能について説明します。

自動キーローテーション

AWS マネージドキーの場合は、1 年間に 1 度自動でキーローテーションが行われます。ユーザーは、自動キーローテーションを無効にしたり、手動でローテーションを行うことはできません。

一方、カスタマーマネージドキーの場合は、1 年間に 1 度実行される自動キーローテーションの有効化・無効化を選択できます。また、キーローテーションを任意のタイミングで手動で行うことができるため、独自のキーローテーションスケジュールを設定できます。

KMS のキーローテーションについて詳しくは、「AWS KMS keys ローテーション」をご覧ください。

A hand-drawn style diagram in Japanese showing the process of AWS Key Management Service (KMS) automatic key rotation and the logging of all key operations in CloudTrail. The diagram illustrates encrypted storage, durability, master key storage, and log tracking, with all text and explanations presented in Japanese.

操作ログの監査

KMS は AWS CloudTrail と完全に統合しており、KMS へのすべての API コールのログを記録して Amazon S3 バケットに送信します。記録されるログ情報には、ユーザーの詳細、時間、日付、API アクション、関連する場合には使用されるキーが含まれます。誰がどのキーを、どのリソースで、いつ使用したかを監査できるため、KMS キーへの不適切な操作がないか確認できます。

AWS CloudTrail による操作ログの記録について詳しくは、「AWS KMS による AWS CloudTrail API 呼び出しのログ記録」をご覧ください。

AWS サービス統合

KMS は、データを扱うさまざまな AWS サービスと統合しています。Amazon S3Amazon EFSAmazon EBS などのデータストレージサービスはもちろん、2022 年 9 月現在、100 を超える AWS サービスと統合しており、それら AWS サービス上で扱うデータの暗号化やデジタル署名に利用できます。

現在、KMS が統合されている AWS サービスの一覧については、「AWS のサービスの統合」をご覧ください。なお、KMS がサポートしていない AWS サービスであっても、サービスが扱うデータは AWS 所有のキーで暗黙的に暗号化されます。

AWSサービス統合を示す手描き風の日本語ダイアグラム。CloudTrail、Glue、Firehose、S3、EBS、Lambda、Neptune、Redshift、CodePipeline、SageMaker、EFS、OpenSearch Service、X-Ray、その他のサービスのアイコンが中央の『AWSサービス統合』を中心として放射状に配置されている。

エンベロープ暗号化

KMSでは、KMS キーとカスタマーデータキー (CDK) の 2 種類の暗号化キーを使ってデータの暗号化・復号を行うエンベロープ暗号化という仕組みをサポートしています。

エンベロープ暗号化には、以下のような利点があります。

利点

内容

データキーの保護

データキーを暗号化するため、データと共にデータキーを安全に保護できます。

複数のキーを使用した同じデータの暗号化

データを異なるキーで何度も再暗号化する代わりに、データを保護するデータキーのみを再暗号化するため、暗号化処理にかかる時間を短縮できます。

複数のアルゴリズムの強度の結合

対称キーアルゴリズムの高速性と、パブリックキーアルゴリズムのキー管理の簡易性を両立させることができます。

AWS サービス側でデータ暗号化処理を行うサーバーサイド暗号化の場合、自動でエンベロープ暗号化のプロセスが実行されます。一方、ユーザーのアプリケーション側でデータ暗号化処理を行うクライアントサイド暗号化の場合は、ユーザー自身が AWS Lambda などでエンベロープ暗号化のプロセスをアプリケーションに組み込む必要があります。

エンベロープ暗号化のプロセス

エンベロープ暗号化を使った暗号化プロセスは以下のとおりです。

  1. アプリケーションから AWS SDK の GenerateDataKey オペレーションを使って CDK を生成する。

  2. KMS で保管している暗号化 KMS キーが復号され、プレーン (暗号化されていない平文の) KMS キーを使って手順 1. で生成した CDK を暗号化する。

  3. KMS からアプリケーションに、暗号化 CDK とプレーン CDK が返される。

  4. プレーン CDK を使って対象のデータを暗号化する。

  5. プレーン CDK と暗号化前のデータを削除する。

  6. 暗号化データと暗号化 CDK をデータベースなどに保管する。

上記の手順で、エンベロープ暗号化のプロセスに従ったデータの暗号化処理が実行されます。

暗号化されたデータを復号する際は、上記の手順で保管した暗号化データおよび暗号化 CDK と、KMS 上の暗号化 KMS キー を使います。エンベロープ暗号化について詳しくは、「エンベロープ暗号化」をご覧ください。

A hand-drawn style diagram in Japanese illustrating the AWS Key Management Service (KMS) envelope encryption process, including key generation, data encryption, the use of Lambda and SDK, and encrypted data storage.

KMS の利用料金

KMS は、管理している KMS キーの個数や API リクエストの頻度に合わせて自動的にスケールします。複数の暗号化キーの管理を KMS に一元化できるため、スケーラブルなキー管理インフラストラクチャを必要としている場合は、ライセンスコストと運用の負担を軽減できます。

KMS では、KMS キーのストレージ使用量と、KMS への API リクエストに対して従量課金で料金が発生します。

キーストレージ

KMS で作成した KMS キーには、対称キー、非対称キー、HMAC キー、各マルチリージョンキー、キーマテリアルをインポートしたキー、カスタムキーストアのキーなど種類に関わらず、一律で 1 USD / 月の料金が発生します。詳しくは、「キーストレージ」をご覧ください。

なお KMS キーを無効化しても、KMS 内に KMS キーがある限りストレージ料金は継続して発生します。ストレージ料金を止めるには、該当の KMS キーを削除する必要があります。ただし、一度削除したキーは復元できないためご注意ください。

KMS では、今後本当に使用されないキーか確認するために、削除する前に待機期間を設定することができます。詳しくは、「AWS KMS keys を削除する」をご覧ください。

Illustration in Japanese showing AWS KMS (Key Management Service) key costs, including storage fee per key ($1/month) and usage fee per 10,000 uses (3 cents), with graphical representations of keys and a note about scalability according to needs.

キーの使用量

無料利用枠 (20,000 件のリクエスト/月) を超えた API リクエストに対して料金が発生します。

10,000 件のリクエストごとに 0.03 USD の利用料金がかかります。ただし、ECC GenerateDataKeyPair など一部の API リクエストには、10,000 件 / 月を超えるリクエストに 0.03 USD 以上のコストがかかることにご注意ください。詳しくは、「キーの使用量」をご覧ください。

KMS の利用料金について詳しくは、「AWS Key Management Service の料金」をご覧ください。

まとめ

それでは最後に、本記事で紹介した機能の全体図を見てみましょう。

機密データを扱うシステムでは、データを安全に保護するために、暗号化の仕組みを導入することがセキュリティ管理上のベストプラクティスです。暗号化の仕組みを導入する際は、鍵の厳密な管理が必要になります。KMS は、煩雑な鍵管理を、簡易な操作で低コストに提供する AWS サービスです。さまざまなセキュリティ要件を満たしつつ、大切なデータをリスクや脅威から守るためにも、KMS の特徴や機能をよく理解して導入することをお勧めします。

KMS をまだ利用したことがない方や、さらに詳しく知りたい方は、ぜひ製品ページの「AWS Key Management Service (KMS)」も合わせてご覧ください。

全体図

筆者プロフィール

米倉 裕基
アマゾン ウェブ サービス ジャパン合同会社
テクニカルライター・イラストレーター

日英テクニカルライター・イラストレーター・ドキュメントエンジニアとして、各種エンジニア向け技術文書の制作を行ってきました。
趣味は娘に隠れてホラーゲームをプレイすることと、暗号通貨自動取引ボットの開発です。
現在、AWS や機械学習、ブロックチェーン関連の資格取得に向け勉強中です。

Portrait photograph of a person with short dark hair, wearing glasses and a gray sweater, against a light blue background.