AWS KMS キーリング - AWS Encryption SDK

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

AWS KMS キーリング

AnAWS KMSキーリングは対称暗号化を使用しますAWS KMS keysを使用して、データキーの生成、暗号化、復号を行います。AWS Key Management Service(AWS KMS) は、KMS キーを保護し、FIPS 境界内で暗号化操作を実行します。可能な限り、AWS KMS キーリングか同様のセキュリティ特性を持つキーリングを使用することをお勧めします。

AWS Encryption SDK のバージョン 2.3.x および AWS Encryption CLI のバージョン 3.0.x からは、AWS KMS キーリングまたはマスターキープロバイダーで AWS KMS マルチリージョンキーを使用できます。新しいマルチリージョン対応シンボルの詳細と使用例については、マルチリージョン AWS KMS keys を使用する を参照してください。マルチリージョンキーの詳細については、AWS Key Management Service デベロッパーガイドの「マルチリージョンキーを使用する」を参照してください。

注記

-AWS Encryption SDKは非対称 KMS キーをサポートしていません。暗号化キーリングに非対称KMS キーを含めると、暗号化コールは失敗します。復号キーリングに含めると、無視されます。

AWS Encryption SDK で KMS キーリングについて言及する場合は、すべて AWS KMS キーリングのことを表します。

AWS KMSキーリングには、次の 2 種類のラッピングキーを含めることができます。

  • ジェネレータキー: プレーンテキストデータキーを生成し、暗号化します。データを暗号化するキーリングには、ジェネレーターキーが 1 つ必要です。

  • 追加キー: ジェネレータキーが生成したプレーンテキストデータキーを暗号化します。AWS KMSキーリングには、0 個以上の追加のキーを指定できます。

暗号化する場合、AWS KMS使用するキーリングには、ジェネレーターキーが必要です。復号時には、ジェネレータキーはオプションであり、ジェネレータキーと追加のキーの区別は無視されます。

ときにAWS KMS暗号化キーリングには1つしかありませんAWS KMSキー:そのキーは、データキーを生成および暗号化するために使用されます。

すべてのキーリングと同様に、AWS KMS キーリングは単独で使用することも、同じまたは別のタイプの他のキーリングと一緒にマルチキーリングで使用することもできます。

AWS KMS キーリングに必要なアクセス許可

-AWS Encryption SDKには、は必要ありません。AWS アカウントそしてそれは何にも依存していませんAWS のサービス。ただし、AWS KMS キーリングを使用するには、キーリングの AWS KMS keys で AWS アカウント と次の最小アクセス許可が必要です。

  • AWS KMS キーリングを使用して暗号化するには、ジェネレーターキーに対する kms:GenerateDataKey アクセス許可が必要です。AWS KMS キーリングのその他すべてのキーでは、kms:Encrypt アクセス許可が必要です。

  • AWS KMS キーリングを使用して復号するには、AWS KMS キーリングで少なくとも 1 つのキーに kms:Decrypt アクセス許可が必要です。

  • AWS KMS キーリングで構成されるマルチキーリングを使用して暗号化するには、ジェネレーターキーリングのジェネレーターキーに対する kms:GenerateDataKey アクセス許可が必要です。その他すべての AWS KMS キーリングのその他すべてのキーでは、kms:Encrypt アクセス許可が必要です。

AWS KMS keys のアクセス許可については、AWS Key Management Service デベロッパーガイドの「認証とアクセスコントロール」を参照してください。

AWS KMS キーリングの AWS KMS keys の指定

AWS KMS キーリングには、1 つ以上の AWS KMS keys を含めることができます。AWS KMS キーリングの AWS KMS key を指定するには、サポートされている AWS KMS キー識別子を使用します。キーリングの AWS KMS key を指定するために使用できるキー識別子は、オペレーションと言語の実装によって異なります。AWS KMS key のキー識別子の詳細については、AWS Key Management Serviceデベロッパーガイドの「キー識別子」を参照してください。

