メニュー
AWS Key Management Service
開発者ガイド

AWS Key Management Service の概念

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

カスタマーマスターキー

AWS KMS のプライマリリソースはカスタマーマスターキー (CMK) です。CMK はお客様または AWS が管理します。いずれかのタイプの CMK を使って、最大 4 キロバイト (4096 バイト) のデータを直接保護できます。通常は CMK を使ってデータ暗号化キー (またはデータキー) を保護し、次にそれを使ってサービス外部のより多い量のデータを暗号化または復号します。CMK では、AWS KMS を暗号化しないままにすることはできませんが、データキーではこれが可能です。AWS KMS ではデータキーは保存、管理、または追跡されません。

AWS KMS と統合されるサービスごとに、1 つの AWS 管理の CMK があります。これらのサービスで暗号化されたリソースを作成するときは、そのサービス用に AWS 管理の CMK で、そのリソースを保護することもできます。この CMK は AWS アカウントおよびそれが使用される AWS リージョンで一意であり、AWS サービスで使用されるデータキーを保護して、データを保護します。これらのサービスの多くでは、AWS 管理の CMK の代わりにカスタマー管理の CMK を指定することができ、CMK をより詳細に制御する必要がある場合に有益です。たとえば、これらのサービスでカスタマー管理の CMK を使用する場合、AWS KMS が CMK のキーマテリアルを毎年更新するようリクエストできます。AWS 管理の CMK でこれを行うことはできません。

データキー

AWS KMS 外部で自分のアプリケーション内の大きなデータオブジェクトを暗号化するために、データキーを使用します。GenerateDataKey API リクエストを行うと、AWS KMS はデータキーのプレーンテキストコピーと、指定された CMK で暗号化されたデータキーを含む暗号化テキストを返します。アプリケーションでプレーンテキストのデータキーを使用してデータを暗号化し、通常は暗号化されたデータキーと共に暗号化されたデータを保存します。セキュリティのベストプラクティスとして、使用後は可能な限り早くメモリからプレーンテキストのデータキーを削除することをお勧めします。アプリケーションでデータを復号するには、復号 API リクエストで暗号化されたデータキーを渡します。AWS KMS は CMK を使ってデータキーをプレーンテキストに復号し、それを返します。プレーンテキストデータキーを使ってデータを復号し、ログファイルを復号して、使用後できるだけ早くプレーンテキストデータキーをメモリから削除します。

注記

AWS KMS を使用して、データキーを生成、暗号化、復号することができますが、AWS KMS ではデータキーは保存、管理、追跡されません。アプリケーション内でこれを行う必要があります。

エンベロープ暗号化

AWS KMS はエンベロープ暗号化を使用してデータを保護します。エンベロープ暗号化は、一意なデータキーでプレーンテキストデータを暗号化してから、データキーをキー暗号化キー (KEK) で暗号化する手法です。KEK を別の KEK などで暗号化する選択もできますが、最終的にはマスターキーが必要です。マスターキーは 1 つ以上の他のキーを復号できる、暗号化されていない (プレーンテキストの) キーです。

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

  • データキーの保護

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

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

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

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

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

次の図に、エンベロープ暗号化の概要を示します。このシナリオでは、データキーはマスターキーである単一の KEK で暗号化されます。AWS KMS で、CMK はマスターキーを表します。

 エンベロープ暗号化

暗号化コンテキスト

すべての AWS KMS 暗号化オペレーションでは、データに関する追加のコンテキスト情報を含めることができるキーと値のペアのオプションのセットを使用できます。このキーと値のペアは、暗号化コンテキストと呼ばれます。 暗号化コンテキストが暗号化オペレーションで使用されている場合、成功するには対応する復号オペレーションが、復号に一致している必要があります。暗号化コンテキストはシークレットではありません。暗号化コンテキストはログに記録され、これを監査および AWS KMS API オペレーションへのアクセスを制御するときに使用できます。詳細については、「暗号化コンテキスト」を参照してください。

キーポリシー

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 KMS API 呼び出しのログ作成」と『AWS CloudTrail User Guide』を参照してください。

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

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