KMS キーを作成する - AWS Key Management Service

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

KMS キーを作成する

AWS KMS keys は、AWS Management Console で作成することも、CreateKey オペレーションまたは AWS::KMS::Key AWS CloudFormationリソースを使用して作成することもできます。このプロセスでは、KMS キーのキーポリシーも設定します。これはいつでも変更できます。また、作成する KMS キーのタイプを定義する以下の値も選択します。KMS キー作成後にこれらのプロパティを変更することはできません。

KMS キータイプ

キータイプは、作成する暗号化キーのタイプを決定するプロパティです。AWS KMS では、データ保護のための 3 つのキータイプを用意しています。

  • Advanced Encryption Standard (AES) 対称キー

    AES の Galois Counter Mode (GCM) モードで使用される 256 ビットキーで、4KB 未満のサイズのデータの認証付き暗号化/復号化を提供します。これは最も一般的なタイプのキーであり、アプリケーションで使用される他のデータ暗号化キーを保護するために使用されたり、ユーザーに代わってデータを暗号化する AWS のサービス で使用されます。

  • RSA、楕円曲線、または SM2 (中国リージョンのみ) の非対称キー

    これらのキーはさまざまなサイズで利用可能で、多くのアルゴリズムをサポートしています。選択したアルゴリズムに応じて、暗号化と復号化、署名と検証、もしくは共有シークレットの取得のいずれかのオペレーションに使用できます。

  • Hash-based Message Authentication Code (HMAC) オペレーションを実行するための対称キー

    これらのキーは、署名および検証オペレーションに使用される 256 ビットのキーです。

    KMS キーは、サービスからプレーンテキストでエクスポートすることはできません。これらはサービスに使用されるハードウェアセキュリティモジュール (HSM) により生成され、そのモジュール内でのみ使用できます。これは、キーが侵害されないようにするための、AWS KMS の基本的なセキュリティプロパティです。

キーの用途

キー用途は、キーがサポートする暗号化オペレーションを決定するプロパティです。KMS キーには、ENCRYPT_DECRYPTSIGN_VERIFYGENERATE_VERIFY_MACKEY_AGREEMENT のいずれかのキー用途を指定できます。各 KMS キーに指定できるキー用途は 1 つだけです。KMS キーを複数タイプのオペレーションに使用すると、両方のオペレーションの成果が攻撃に対してより脆弱になります。

キー仕様

キー仕様は、キーの暗号化設定を表すプロパティです。キー仕様の意味は、キータイプによって異なります。

KMS キーにおいて、キー仕様はその KMS キーが対称か非対称かを決定します。また、そのキーマテリアルのタイプとサポートするアルゴリズムも決定します。

デフォルトのキースペックである SYMMETRIC_DEFAULT は、256 ビット対称暗号化キーを表します。サポートされているすべてのキー仕様の詳細については、「キー仕様のリファレンス」を参照してください。

キーマテリアルのオリジン

キーマテリアルのオリジンは、KMS キーのキーマテリアルのソースを識別する KMS キープロパティです。KMS キーの作成時にキーマテリアルのオリジンを選択し、それを変更することはできません。キーマテリアルのソースは、KMS キーのセキュリティ、耐久性、可用性、レイテンシー、スループット特性に影響します。

各 KMS キーには、メタデータにキーマテリアルへの参照が含まれています。対称暗号化 KMS キーのキーマテリアルのオリジンは、異なる可能性があります。AWS KMS が生成するキーマテリアル、またはカスタムキーストア内で生成されるキーマテリアルを使用するか、もしくは 独自のキーマテリアルをインポートすることができます

デフォルトでは、各 KMS キーに一意のキーマテリアルがあります。ただし、同じキーマテリアルでマルチリージョンキーのセットを作成することができます。

KMS キーには、AWS_KMSEXTERNAL (インポートされたキーマテリアル)、AWS_CLOUDHSM (AWS CloudHSM キーストア内の KMS キー)、または EXTERNAL_KEY_STORE (外部キーストア内の KMS キー) のいずれかのキーマテリアルオリジン値を指定できます。