ベストプラクティスとして、タスクに対して実用的である最も具体的なキー識別子を使用してください。

  • の暗号化キーリングAWS Encryption SDK for Cを使用すると、を使用できます。キー ARNまたはエイリアス ARNを使用して KMS キーを識別します。他のすべての言語実装では、キー ID,キー ARN,エイリアス名, またはエイリアス ARNを使用して、データを暗号化します。

  • 復号キーリングでは、キー ARN を使用して AWS KMS keys を指定する必要があります。この要件は、AWS Encryption SDK のすべての言語の実装に適用されます。詳細については、「ラッピングキーを選択する」を参照してください。

  • 暗号化および復号に使用するキーリングでは、キー ARN を使用して AWS KMS keys を指定する必要があります。この要件は、AWS Encryption SDK のすべての言語の実装に適用されます。

暗号化キーリングで KMS キーのエイリアス名またはエイリアス ARN を指定すると、暗号化オペレーションによって、現在エイリアスに関連付けられているキー ARN が、暗号化されたデータキーのメタデータに保存されます。エイリアスは保存されません。エイリアスの変更は、暗号化されたデータキーの復号に使用される KMS キーには影響しません。

の作成AWS KMS暗号化用のキーリング

各 AWS KMS キーリングには、同じまたは異なる AWS アカウント や AWS リージョン の 1 つの AWS KMS key または複数の AWS KMS keys を設定できます。-AWS KMS keys対称暗号化キー (SYMMETRIC_DEFAULT) である必要があります。対称暗号化を使用することもできますマルチリージョンKMS キー。すべてのキーリングと同様に、マルチキーリングの 1 つ以上の AWS KMS キーリングを使用できます。

を作成するときAWS KMSキーリングでデータを暗号化するには、ジェネレータキーであるAWS KMS keyこれは、プレーンテキストデータキーを生成し、暗号化するために使用されます。データキーは KMS キーとは数学的に無関係です。その上で、必要に応じて、同じプレーンテキストのデータキーを暗号化する追加の AWS KMS keys を指定することができます。

このキーリングで保護されている暗号化されたメッセージを復号するには、使用するキーリングにAWS KMS keysキーリングで定義されているか、いいえAWS KMS keys。(AWS KMS keys が含まれていない AWS KMS キーリングは、AWS KMS 検出キーリングと呼ばれます。)

In (イン)AWS Encryption SDK言語実装以外の言語実装AWS Encryption SDK for Cでは、暗号化キーリングまたはマルチキーリング内のすべてのラッピングキーは、データキーを暗号化できる必要があります。ラッピングキーが暗号化に失敗すると、encrypt メソッドは失敗します。その結果、発信者は必要なアクセス許可キーリングのすべてのキーです。探索キーリングを使用してデータを単独で、またはマルチキーリングで暗号化すると、暗号化操作は失敗します。例外は、AWS Encryption SDK for Cで、暗号化操作では標準の検出キーリングは無視されますが、マルチリージョン検出キーリングを単独またはマルチキーリングで指定すると失敗します。

次の例ではを作成します。AWS KMS1 つのジェネレーターキーと 1 つの追加のキーを持つキーリング。以下の例では、キー ARNKMS キーを識別します。これは、次のベストプラクティスです。AWS KMS暗号化に使用されるキーリング、および要件AWS KMS復号に使用されるキーリング。詳細については、「AWS KMS キーリングの AWS KMS keys の指定」を参照してください。

C

を特定するにはAWS KMS keyの暗号化キーリングでAWS Encryption SDK for Cで、キー ARNまたはエイリアス ARN。復号キーリングでは、キー ARN を使用する必要があります。詳細については、「AWS KMS キーリングの AWS KMS keys の指定」を参照してください。

詳しい例については、string.cpp を参照してください。

const char * generator_key = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" const char * additional_key = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" struct aws_cryptosdk_keyring *kms_encrypt_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(generator_key,{additional_key});
C# / .NET

を作成するにはAWS KMS1つまたは複数のキーリングAWS KMSキーのAWS Encryption SDK.NET の場合は、マルチキーリングを作成します。-AWS Encryption SDK.NETの場合は、マルチキーリングが含まれていますAWS KMSキー。

