AWS Key Management Service
開発者ガイド

AWS Key Management Service の概念

AWS Key Management Service (AWS KMS) の基本的な用語および概念についてと、それらがデータの保護にどのように役立つかについて説明します。

カスタマーマスターキー

AWS KMS のプライマリリソースはカスタマーマスターキー (CMK) です。CMK を使用してデータを最大 4 KB (4096 バイト) まで暗号化したり復号することができます。データを暗号化するために AWS KMS の外で使用するデータキーの生成、暗号化、復号には、通常 CMK を使用します。この戦略は、エンベロープ暗号化と呼ばれています。

AWS KMS は CMK を保存、トラック、保護します。CMK を使用する場合は、AWS KMS を通じてアクセスします。CMK が AWS KMS を暗号化していない状態にしておくことはありません。 このストラテジーは AWS KMS が返すデータキーとは異なります (オプションでプレーンテキストの使用も可能)。AWS KMS はデータキーを保存、管理、または追跡しません。

AWS アカウントには 2 種類の CMK があります。

  • カスタマー管理の CMK は、ユーザーが作成、管理、使用する CMK です。これには CMK の有効化と無効化暗号化情報のローテーション、CMK へのアクセス管理や暗号化オペレーションで CMK を使用する IAM ポリシーとキーポリシーの確立 が含まれます。AWS サービスがカスタマー管理の CMK を使用するように許可できますが、その場合でも CMK の管理権はユーザーが維持します。

     

  • AWS 管理の CMK は、AWS KMS と統合している AWS サービスがユーザーの代理として作成、管理、使用する、ユーザーアカウント内の CMK です。この CMK はユーザーの AWS アカウントおよびリージョンに固有のものです。AWS 管理の CMK を作成したサービスだけが、これを使用できます。

     

    AWS 管理の CMK のエイリアスは aws/service-nameaws/redshift といった形式を使用するので認識できます。通常、サービスのセットアップ時または CMK を初めて使用する時に、サービスがアカウント内に AWS 管理の CMK を作成します。

AWS KMS と統合する AWS サービスはさまざまな方法で使用することができます。一部のサービスは、アカウント内に AWS 管理の CMK を作成します。その他のサービスでは、作成したカスタマー管理の CMK を指定する必要があります。また、その他は AWS 管理の CMK の使いやすさやカスタマー管理の CMK の管理を可能にするため、CMK の両タイプをサポートしています。

データキー

データキーは、大量のデータや他のデータ暗号化キーといったデータを暗号化するための暗号化キーです。

AWS KMS カスタマーマスターキー (CMK) を使用して、データキーの生成、暗号化、復号化を実行できます。ただし、AWS KMS はデータキーの保存、管理、追跡、またはデータキーの暗号化オペレーションを実行しません。AWS KMS の外部でデータキーを使用して管理する必要があります。

データキーの作成

データキーを生成するには、GenerateDataKey オペレーションを呼び出します。AWS KMS が指定した CMK を使用してデータキーを生成します。このオペレーションは、以下の図に示すように、データキーのプレーンテキストコピーと CMK で暗号化されたデータキーのコピーを返します。


        データキーを生成する

AWS KMS は暗号化されたデータキーのみを返す GenerateDataKeyWithoutPlaintext オペレーションもサポートしています。データキーを使用する必要がある場合、AWS KMS にそのデータキーを復号化するように求めます。

データキーでデータを暗号化する

AWS KMS はデータキーを使用してデータを暗号化することはできませんが、OpenSSL や AWS 暗号化 SDK のような暗号化ライブラリなどを使用して、KMS の外部でデータキーを使用することができます。

プレーンテキストのデータキーを使用してデータを暗号化したら、できる限り早急にメモリからそれを削除します。暗号化したデータと一緒に暗号化データキーを安全に保存して、データの復号化に利用することができます。


        AWS KMS の外部でユーザーデータを暗号化する

データキーでデータを復号化する

データを復号するには、Decrypt オペレーションに暗号化されたデータキーを渡します。AWS KMS は CMK を使ってデータキーを復号し、プレーンテキストのデータキーを返します。プレーンテキストのデータキーを使ってデータを復号し、続いてできる限り早急にメモリからプレーンテキストのデータキーを削除します。

次の図は、Decrypt オペレーションを使用して暗号化されたデータキーを復号する方法を示しています。


        データキーの復号化

エンベロープ暗号化

データを暗号化するとデータは保護されますが、暗号化キーを保護する必要があります。1 つの戦略としては、それを暗号化します。エンベロープ暗号化は、データキーでプレーンテキストデータを暗号化してから、そのデータキーを別のキーで暗号化する手法です。

データ暗号化キーを別の暗号化キーで暗号化し、その暗号化キーを別の暗号化キーで暗号化することもできます。しかし、最終的には、キーとデータを復号化するために、1 つのキーをプレーンテキストで保持する必要があります。この最上位プレーンテキストキー暗号化キーは、マスターキーと呼ばれます。


        エンベロープ暗号化