KMS キーを作成するためのアクセス許可

コンソールで、または API を使用して KMS キーを作成するには、IAM ポリシーで次のアクセス許可を持っている必要があります。可能な限り、条件キーを使用してアクセス許可を制限します。例えば、IAM ポリシーで kms:KeySpec 条件キーを使用して、プリンシパルが対称暗号化キーのみを作成できるようにすることが可能です。

キーを作成するプリンシパルの IAM ポリシーの例については、「KMS キーの作成をユーザーに許可する」を参照してください。

注記

タグとエイリアスを管理する許可をプリンシパルに付与する場合は注意が必要です。タグまたはエイリアスを変更すると、カスタマーマネージドキーに対するアクセス許可が許可または拒否される可能性があります。詳細については、「AWS KMS の ABAC」を参照してください。

kms:PutKeyPolicy アクセス許可は、KMS キーの作成には必要ありません。kms:CreateKey アクセス許可には、初期キーポリシーを設定する許可が含まれています。ただし、KMS キーの作成時にこのアクセス許可をキーポリシーに追加して、KMS キーへのアクセスを制御できるようにする必要があります。代替方法として、BypassLockoutSafetyCheck パラメータを使用します。これは推奨されていません。

KMS キーは、作成された AWS アカウントに属します。KMS キーを作成する IAM ユーザーはキー所有者とはみなされないため、作成した KMS キーを使用または管理するためのアクセス許可が自動的に付与されません。他のプリンシパルと同様に、キー作成者は、キーポリシー、IAM ポリシー、またはグラントを使用してアクセス許可を取得する必要があります。ただし、kms:CreateKey アクセス許可を持つプリンシパルは、初期キーポリシーを設定し、キーを使用または管理するためのアクセス許可を自分自身に付与できます。

作成する KMS キーのタイプの選択

作成する KMS キーのタイプは、予定される KMS キーの用途、セキュリティ要件、および認可要件に大きく依存します。KMS キーのキータイプとキー用途によって、そのキーで実行できる暗号化オペレーションが決まります。キーの用途は、各 KMS キーに 1 つしかありません。KMS キーを複数タイプのオペレーションに使用すると、すべてのオペレーションの成果が攻撃に対してより脆弱になります。

プリンシパルが特定のキーの用途だけに KMS キーを作成できるようにするには、kms:KeyUsage 条件キーを使用します。kms:KeyUsage 条件キーを使用して、プリンシパルがキーの用途に基づいて KMS キーの API オペレーションを呼び出せるようにすることもできます。例えば、キーの用途が SIGN_VERIFY である場合にのみ、KMS キーを無効にするアクセス許可を許可できます。

以下のガイダンスを使用し、ユースケースに基づいて必要なタイプの KMS キーを決定します。

データの暗号化と復号

データの暗号化と復号を必要とするほとんどのユースケースには、対称 KMS キーを使用します。AWS KMS が使用する対称暗号化アルゴリズムは、高速かつ効率的で、データの機密性と信頼性を保証します。これは、暗号化コンテキストとして定義された追加認証データ (AAD) による認証された暗号化をサポートします。このタイプの KMS キーでは、暗号化されたデータの送信者と受信者の両方が AWS KMS を呼び出す有効な AWS 認証情報を持っている必要があります。

AWS KMS を呼び出しできないユーザーが AWS 外部で暗号化を必要とするユースケースの場合は、非対称 KMS キーが適しています。非対称 KMS キーのパブリックキーを配信して、これらのユーザーがデータを暗号化できるようにします。また、そのデータを復号する必要があるアプリケーションは、AWS KMS 内で非対称 KMS キーのプライベートキーを使用できます。

メッセージの署名および署名の検証