を指定した場合AWS KMS keyの暗号化キーリングの場合AWS Encryption SDK.NET の場合は、任意の有効なキー識別子を使用できます。キー ID,キー ARN,エイリアス名, またはエイリアス ARN。AWS KMS キーリングでの AWS KMS keys の識別方法については、「AWS KMS キーリングの AWS KMS keys の指定」を参照してください。

次の例ではを作成します。AWS KMSジェネレータキーと追加のキーを備えたキーリング。詳しい例については、を参照してください。AwsKmsMultiKeyringExample.cs

// Instantiate the AWS Encryption SDK and material provider var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; List<string> additionalKey = new List<string> { "alias/exampleAlias" }; // Instantiate the keyring input object var kmsEncryptKeyringInput = new CreateAwsKmsMultiKeyringInput { Generator = generatorKey, KmsKeyIds = additionalKey }; var kmsEncryptKeyring = materialProviders.CreateAwsKmsMultiKeyring(kmsEncryptKeyringInput);
JavaScript Browser

を指定した場合AWS KMS keyの暗号化キーリングの場合AWS Encryption SDK for JavaScriptの場合は、任意の有効なキー識別子を使用できます。キー ID,キー ARN,エイリアス名, またはエイリアス ARN。AWS KMS キーリングでの AWS KMS keys の識別方法については、「AWS KMS キーリングの AWS KMS keys の指定」を参照してください。

詳しい例については、を参照してください。kms_simple.tsのAWS Encryption SDK for JavaScriptGitHub のリポジトリー。

const clientProvider = getClient(KMS, { credentials }) const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' const additionalKey = 'alias/exampleAlias' const keyring = new KmsKeyringBrowser({ clientProvider, generatorKeyId, keyIds: [additionalKey] })
JavaScript Node.js

を指定した場合AWS KMS keyの暗号化キーリングの場合AWS Encryption SDK for JavaScriptの場合は、任意の有効なキー識別子を使用できます。キー ID,キー ARN,エイリアス名, またはエイリアス ARN。AWS KMS キーリングでの AWS KMS keys の識別方法については、「AWS KMS キーリングの AWS KMS keys の指定」を参照してください。

詳しい例については、を参照してください。kms_simple.tsのAWS Encryption SDK for JavaScriptGitHub のリポジトリー。

const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' const additionalKey = 'alias/exampleAlias' const keyring = new KmsKeyringNode({ generatorKeyId, keyIds: [additionalKey] })

の作成AWS KMS復号用のキーリング

AWS Encryption SDK が返す暗号化されたメッセージを復号するときには、AWS KMS キーリングも指定します。復号化キーリングが指定された場合AWS KMS keysとすると、AWS Encryption SDKは、これらのラッピングキーのみを使用して、暗号化されたメッセージ内の暗号化されたデータキーを復号化します。(AWS KMS keys を指定しない AWS KMS 検出キーリングも使用できます。)

復号時に、AWS Encryption SDK は暗号化されたデータキーのいずれかを復号できる AWS KMS key を AWS KMS キーリングから探します。具体的には、AWS Encryption SDK は暗号化されたメッセージの暗号化されたデータキーごとに以下のパターンに従います。

  • -AWS Encryption SDKのキー ARN を取得します。AWS KMS keyは、暗号化されたメッセージのメタデータからデータキーを暗号化しました。

  • AWS Encryption SDK は、一致するキー ARN を持つ AWS KMS key を復号キーリングから探します。

  • 見つかったらAWS KMS keyキーリングから一致するキー ARN がある場合、AWS Encryption SDK尋ねるAWS KMSをクリックして、KMS キーを使用して暗号化されたデータキーを復号します。

  • それ以外の場合は、暗号化された次のデータキーに進みます (ある場合)。

AWS Encryption SDK は、データキーを暗号化した AWS KMS key のキー ARN が復号キーリングに含まれている場合を除き、暗号化されたデータキーを復号しません。データキーを暗号化したいずれかの AWS KMS keys の ARN が復号キーリングに含まれていない場合、AWS Encryption SDK は AWS KMS を呼び出さず、復号は失敗します。

