翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
AWS KMS キーリング
AWS KMS キーリングは、対称暗号化AWS KMS keysを使用してデータキーを生成、暗号化、復号化します。 AWS Key Management Service (AWS KMS) はKMSキーを保護し、FIPS境界内で暗号化オペレーションを実行します。可能な限り、 AWS KMS キーリングまたは同様のセキュリティプロパティを持つキーリングを使用することをお勧めします。
マルチ AWS KMS リージョンキーは、 のバージョン 2.3.x AWS Encryption SDK および AWS Encryption のバージョン 3.0.x 以降、 AWS KMS キーリングまたはマスターキープロバイダーで使用できますCLI。新しい multi-Region-awareシンボルの使用の詳細と例については、「」を参照してくださいマルチリージョンの使用 AWS KMS keys。マルチリージョンキーの詳細については、「AWS Key Management Service デベロッパーガイド」の「マルチリージョンキーを使用する」を参照してください。
AWS Encryption SDK の バージョン 4.x NETと のバージョン 3.x AWS Encryption SDK for Java は、非対称 RSA を使用する AWS KMS キーリングをサポートする唯一のプログラミング言語実装です AWS KMS keys。
他の言語実装で暗号化KMSキーリングに非対称キーを含めようとすると、暗号化コールは失敗します。復号キーリングに含めても無視されます。
のKMSキーリングに関するすべての言及は、 AWS KMS キーリング AWS Encryption SDK を参照してください。
AWS KMS キーリングには、次の 2 種類のラッピングキーを含めることができます。
暗号化するときは、使用する AWS KMS キーリングにジェネレータキーが必要です。復号時に、ジェネレーターキーはオプションであり、ジェネレーターキーと追加キーの区別は無視されます。
AWS KMS 暗号化キーリングに 1 つの AWS KMS キーしかない場合、そのキーはデータキーの生成と暗号化に使用されます。
すべてのキーリングと同様に、 AWS KMS キーリングは独立して使用することも、同じタイプまたは異なるタイプの他のキーリングとマルチキーリングで使用することもできます。
AWS KMS キーリングに必要なアクセス許可
AWS Encryption SDK には は不要で AWS アカウント 、 に依存しません AWS のサービス。ただし、 AWS KMS キーリングを使用するには、キーリング AWS KMS keys の に対して AWS アカウント と以下の最小アクセス許可が必要です。
のアクセス許可の詳細については AWS KMS keys、「 デベロッパーガイド」の「認証とアクセスコントロール」を参照してください。 AWS Key Management Service
キーリング AWS KMS keys での AWS KMS 識別
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 KMS key または異なる AWS アカウント および AWS KMS keys の 1 つまたは複数の で設定できます AWS リージョン。は対称暗号化キー (SYMMETRIC_) AWS KMS keys である必要がありますDEFAULT。対称暗号化マルチリージョンKMSキー を使用することもできます。すべてのキーリングと同様に、マルチキーリングの 1 つ以上の AWS KMS キーリングを使用できます。
データを暗号化する AWS KMS キーリングを作成するときは、プレーンテキストデータキーを生成して暗号化するために使用されるジェネレータキー を指定する必要があります。 AWS KMS key データキーは、数学的にKMSキーとは無関係です。次に、選択した場合は、同じプレーンテキストデータキーを暗号化 AWS KMS keys する追加を指定できます。
このキーリングで保護された暗号化されたメッセージを復号するには、使用するキーリングに、キーリングで AWS KMS keys 定義されている の少なくとも 1 つが含まれているか、 が含まれていない必要があります AWS KMS keys。(キーリングに がない AWS KMS キーリング AWS KMS keys は、AWS KMS 検出キーリング と呼ばれます)。
以外の AWS Encryption SDK 言語実装では AWS Encryption SDK for C、暗号化キーリングまたはマルチキーリングのすべてのラッピングキーがデータキーを暗号化できる必要があります。いずれかのラッピングキーが暗号化に失敗すると、暗号化メソッドは失敗します。そのため、呼び出し元は、キーリング内のすべてのキーについて必要な許可を持っている必要があります。検出キーリングを使用して、単独またはマルチキーリングでデータを暗号化すると、暗号化操作は失敗します。例外は で AWS Encryption SDK for C、暗号化オペレーションは標準の検出キーリングを無視しますが、マルチリージョン検出キーリングを単独で、またはマルチキーリングで指定すると失敗します。
次の例では、1 つのジェネレータ AWS KMS キーと 1 つの追加のキーを使用してキーリングを作成します。これらの例では、キーARNsを使用してKMSキーを識別します。これは、暗号化に使用される AWS KMS キーリングのベストプラクティスであり、復号に使用される AWS KMS キーリングの要件です。詳細については、「キーリング AWS KMS keys での AWS KMS 識別」を参照してください。
- C
AWS KMS key の暗号化キーリングで を識別するには AWS Encryption SDK for C、キーARNまたはエイリアス ARNを指定します。復号キーリングでは、キー を使用する必要がありますARN。詳細については、「キーリング AWS KMS keys での AWS KMS 識別」を参照してください。
詳しい例については、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 Encryption SDK の に 1 つ以上の AWS KMS キーを持つ AWS KMS キーリングを作成するにはNET、マルチキーリングを作成します。 AWS Encryption SDK for 。NET には、キー専用のマルチキーリングが含まれています AWS KMS 。
AWS Encryption SDK の暗号化キーリング AWS KMS key に を指定する場合NET、キー ID 、キー 、https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-nameエイリアス名 、またはエイリアス の任意の有効なキーARN識別子を使用できます。 ARN AWS KMS キーリング AWS KMS keys 内の を識別する方法については、「」を参照してくださいキーリング AWS KMS keys での AWS KMS 識別。
次の例では、 AWS Encryption SDK 用の のバージョン 4.x NETを使用して、ジェネレータ AWS KMS ーキーと追加のキーを使用してキーリングを作成します。完全な例については、AwsKmsMultiKeyringExample.cs を参照してください。
// Instantiate the AWS Encryption SDK and material provider
var mpl = new MaterialProviders(new MaterialProvidersConfig());
var esdk = new ESDK(new AwsEncryptionSdkConfig());
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 、キー 、https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-nameエイリアス名 、またはエイリアス の任意の有効なキーARN識別子を使用できます。 ARN AWS KMS キーリング AWS KMS keys 内の を識別する方法については、「」を参照してくださいキーリング AWS KMS keys での AWS KMS 識別。
次の例では、 buildClient
関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。を使用してbuildClient
、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。
完全な例については、 の AWS Encryption SDK for JavaScript リポジトリの「kms_simple.ts」を参照してください GitHub。
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
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 、キー 、https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-nameエイリアス名 、またはエイリアス の任意の有効なキーARN識別子を使用できます。 ARN AWS KMS キーリング AWS KMS keys 内の を識別する方法については、「」を参照してくださいキーリング AWS KMS keys での AWS KMS 識別。
次の例では、 buildClient
関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。を使用してbuildClient
、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。
完全な例については、 の AWS Encryption SDK for JavaScript リポジトリの「kms_simple.ts」を参照してください GitHub。
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
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]
})
- Java
-
に 1 つ以上の AWS KMS キーを持つ AWS KMS キーリングを作成するには AWS Encryption SDK for Java、マルチキーリングを作成します。には、キー専用のマルチキーリング AWS Encryption SDK for Java が含まれています AWS KMS 。
で暗号化キーリング AWS KMS key に を指定する場合 AWS Encryption SDK for Java、キー ID 、キー 、https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-nameエイリアス名 、またはエイリアス の任意の有効なキーARN識別子を使用できます。 ARN AWS KMS キーリング AWS KMS keys 内の を識別する方法については、「」を参照してくださいキーリング AWS KMS keys での AWS KMS 識別。
完全な例については、 の AWS Encryption SDK for Java リポジトリの BasicEncryptionKeyringExample.java を参照してください GitHub。
// Instantiate the AWS Encryption SDK and material providers
final AwsCrypto crypto = AwsCrypto.builder().build();
final MaterialProviders materialProviders = MaterialProviders.builder()
.MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
.build();
String generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
";
List<String> additionalKey = Collections.singletonList("alias/exampleAlias
");
// Create the AWS KMS keyring
final CreateAwsKmsMultiKeyringInput keyringInput = CreateAwsKmsMultiKeyringInput.builder()
.generator(generatorKey)
.kmsKeyIds(additionalKey)
.build();
final IKeyring kmsKeyring = matProv.CreateAwsKmsMultiKeyring(keyringInput);
- Python
-
に 1 つ以上の AWS KMS キーを持つ AWS KMS キーリングを作成するには AWS Encryption SDK for Python、マルチキーリングを作成します。には、キー専用のマルチキーリング AWS Encryption SDK for Python が含まれています AWS KMS 。例については、 のリポジトリの AWS Encryption SDK for Python 「aws_kms_multi_keyring_example.py」を参照してください GitHub。
で暗号化キーリング AWS KMS key に を指定する場合 AWS Encryption SDK for Python、キー ID 、キー 、https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-id-alias-nameエイリアス名 、またはエイリアス の任意の有効なキーARN識別子を使用できます。 ARN AWS KMS キーリング AWS KMS keys 内の を識別する方法については、「」を参照してくださいキーリング AWS KMS keys での AWS KMS 識別。
次の例では、 AWS Encryption SDK クライアントにデフォルトのコミットメントポリシー 、 をインスタンス化しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。完全な例については、 のリポジトリの AWS Encryption SDK for Python 「aws_kms_keyring_example.py」を参照してください GitHub。
# Instantiate the AWS Encryption SDK client
client = aws_encryption_sdk.EncryptionSDKClient(
commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
# Create a boto3 client for AWS KMS
kms_client = boto3.client('kms', region_name="us-west-2")
# Optional: Create an encryption context
encryption_context: Dict[str, str] = {
"encryption": "context",
"is not": "secret",
"but adds": "useful metadata",
"that can help you": "be confident that",
"the data you are handling": "is what you think it is",
}
# Instantiate the material providers library
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create the AWS KMS keyring
keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput(
generator=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
,
kms_key_ids=additionalKey
)
kms_keyring: IKeyring = mat_prov.create_aws_kms_keyring(
input=keyring_input
)
復号用の AWS KMS キーリングの作成
また、 が AWS Encryption SDK 返す暗号化されたメッセージを復号するときに AWS KMS キーリングを指定します。復号キーリングで を指定すると AWS KMS keys、 AWS Encryption SDK はそれらのラッピングキーのみを使用して、暗号化されたメッセージ内の暗号化されたデータキーを復号します。( を指定しないAWS KMS 検出キーリング を使用することもできます) AWS KMS keys。
復号すると、 は、暗号化されたデータ AWS KMS キーの 1 つを復号 AWS KMS key できる のキーリング AWS Encryption SDK を検索します。具体的には、 は暗号化されたメッセージ内の暗号化されたデータキーごとに次のパターン AWS Encryption SDK を使用します。
-
は、暗号化されたメッセージのメタデータからデータキーを暗号化 AWS KMS key した ARN のキー AWS Encryption SDK を取得します。
-
は、復号キーリングで、一致するキー AWS KMS key を持つ AWS Encryption SDK を検索しますARN。
-
キーリングARNで一致するキー AWS KMS key を持つ が見つかった場合、 は KMSキーを使用して暗号化されたデータキーを復号 AWS KMS するように AWS Encryption SDK 要求します。
-
それ以外の場合は、暗号化された次のデータキーに進みます (ある場合)。
は、そのデータキーを暗号化 AWS KMS key した ARNのキーが復号キーリングに含まれている場合を除き、暗号化されたデータキーを復号しようと AWS Encryption SDK しません。復号キーリングに、いずれかのデータキーを暗号化 AWS KMS keys した ARNs の が含まれていない場合、 は を呼び出すことなく復号呼び出しに AWS Encryption SDK 失敗します AWS KMS。
バージョン 1.7.x 以降では、暗号化されたデータキーを復号するときに、 AWS Encryption SDK は常に ARNのキー AWS KMS key を AWS KMS 復号オペレーションの KeyId
パラメータに渡します。復号化 AWS KMS key 時に を特定することは、使用するラッピングキーを使用して暗号化されたデータキーを復号化するための AWS KMS ベストプラクティスです。
キー AWS KMS リングを使用した復号呼び出しは、復号キーリングの少なくとも 1 AWS KMS key つが暗号化されたメッセージ内の暗号化されたデータキーの 1 つを復号できるときに成功します。また、呼び出し元は、その kms:Decrypt
に対する AWS KMS keyアクセス許可を持っている必要があります。この動作により、異なる AWS リージョン および アカウント AWS KMS keys 内の複数の でデータを暗号化できますが、特定のアカウント、リージョン、ユーザー、グループ、またはロールに合わせたより限定的な復号キーリングを提供します。
復号キーリング AWS KMS key で を指定する場合は、キー を使用する必要がありますARN。それ以外の場合、 AWS KMS key は認識されません。キーの検索についてはARN、AWS Key Management Service 「 デベロッパーガイド」の「キー ID の検索」およびARN「」を参照してください。
暗号化キーリングを復号化に再利用する場合は、キーリング AWS KMS keys の がキー によって識別されていることを確認してくださいARNs。
例えば、次の 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 キーしか含まれていないため、この例では CreateAwsKmsKeyringInput
オブジェクトのインスタンスで CreateAwsKmsKeyring()
メソッドを使用します。1 つの AWS KMS キーで AWS KMS キーリングを作成するには、単一キーまたは複数キーのキーリングを使用できます。詳細については、「AWS Encryption SDK の でデータを暗号化する。NET」を参照してください。次の例では、 AWS Encryption SDK 用の のバージョン 4.x NETを使用して、復号用の AWS KMS キーリングを作成します。
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
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
-
次の例では、 buildClient
関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。を使用してbuildClient
、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
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
-
次の例では、 buildClient
関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。を使用してbuildClient
、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321
'
const keyring = new KmsKeyringNode({ keyIds: [additionalKey] })
- Java
-
この復号キーリングには 1 つの AWS KMS キーしか含まれていないため、この例では CreateAwsKmsKeyringInput
オブジェクトのインスタンスで CreateAwsKmsKeyring()
メソッドを使用します。1 つの AWS KMS キーで AWS KMS キーリングを作成するには、単一キーまたは複数キーのキーリングを使用できます。
// Instantiate the AWS Encryption SDK and material providers
final AwsCrypto crypto = AwsCrypto.builder().build();
final MaterialProviders materialProviders = MaterialProviders.builder()
.MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
.build();
String additionalKey = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321
";
// Create a AwsKmsKeyring
CreateAwsKmsKeyringInput kmsDecryptKeyringInput = CreateAwsKmsKeyringInput.builder()
.generator(additionalKey)
.kmsClient(KmsClient.create())
.build();
IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
- Python
-
次の例では、 AWS Encryption SDK クライアントにデフォルトのコミットメントポリシー 、 をインスタンス化しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。完全な例については、 のリポジトリの AWS Encryption SDK for Python 「aws_kms_keyring_example.py」を参照してください GitHub。
# Instantiate the AWS Encryption SDK client
client = aws_encryption_sdk.EncryptionSDKClient(
commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
# Create a boto3 client for AWS KMS
kms_client = boto3.client('kms', region_name="us-west-2")
# Instantiate the material providers
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create the AWS KMS keyring
keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput(
generator=additionalKey
,
kms_client=kms_client
)
kms_keyring: IKeyring = mat_prov.create_aws_kms_keyring(
input=keyring_input
)
また、次のような復号用のジェネレーターキーを指定する 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
-
次の例では、 のバージョン 4.x を AWS Encryption SDK に使用しますNET。
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
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
-
次の例では、 buildClient
関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。を使用してbuildClient
、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const clientProvider = getClient(KMS, { credentials })
const keyring = new KmsKeyringBrowser({
clientProvider,
generatorKeyId,
keyIds: [additionalKey, otherKey]
})
- JavaScript Node.js
-
次の例では、 buildClient
関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。を使用してbuildClient
、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const keyring = new KmsKeyringNode({
generatorKeyId,
keyIds: [additionalKey, otherKey]
})
- Java
-
// Instantiate the AWS Encryption SDK and material providers
final AwsCrypto crypto = AwsCrypto.builder().build();
final MaterialProviders materialProviders = MaterialProviders.builder()
.MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
.build();
String generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
";
// Create a AwsKmsKeyring
CreateAwsKmsKeyringInput kmsDecryptKeyringInput = CreateAwsKmsKeyringInput.builder()
.generator(generatorKey)
.kmsClient(KmsClient.create())
.build();
IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
- Python
-
次の例では、 AWS Encryption SDK クライアントにデフォルトのコミットメントポリシー 、 をインスタンス化しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。完全な例については、 のリポジトリの AWS Encryption SDK for Python 「aws_kms_keyring_example.py」を参照してください GitHub。
# Instantiate the AWS Encryption SDK client
client = aws_encryption_sdk.EncryptionSDKClient(
commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
# Create a boto3 client for AWS KMS
kms_client = boto3.client('kms', region_name="us-west-2")
# Instantiate the material providers library
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create the AWS KMS keyring
keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput(
generator=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
,
kms_client=kms_client
)
kms_keyring: IKeyring = mat_prov.create_aws_kms_keyring(
input=keyring_input
)
指定されたすべての を使用する暗号化キーリングとは異なり 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 KMS key されたデータキーを使用して、 AWS KMS に暗号化されたデータキーを復号するように AWS Encryption SDK 要求できます AWS KMS key。呼び出しは、呼び出し元にその AWS KMS keyに対する kms:Decrypt
許可がある場合にのみ成功します。
復号マルチキーリング に AWS KMS 検出キーリングを含めると、検出キーリングはマルチキーリングの他のキーリングで指定されたすべてのキーKMS制限を上書きします。マルチキーリングは、最も制限の少ないキーリングのように動作します。 AWS KMS ディスカバリキーリングは、それ自体またはマルチキーリングで使用される場合、暗号化には影響しません。
AWS Encryption SDK には、便利な AWS KMS 検出キーリングが用意されています。ただし、次の理由から、可能な限り制限されたキーリングを使用することをお勧めします。
-
真正性 – AWS KMS 検出キーリングは、暗号化 AWS KMS key されたメッセージ内のデータキーを暗号化するために使用された任意の を使用できるため、発信者は AWS KMS key それを復号するアクセス許可を持ちます。これは、呼び出し元が使用することを意図した AWS KMS key
ではない場合があります。例えば、暗号化されたデータキーの 1 つは、誰でも使用できる安全性 AWS KMS key の低い で暗号化されている可能性があります。
-
レイテンシーとパフォーマンス – は、他の AWS アカウント および リージョン AWS KMS keys で暗号化されているものを含め、暗号化されたすべてのデータキーを復号 AWS Encryption SDK しようとし、発信者 AWS KMS keys に復号に使用するアクセス許可がないため、 AWS KMS 検出キーリングは他のキーリングよりも認識できるほど遅くなる可能性があります。
検出キーリングを使用する場合は、検出フィルターを使用して、指定された AWS アカウント および パーティション 内のKMSキーに使用できるキーを制限することをお勧めします。検出フィルターは、 AWS Encryption SDKのバージョン 1.7.x 以降でサポートされています。アカウント ID とパーティションの検索については、「」の「識別子 AWS アカウントとARN形式」を参照してくださいAWS 全般のリファレンス。
次のコードは、 AWS KMS が AWS Encryption SDK 使用できるキーをaws
パーティションと 111122223333 サンプルアカウントのKMSキーに制限する検出フィルターを使用して、検出キーリングをインスタンス化します。
このコードを使用する前に、例 AWS アカウント とパーティションの値を AWS アカウント および パーティションの有効な値に置き換えます。KMS キーが中国リージョンにある場合は、aws-cn
パーティション値を使用します。KMS キーが にある場合は AWS GovCloud (US) Regions、aws-us-gov
パーティション値を使用します。その他のすべての には AWS リージョン、aws
パーティション値を使用します。
- 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
-
次の例では、 のバージョン 4.x を AWS Encryption SDK に使用しますNET。
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
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、検出プロパティを明示的に指定する必要があります。
次の例では、 buildClient
関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。を使用してbuildClient
、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const clientProvider = getClient(KMS, { credentials })
const discovery = true
const keyring = new KmsKeyringBrowser(clientProvider, {
discovery,
discoveryFilter: { accountIDs: [111122223333
], partition: 'aws
' }
})
- JavaScript Node.js
-
では JavaScript、検出プロパティを明示的に指定する必要があります。
次の例では、 buildClient
関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。を使用してbuildClient
、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const discovery = true
const keyring = new KmsKeyringNode({
discovery,
discoveryFilter: { accountIDs: ['111122223333
'], partition: 'aws
' }
})
- Java
-
// Create discovery filter
DiscoveryFilter discoveryFilter = DiscoveryFilter.builder()
.partition("aws
")
.accountIds(111122223333
)
.build();
// Create the discovery keyring
CreateAwsKmsMrkDiscoveryMultiKeyringInput createAwsKmsMrkDiscoveryMultiKeyringInput = CreateAwsKmsMrkDiscoveryMultiKeyringInput.builder()
.discoveryFilter(discoveryFilter)
.build();
IKeyring decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);
- Python
-
# Instantiate the AWS Encryption SDK
client = aws_encryption_sdk.EncryptionSDKClient(
commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
# Create a boto3 client for AWS KMS
kms_client = boto3.client('kms', region_name=aws_region)
# Optional: Create an encryption context
encryption_context: Dict[str, str] = {
"encryption": "context",
"is not": "secret",
"but adds": "useful metadata",
"that can help you": "be confident that",
"the data you are handling": "is what you think it is",
}
# Instantiate the material providers
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create the AWS KMS discovery keyring
discovery_keyring_input: CreateAwsKmsDiscoveryKeyringInput = CreateAwsKmsDiscoveryKeyringInput(
kms_client=kms_client,
discovery_filter=DiscoveryFilter(
account_ids=[aws_account_id],
partition="aws"
)
)
discovery_keyring: IKeyring = mat_prov.create_aws_kms_discovery_keyring(
input=discovery_keyring_input
)
AWS KMS リージョン検出キーリングの使用
AWS KMS リージョン検出キーリングは、キーARNsの を指定しないKMSキーリングです。代わりに、特定の のKMSキーのみを使用して AWS Encryption SDK を復号できます AWS リージョン。
AWS KMS リージョンの検出キーリングで復号すると、 は AWS Encryption SDK 指定された AWS KMS key の で暗号化された暗号化されたデータキーを復号します AWS リージョン。成功するには、発信者は、データキーを暗号化 AWS リージョン した指定された の少なくとも 1 AWS KMS keys つの に対するkms:Decrypt
アクセス許可を持っている必要があります。
他の検出キーリングと同様に、リージョン検出キーリングは暗号化には影響しません。暗号化されたメッセージを復号する場合にのみ機能します。暗号化と復号に使用されるマルチキーリングでリージョン検出キーリングを使用する場合、そのキーリングは復号化時にのみ有効です。マルチリージョン検出キーリングを単独または複数のキーリングで使用してデータを暗号化すると、暗号化オペレーションは失敗します。
復号マルチキーリング に AWS KMS リージョン検出キーリングを含めると、リージョン検出キーリングは、マルチキーリングの他のキーリングで指定されたすべてのキーKMS制限を上書きします。 マルチキーリングマルチキーリングは、最も制限の少ないキーリングのように動作します。 AWS KMS ディスカバリキーリングは、それ自体またはマルチキーリングで使用される場合、暗号化には影響しません。
のリージョン検出キーリングは、指定されたリージョンのKMSキーでのみ復号 AWS Encryption SDK for C を試みます。 AWS Encryption SDK for JavaScript および AWS Encryption SDK で検出キーリングを使用する場合NET、 AWS KMS クライアントでリージョンを設定します。これらの AWS Encryption SDK 実装では、リージョン別にKMSキーをフィルタリングしませんが AWS KMS 、指定されたリージョン外のKMSキーの復号リクエストは失敗します。
検出キーリングを使用する場合は、検出フィルターを使用して、復号に使用されるKMSキーを指定された AWS アカウント パーティションおよびパーティション内のキーに制限することをお勧めします。検出フィルターは、 AWS Encryption SDKのバージョン 1.7.x 以降でサポートされています。
例えば、次のコードは、検出フィルターを使用して 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
-
for AWS Encryption SDK .NET には、専用のリージョン検出キーリングはありません。ただし、特定のリージョンへの復号に使用されるKMSキーを制限するには、いくつかの方法を使用できます。
検出キーリングのリージョンを制限する最も効率的な方法は、単一リージョンキーのみを使用してデータを暗号化した場合でも、検出キーリングを使用すること multi-Region-awareです。単一リージョンのキーが発生すると multi-Region-aware、キーリングはマルチリージョン機能を使用しません。
CreateAwsKmsMrkDiscoveryKeyring()
メソッドによって返されるキーリングは、 を呼び出す前に リージョン別にKMSキーをフィルタリングします AWS KMS。暗号化されたデータキーがCreateAwsKmsMrkDiscoveryKeyringInput
オブジェクトの Region
パラメータで指定されたリージョンのKMSキーによって暗号化された AWS KMS 場合にのみ、復号リクエストを に送信します。
次の例では、 のバージョン 4.x を AWS Encryption SDK に使用しますNET。
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
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);
AWS KMS クライアントのインスタンス () でリージョンを指定 AWS リージョン することで、KMSキーを特定の に制限することもできますAmazonKeyManagementServiceClient。ただし、この設定は検出キーリングを使用するよりも効率が低く、 multi-Region-awareコストがかかる可能性があります。を呼び出す前にリージョン別にKMSキーをフィルタリングする代わりに AWS KMS、 AWS Encryption SDK の がNET暗号化された各データキー AWS KMS を呼び出し (復号されるまで)、 が使用するKMSキーを指定したリージョンに制限 AWS KMS します。
次の例では、 のバージョン 4.x を AWS Encryption SDK に使用しますNET。
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
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
-
次の例では、 buildClient
関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。を使用してbuildClient
、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
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
-
次の例では、 buildClient
関数を使用してデフォルトのコミットメントポリシー 、 を指定しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT
。を使用してbuildClient
、暗号化されたメッセージ内の暗号化されたデータキーの数を制限することもできます。詳細については、「暗号化されたデータキーの制限」を参照してください。
このキーリングと limitRegions
関数については、作業例の「kms_regional_discovery.ts」を参照してください。
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const discovery = true
const clientProvider = limitRegions(['us-west-2
'], getKmsClient)
const keyring = new KmsKeyringNode({
clientProvider,
discovery,
discoveryFilter: { accountIDs: ['111122223333
'], partition: 'aws
' }
})
- Java
-
// Create the discovery filter
DiscoveryFilter discoveryFilter = DiscoveryFilter.builder()
.partition("aws
")
.accountIds(111122223333
)
.build();
// Create the discovery keyring
CreateAwsKmsMrkDiscoveryMultiKeyringInput createAwsKmsMrkDiscoveryMultiKeyringInput = CreateAwsKmsMrkDiscoveryMultiKeyringInput.builder()
.discoveryFilter(discoveryFilter)
.regions("us-west-2
")
.build();
IKeyring decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);
- Python
-
# Instantiate the AWS Encryption SDK
client = aws_encryption_sdk.EncryptionSDKClient(
commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
# Create a boto3 client for AWS KMS
kms_client = boto3.client('kms', region_name=aws_region)
# Optional: Create an encryption context
encryption_context: Dict[str, str] = {
"encryption": "context",
"is not": "secret",
"but adds": "useful metadata",
"that can help you": "be confident that",
"the data you are handling": "is what you think it is",
}
# Instantiate the material providers
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create the AWS KMS regional discovery keyring
regional_discovery_keyring_input: CreateAwsKmsMrkDiscoveryKeyringInput = \
CreateAwsKmsMrkDiscoveryKeyringInput(
kms_client=kms_client,
region=mrk_replica_decrypt_region,
discovery_filter=DiscoveryFilter(
account_ids=[111122223333
],
partition="aws"
)
)
regional_discovery_keyring: IKeyring = mat_prov.create_aws_kms_mrk_discovery_keyring(
input=regional_discovery_keyring_input
)
AWS Encryption SDK for JavaScript また、 は Node.js とブラウザのexcludeRegions
関数をエクスポートします。この関数は、特定の AWS KMS リージョン AWS KMS keys を省略するリージョン検出キーリングを作成します。次の例では、米国東部 (バージニア北部) (us-east-1) AWS リージョン を除くすべての でアカウント 111122223333 AWS KMS keys で使用できる AWS KMS リージョン検出キーリングを作成します。
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
' }
})