メッセージに署名して、署名を検証するには、非対称 KMS キーを使用する必要があります。RSA キーペアまたは楕円曲線 (ECC) キーペア、または SM2 キーペア (中国リージョンのみ) を表すキー仕様で KMS キーを使用できます。選択するキー仕様は、使用する署名アルゴリズムによって決まります。ECC キーペアがサポートする ECDSA 署名アルゴリズムは、RSA 署名アルゴリズムよりも推奨されます。ただし、AWS 外部で署名を検証するユーザーをサポートするには、特定のキー仕様と署名アルゴリズムを使用することが必要になる場合があります。

非対称キーペアを用いた暗号化

非対称キーペアを用いてデータを暗号化するには、RSA キー仕様または SM2 キー仕様 (中国リージョンのみ) の非対称 KMS キーを使用する必要があります。KMS キーペアのパブリックキーを使用して、AWS KMS でデータを暗号化するには、Encrypt オペレーションを使用します。パブリックキーをダウンロードして、AWS KMS の外部でデータを暗号化する必要がある当事者と共有することもできます。

非対称 KMS キーのパブリックキーをダウンロードする場合、AWS KMS の外部で使用できます。ただし、AWS KMS の KMS キーを保護するセキュリティ管理の対象ではなくなります。例えば、AWS KMS キーポリシーまたは許可を使用して、パブリックキーの使用を制御することはできません。または、AWS KMS がサポートする暗号化アルゴリズムを使用して、キーを暗号化および復号のみに使用するかどうかを制御することもできません。詳細については、「パブリックキーのダウンロードに関する特別な考慮事項」を参照してください。

AWS KMS の外部のパブリックキーで暗号化されたデータを復号するには、Decrypt オペレーションを呼び出します。キー用途を SIGN_VERIFY に設定して KMS キーからのパブリックキーでデータを暗号化した場合、Decrypt オペレーションは失敗します。また、AWS KMS が、選択されたキー仕様をサポートしないアルゴリズムを使用して暗号化されている場合にも失敗します。主なキー仕様とサポートされているアルゴリズムの詳細については、「キー仕様のリファレンス」を参照してください。

これらのエラーを回避するには、AWS KMS の外部でパブリックキーを使用するすべてのユーザーがキー設定を保存する必要があります。AWS KMS コンソールと GetPublicKey レスポンスは、パブリックキーを共有するときに含める必要がある情報を提供します。

共有シークレットを取得する

共有シークレットを取得するには、NIST 推奨楕円曲線または SM2 (中国リージョンのみ) のキーマテリアルを持つ KMS キーを使用します。AWS KMS は、楕円曲線パブリック/プライベートキーペアから共有シークレットを取得することで、楕円曲線暗号化共同係数 Diffie-Hellman Primitive (ECDH) を使用して 2 つのピア間でのキーアグリーメントを確立します。DeriveSharedSecret オペレーションが返す未加工の共有シークレットを使用して、2 つのパーティ間で送信するデータを暗号化および復号化するか、もしくは HMAC を生成し検証する対称キーを取得できます。AWS KMS では、未加工の共有シークレットを使用して対称キーを取得する際には、「キー取得に関する NIST の推奨事項」に従うことをお勧めしています。

HMAC コードを生成して検証する

Hash-based Message Authentication Code を生成して検証するには、HMAC KMS キーを使用します。AWS KMS で HMAC キーを作成すると、AWS KMS がキーマテリアルを作成して保護し、キーに正しい MAC アルゴリズムが使用されることを確実にします。HMAC コードは、擬似乱数としての使用、および対称署名とトークン化のための特定のシナリオでの使用も可能です。

HMAC KMS キーは対称キーです。AWS KMS コンソールで HMAC KMS キーを作成するときは、Symmetric キータイプを選択します。

AWS のサービスと使用する

AWS KMS と統合されている AWS のサービス での使用向けに KMS キーを作成する際には、そのサービスに関するドキュメントを参照してください。データを暗号化する AWS のサービスには対称暗号化 KMS キーが必要です。

これらの考慮事項に加えて、キー仕様が異なる KMS キーの暗号化オペレーションでは、料金とリクエストクォータも異なります。AWS KMS の料金については、AWS Key Management Service の料金を参照してください。リクエストクォータの詳細については、「クォータのリクエスト」を参照してください 。