バージョン 1.7.x からは、暗号化されたデータキーの復号時に、AWS Encryption SDK は AWS KMS key のキー ARN を AWS KMS 復号オペレーションの KeyId パラメータに常に渡します。復号時に AWS KMS key を識別することが、AWS KMS のベストプラクティスです。使用するラッピングキーで、暗号化されたデータキーを復号できるようになります。

AWS KMS キーリングを使用した復号の呼び出しは、復号キーリングの少なくとも 1 つの AWS KMS key が暗号化されたメッセージの暗号化されたデータキーのいずれかを復号できる場合に成功します。また、呼び出し元は、その kms:Decrypt に対する AWS KMS key アクセス許可を持っている必要があります。この動作により、複数の AWS KMS keys でさまざまな AWS リージョン やアカウントのデータを暗号化しつつ、特定のアカウント、リージョン、ユーザー、グループ、ロールに復号キーリングを限定することができます。

復号キーリングの AWS KMS key を指定するには、そのキー ARN を使用する必要があります。使用しない場合、AWS KMS key は認識されません。キーと ARN を見つけるには、AWS Key Management Service デベロッパーガイドの「キー ID と ARN を検索する」を参照してください。

注記

復号に暗号化キーリングを再利用する場合は、キーリングの AWS KMS keys をキー ARN で指定するようにしてください。

例えば、以下の AWS KMS キーリングには、暗号化キーリングに使用した追加のキーのみが含まれます。ただし、別名で追加のキーを参照する代わりに、alias/exampleAliasの例では、復号呼び出しで必要とされる追加のキーのキー ARN を使用します。

このキーリングを使用して、ジェネレーターキーと追加のキーの両方で暗号化されたメッセージを復号することができます。ただし、追加のキーを使用してデータを復号するアクセス許可があることが必要です。

C
const char * additional_key = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" struct aws_cryptosdk_keyring *kms_decrypt_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(additional_key);
C# / .NET

この復号化キーリングには1つしか含まれていないためAWS KMSキーの場合、この例ではCreateAwsKmsKeyring()そのインスタンスを持つメソッドCreateAwsKmsKeyringInputオブジェクト。を作成するにはAWS KMSキーリング、1 つ付きAWS KMSキー、シングルキーまたはマルチキーキーリングを使用できます。詳細については、「でのデータの暗号化AWS Encryption SDK.NET の場合」を参照してください。

// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); string additionalKey = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"; // Instantiate a KMS keyring for one AWS KMS key. var kmsDecryptKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = additionalKey }; var kmsDecryptKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
JavaScript Browser
const clientProvider = getClient(KMS, { credentials }) const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321' const keyring = new KmsKeyringBrowser({ clientProvider, keyIds: [additionalKey] })
JavaScript Node.js
const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321' const keyring = new KmsKeyringNode({ keyIds: [additionalKey] })

復号には、以下のようにジェネレーターキーを指定する AWS KMS キーリングを使用することもできます。復号する場合、AWS Encryption SDK ではジェネレーターキーと追加キーは区別されません。指定した任意の AWS KMS keys を使用して、暗号化されたデータキーを復号することができます。AWS KMS に対する呼び出しは、呼び出し元にその AWS KMS key を使用してデータを復号するアクセス許可がある場合にのみ成功します。

C
struct aws_cryptosdk_keyring *kms_decrypt_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(generator_key, {additional_key, other_key});
C# / .NET
// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; // Instantiate a KMS keyring for one AWS KMS key. var kmsDecryptKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = generatorKey }; var kmsDecryptKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
JavaScript Browser
const clientProvider = getClient(KMS, { credentials }) const keyring = new KmsKeyringBrowser({ clientProvider, generatorKeyId, keyIds: [additionalKey, otherKey] })
JavaScript Node.js
const keyring = new KmsKeyringNode({ generatorKeyId, keyIds: [additionalKey, otherKey] })