AWS KMS は、マスターキーを安全に保管して管理することで、マスターキーを保護するために役立ちます。AWS KMS に保管されたマスターキーはカスタマーマスターキー (CMK) と呼ばれ、AWS KMS FIPS で検証されたハードウェアセキュリティモジュールを非暗号化されたまま移動することはありません。AWS KMS CMK を使用するには、AWS KMS を呼び出す必要があります。


        複数キー暗号化キーによるエンベロープ暗号化

エンベロープ暗号化には、いくつかの利点があります。

  • データキーの保護

    データキーを暗号化する場合、暗号化されたデータキーの保存について心配する必要がありません。これは、そのデータキーが暗号化によって本質的に保護されているためです。暗号化されたデータとともに、暗号化されたデータキーを安全に保存できます。

  • 複数のマスターキーでの同じデータの暗号化

    暗号化オペレーションには時間がかかります (特に、暗号化するデータが大きいオブジェクトである場合)。異なるキーで raw データを複数回にわたって再暗号化する代わりに、raw データを保護するデータキーのみを再暗号化できます。

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

    通常、対称キーアルゴリズムが、パブリックキーアルゴリズムよりも迅速に小さい暗号化テキストを作成できますが、パブリックキーアルゴリズムはロールを本質的に分離し、キー管理を簡単にします。エンベロープ暗号化により、それぞれの戦略を組み合わせることができます。

暗号化コンテキスト

すべての AWS KMS 暗号化オペレーションでは、データに関する追加のコンテキスト情報を含めることができるキー–値のペアのオプションのセットである、暗号化コンテキストを使用できます。

AWS KMS 暗号化オペレーションに暗号化コンテキストを提供するときに、対応する復号化オペレーションと同じ暗号化コンテキストを指定する必要があります。対応しない場合、復号化リクエストは失敗します。

この暗号化コンテキストはシークレットではありません。これは AWS CloudTrail ログに表示されるため、それを使用してログと監査の暗号化オペレーションを識別して分類できます。また、AWS KMS オペレーションへのアクセスを制御するポリシーステートメントの条件として、暗号化コンテキストを使用することもできます。

たとえば、Amazon Simple Storage Service (Amazon S3) は、キーが aws:s3:arn であり、値が暗号化されているファイルへの S3 バケットパスである暗号化コンテキストを使用します。

"encryptionContext": { "aws:s3:arn": "arn:aws:s3:::bucket_name/file_name" },

暗号化コンテキストの詳細については、「暗号化コンテキスト」を参照してください。

キーポリシー

CMK を作成するとき、その CMK を使用して管理できるユーザーを決定します。これらのアクセス権限は、キーポリシーと呼ばれるドキュメントに含まれます。キーポリシーを使って、カスタマー管理の CMK のアクセス権限をいつでも追加、削除、または変更できますが、AWS 管理の CMK のキーポリシーを編集することはできません。詳細については、「AWS KMS に対する認証とアクセスコントロール」を参照してください。

許可

許可は、キーポリシーに代わってアクセス権限を提供する別のメカニズムです。許可を使用すると、AWS プリンシパルでカスタマー管理型の CMK を使用できる、長期のアクセスを付与することができます。詳細については、「許可の使用」を参照してください。

許可トークン

許可を作成する場合、許可で指定されたアクセス権限は、結果整合性により、即時に反映されない場合があります。潜在的な遅延を軽減する必要がある場合は、CreateGrant API リクエストへのレスポンスで受け取る許可トークンを使用します。いくつかの AWS KMS API リクエストとともに許可トークンを渡し、許可のアクセス権限を即時有効にすることができます。次の AWS KMS API オペレーションでは許可トークンを使用できます。

許可トークンはシークレットではありません。許可トークンには、その対象としているユーザーに関する情報が含まれるため、これを使用してより迅速に許可のアクセス権限を有効にできるユーザーに関する情報が含まれます。

CMK の使用の監査

キーの利用を監査するには AWS CloudTrail を使用します。CloudTrail は、AWS API 呼び出しとアカウントの関連イベントの履歴を含むログファイルを作成します。これらのログファイルには、AWS マネジメントコンソール、AWS SDK、コマンドラインツールで行われたすべての AWS KMS API リクエスト、および統合 AWS サービスを通じて行われたすべてのリクエストが含まれます。これらのログファイルを使って、CMK が使用された日時、リクエストされたオペレーション、リクエスタの ID、リクエスト元の IP アドレスなどについての情報を取得できます。詳細については、「AWS CloudTrail を使用した AWS KMS API コールのログ記録」と『AWS CloudTrail User Guide』を参照してください。

キー管理のインフラストラクチャ

暗号化の一般的な手法では、AES (Advanced Encryption Standard) など一般に利用でき専門家によって検証されたアルゴリズムとシークレットキーを使用して暗号化し、復号する必要があります。暗号化での主な問題の 1 つは、キーを秘密にしておくのが非常に困難なことです。これは通常、キー管理インフラストラクチャ (KMI) のジョブです。AWS KMS はお客様に代わって KMI を運用します。AWS KMS は CMK と呼ばれるマスターキーを作成し、安全に保存します。AWS KMS の動作の詳細については、「AWS Key Management Service 暗号化の詳細」ホワイトペーパーを参照してください。