指定したすべての AWS KMS keys を使用する暗号化キーリングとは異なり、暗号化されたメッセージの復号は、暗号化されたメッセージとは無関係の AWS KMS keys や呼び出し元に使用するアクセス許可がない AWS KMS keys を含む復号キーリングを使用して行うことができます。必要なアクセス許可が呼び出し元にない場合など、AWS KMS に対する復号の呼び出しに失敗した場合は、AWS Encryption SDK は次の暗号化されたデータキーにスキップします。

AWS KMS 検出キーリングの使用

解読するとき、それはベストプラクティス次のラッピングキーを指定します。AWS Encryption SDKを使用できます。このベストプラクティスに従うには、AWS KMS制限する復号化キーリングAWS KMS指定したキーにキーをラップします。ただし、AWS KMS検出キーリングとすれば、つまりAWS KMSラッピングキーを指定しないキーリング。

-AWS Encryption SDK標準を提供するAWS KMSディスカバリキーリングとディスカバリキーリングAWS KMSマルチリージョンキー マルチリージョンキーをAWS Encryption SDK「」を参照してください。マルチリージョン AWS KMS keys を使用する

ラッピングキーを指定しないため、検出キーリングではデータを暗号化できません。探索キーリングを使用してデータを単独で、またはマルチキーリングで暗号化すると、暗号化操作は失敗します。例外は、AWS Encryption SDK for Cで、暗号化操作では標準の検出キーリングは無視されますが、マルチリージョン検出キーリングを単独またはマルチキーリングで指定すると失敗します。

復号化時に、ディスカバリキーリングによってAWS Encryption SDK質問するAWS KMSを使用して、暗号化されたデータキーを復号化するにはAWS KMS key誰がその所有者またはアクセス権を持っているかにかかわらず、それを暗号化したものAWS KMS key。呼び出しは、発信者が次の場合にだけ成功します。kms:Decryptに対する許可AWS KMS key。

重要

をインクルードした場合AWS KMS復号化でのディスカバリキーリングマルチキーリングでは、ディスカバリキーリングは、マルチキーリング内の他のキーリングで指定されたすべての KMS キー制限を上書きします。マルチキーリングは最小制限キーリングのように動作します。AnAWS KMS検出キーリングは、単独またはマルチキーリングで使用する場合、暗号化には影響しません。

検出キーリングを使用する場合は、検出フィルタ使用できる KMS キーを指定のキーに制限するにはAWS アカウントとパーティション。ディスカバリフィルタは、バージョン 1.7 でサポートされています。xそしてそれ以降のAWS Encryption SDK。アカウント ID とパーティションの検索については、「」を参照してください。おれのAWS アカウント識別子そしてARN 形式AWS全般のリファレンス

AWS Encryption SDK では、AWS KMS 検出キーリングを利便性のために提供しています。ただし、次の理由から、可能な限り制限されたキーリングを使用することをお勧めします。

  • 真正性 – AWS KMS 検出キーリングでは、暗号化されたメッセージのデータキーの暗号化に使用されたすべての AWS KMS key を使用できます。そのため、呼び出し元には、その AWS KMS key を使用するアクセス許可があれば復号できます。これは、呼び出し元が使用することを意図した AWS KMS key ではない場合があります。例えば、暗号化されたデータキーの 1 つが誰でも使用できる安全性の低い AWS KMS key で暗号化されている場合があります。

  • レイテンシーとパフォーマンス – AWS KMS 検出キーリングでは、AWS Encryption SDK が他の AWS アカウント やリージョンの AWS KMS keys で暗号化されたデータキーや呼び出し元に復号に使用するアクセス許可がない AWS KMS keys で暗号化されたデータキーなど、暗号化されたすべてのデータキーを復号しようとするため、他のキーリングよりも速度が大幅に低下する場合があります。

次のコードは、AWS KMSKMS キーを制限する検出フィルタを使用した検出キーリングAWS Encryption SDK111122223333 例のアカウントで使用できる。

C

詳しい例については、kms_discovery.cpp を参照してください。

std::shared_ptr<KmsKeyring::> discovery_filter( KmsKeyring::DiscoveryFilter::Builder("aws") .AddAccount("111122223333") .Build()); struct aws_cryptosdk_keyring *kms_discovery_keyring = Aws::Cryptosdk::KmsKeyring::Builder() .BuildDiscovery(discovery_filter));
C# / .NET
// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); List<string> account = new List<string> { "111122223333" }; // In a discovery keyring, you specify an AWS KMS client and a discovery filter, // but not a AWS KMS key var kmsDiscoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), DiscoveryFilter = new DiscoveryFilter() { AccountIds = account, Partition = "aws" } }; var kmsDiscoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(kmsDiscoveryKeyringInput);
JavaScript Browser

JavaScript では、discovery プロパティを明示的に指定する必要があります。

const clientProvider = getClient(KMS, { credentials }) const discovery = true const keyring = new KmsKeyringBrowser(clientProvider, { discovery, discoveryFilter: { accountIDs: [111122223333], partition: 'aws' } })
JavaScript Node.js

JavaScript では、discovery プロパティを明示的に指定する必要があります。

const discovery = true const keyring = new KmsKeyringNode({ discovery, discoveryFilter: { accountIDs: ['111122223333'], partition: 'aws' } })

AWS KMS リージョン検出キーリングの使用

AnAWS KMSリージョン検出キーリングKMS キーの ARN を指定しないキーリングです。代わりに、AWS Encryption SDK特に KMS キーのみを使用して復号するにはAWS リージョン。

を使用した復号AWS KMSリージョン検出キーリング、AWS Encryption SDKで暗号化されたデータキーを復号します。AWS KMS key指定されたAWS リージョン。成功するには、発信者はkms:Decrypt少なくとも 1 つのアクセス許可は、AWS KMS keys指定されたAWS リージョンデータキーを暗号化しました。

他の検出キーリングと同様に、リージョン検出キーリングによる暗号化には影響しません。これは、暗号化されたメッセージを復号化する場合にのみ機能します。暗号化と復号に使用されるマルチキーリングでリージョン検出キーリングを使用しても、復号時にのみ有効です。マルチリージョン検出キーリングを使用してデータを単独またはマルチキーリングで暗号化する場合、暗号化操作は失敗します。

重要

をインクルードした場合AWS KMS復号時のリージョン検出キーリングマルチキーリングでは、リージョンディスカバリキーリングは、マルチキーリング内の他のキーリングで指定されたすべての KMS キー制限を上書きします。マルチキーリングは最小制限キーリングのように動作します。AnAWS KMS検出キーリングは、単独またはマルチキーリングで使用する場合、暗号化には影響しません。

リージョン検出キーリングは、AWS Encryption SDK for Cは、指定されたリージョンの KMS キーでのみ復号化を試みます。でディスカバリーキーリングを使用する場合AWS Encryption SDK for JavaScriptそしてAWS Encryption SDK.NET の場合は、リージョンをAWS KMSクライアント。これらAWS Encryption SDK実装では KMS キーをリージョン別にフィルタリングすることはありませんが、AWS KMSは、指定されたリージョン外の KMS キーの復号要求に失敗します。

検出キーリングを使用する場合は、検出フィルタ復号に使用する KMS キーを指定のキーに制限するにはAWS アカウントとパーティション。ディスカバリフィルタは、バージョン 1.7 でサポートされています。xそしてそれ以降のAWS Encryption SDK。

たとえば、次のコードでは、AWS KMSディスカバリフィルタ付きのリージョナルディスカバリキーリング。このキーリングは、AWS Encryption SDK米国西部 (オレゴン) リージョン (us-west-2) のアカウント 111122223333 の KMS キーを使用します。

C

実例でこのキーリングや create_kms_client メソッドを表示する方法については、「kms_discovery.cpp」を参照してください。

std::shared_ptr<KmsKeyring::DiscoveryFilter> discovery_filter( KmsKeyring::DiscoveryFilter::Builder("aws") .AddAccount("111122223333") .Build()); struct aws_cryptosdk_keyring *kms_regional_keyring = Aws::Cryptosdk::KmsKeyring::Builder() .WithKmsClient(create_kms_client(Aws::Region::US_WEST_2)).BuildDiscovery(discovery_filter));
C# / .NET

-AWS Encryption SDK.NET には、専用のリージョナルディスカバリキーリングはありません。ただし、いくつかのテクニックを使用して、復号時に使用する KMS キーを特定のリージョンに制限できます。

検出キーリングでリージョンを制限する最も効率的な方法は、単一リージョンキーのみを使用してデータを暗号化した場合でも、マルチリージョン対応ディスカバリキーリングを使用することです。単一リージョンキーを検出した場合、マルチリージョン対応キーリングではマルチリージョン機能は使用しません。

によって返されたキーリングCreateAwsKmsMrkDiscoveryKeyring()メソッドを呼び出す前に、リージョンによって KMS キーをフィルタリングします。AWS KMS。復号化リクエストをに送信しますAWS KMS暗号化されたデータキーが、で指定されたリージョンの KMS キーによって暗号化された場合のみRegion内のパラメータCreateAwsKmsMrkDiscoveryKeyringInputオブジェクト。

// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); List<string> account = new List<string> { "111122223333" }; // Create the discovery filter var filter = DiscoveryFilter = new DiscoveryFilter { AccountIds = account, Partition = "aws" }; var regionalDiscoveryKeyringInput = new CreateAwsKmsMrkDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USWest2), Region = RegionEndpoint.USWest2, DiscoveryFilter = filter }; var kmsRegionalDiscoveryKeyring = materialProviders.CreateAwsKmsMrkDiscoveryKeyring(regionalDiscoveryKeyringInput);

KMS キーを特定のキーに制限することもできます。AWS リージョンのインスタンスでリージョンを指定することでAWS KMSクライアント (AmazonKey管理サービスクライト). ただし、この構成は、マルチリージョン対応ディスカバリキーリングを使用するよりも効率が低く、コストがかかる可能性があります。呼び出す前に KMS キーをリージョン別にフィルタリングする代わりにAWS KMSとすると、AWS Encryption SDK.NET 呼び出しの場合AWS KMS暗号化されたデータキーごとに(1 つを復号化するまで)、AWS KMS使用する KMS キーを指定されたリージョンに制限します。

// Instantiate the AWS Encryption SDK and material providers var encryptionSdk = AwsEncryptionSdkFactory.CreateDefaultAwsEncryptionSdk(); var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); List<string> account = new List<string> { "111122223333" }; // Create the discovery filter, // but not a AWS KMS key var createRegionalDiscoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USWest2), DiscoveryFilter = new DiscoveryFilter() { AccountIds = account, Partition = "aws" } }; var kmsRegionalDiscoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(createRegionalDiscoveryKeyringInput);
JavaScript Browser
const clientProvider = getClient(KMS, { credentials }) const discovery = true const clientProvider = limitRegions(['us-west-2'], getKmsClient) const keyring = new KmsKeyringBrowser(clientProvider, { discovery, discoveryFilter: { accountIDs: ['111122223333'], partition: 'aws' } })
JavaScript Node.js

このキーリングや limitRegions 関数の実際の例については、kms_regional_discovery.ts を参照してください。

const discovery = true const clientProvider = limitRegions(['us-west-2'], getKmsClient) const keyring = new KmsKeyringNode({ clientProvider, discovery, discoveryFilter: { accountIDs: ['111122223333'], partition: 'aws' } })

AWS Encryption SDK for JavaScript は、Node.js とブラウザ用の excludeRegions 関数もエクスポートします。この関数は、特定のリージョンの AWS KMS keys を除外する AWS KMS リージョン検出キーリングを作成します。次の例ではを作成します。AWS KMS使用できるリージョン検出キーリングAWS KMS keysアカウントで 111122223333 すべてでAWS リージョンただし、米国東部 (バージニア北部) (us-east-1) を除く。

AWS Encryption SDK for C には同様のメソッドはありませんが、カスタムの ClientSupplier を作成することで実装できます。

この例は、Node.js 用のコードを示しています。

const discovery = true const clientProvider = excludeRegions(['us-east-1'], getKmsClient) const keyring = new KmsKeyringNode({ clientProvider, discovery, discoveryFilter: { accountIDs: [111122223333], partition: 'aws' } })