AWS KMS Schlüsselanhänger - AWS Encryption SDK

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

AWS KMS Schlüsselanhänger

Ein AWS KMS Schlüsselbund verwendet symmetrische Verschlüsselung, um Datenschlüssel AWS KMS keyszu generieren, zu verschlüsseln und zu entschlüsseln. AWS Key Management Service (AWS KMS) schützt Ihre KMS Schlüssel und führt kryptografische Operationen innerhalb der Grenzen durch. FIPS Wir empfehlen, wann immer möglich einen AWS KMS Schlüsselbund oder einen Schlüsselbund mit ähnlichen Sicherheitseigenschaften zu verwenden.

Ab Version 2.3 können Sie einen Schlüssel für AWS KMS mehrere Regionen in einem AWS KMS Schlüsselbund oder einem Hauptschlüsselanbieter verwenden. x der Version AWS Encryption SDK und Version 3.0. x der AWS VerschlüsselungCLI. Einzelheiten und Beispiele zur Verwendung des neuen multi-Region-aware Symbols finden Sie unterVerwenden Sie mehrere Regionen AWS KMS keys. Informationen zu Schlüsseln für mehrere Regionen finden Sie unter Verwenden von Schlüsseln für mehrere Regionen im AWS Key Management Service Entwicklerhandbuch.

Anmerkung

Version 4. x der AWS Encryption SDK Form. NETund Version 3. x davon AWS-Verschlüsselungs-SDK for Java sind die einzigen Programmiersprachenimplementierungen, die AWS KMS Schlüsselringe unterstützen, die asymmetrisch verwenden. RSA AWS KMS keys

Wenn Sie versuchen, in einer anderen Sprachimplementierung einen asymmetrischen KMS Schlüssel in einen Verschlüsselungsschlüsselbund aufzunehmen, schlägt der Verschlüsselungsaufruf fehl. Wenn Sie ihn in einen Schlüsselbund für die Entschlüsselung aufnehmen, wird er ignoriert.

Alle Erwähnungen von KMSSchlüsselanhängern in der AWS Encryption SDK beziehen sich auf Schlüsselanhänger. AWS KMS

AWS KMS Bei Schlüsselanhängern gibt es zwei Arten von Wickelschlüsseln:

  • Generatorschlüssel: Generiert einen Klartext-Datenschlüssel und verschlüsselt ihn. Ein Schlüsselbund, der Daten verschlüsselt, muss einen Generatorschlüssel haben.

  • Zusätzliche Schlüssel: Verschlüsselt den Klartext-Datenschlüssel, den der Generatorschlüssel generiert hat. AWS KMS Schlüsselbunde können null oder mehr zusätzliche Schlüssel haben.

Beim Verschlüsseln muss der AWS KMS Schlüsselbund, den Sie verwenden, über einen Generatorschlüssel verfügen. Bei der Entschlüsselung ist der Generatorschlüssel optional, und die Unterscheidung zwischen Generatorschlüsseln und zusätzlichen Schlüsseln wird ignoriert.

Wenn ein AWS KMS Verschlüsselungsschlüsselbund nur einen AWS KMS Schlüssel hat, wird dieser Schlüssel verwendet, um den Datenschlüssel zu generieren und zu verschlüsseln.

Wie alle Schlüsselanhänger können AWS KMS Schlüsselringe unabhängig voneinander oder in einem Mehrfachschlüsselbund mit anderen Schlüsselanhängern desselben oder eines anderen Typs verwendet werden.

AWS KMS Erforderliche Berechtigungen für Schlüsselanhänger

Das benötigt AWS Encryption SDK kein AWS-Konto und es hängt auch nicht von einem ab. AWS-Service Um einen AWS KMS Schlüsselbund verwenden zu können, benötigen Sie jedoch eine AWS-Konto und die folgenden Mindestberechtigungen für den Inhalt Ihres AWS KMS keys Schlüsselbunds.

  • Um mit einem AWS KMS Schlüsselbund zu verschlüsseln, benötigen Sie die kms: GenerateDataKey -Berechtigung für den Generatorschlüssel. Sie benötigen die kms:Encrypt-Berechtigung für alle zusätzlichen Schlüssel im Schlüsselbund. AWS KMS

  • Um mit einem AWS KMS Schlüsselbund zu entschlüsseln, benötigen Sie die kms:Decrypt-Berechtigung für mindestens einen Schlüssel im Schlüsselbund. AWS KMS

  • Um mit einem aus Schlüsselbunden bestehenden Mehrfachschlüsselbund zu verschlüsseln, benötigen Sie die kms-Berechtigung für den AWS KMS Generatorschlüssel im Generator-Schlüsselbund. GenerateDataKey Sie benötigen die kms:Encrypt-Berechtigung für alle anderen Schlüssel in allen anderen Schlüsselbunden. AWS KMS

Ausführliche Informationen zu den Berechtigungen für AWS KMS keys finden Sie unter Authentifizierung und Zugriffskontrolle im Entwicklerhandbuch.AWS Key Management Service

Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund

Ein AWS KMS Schlüsselbund kann einen oder mehrere enthalten. AWS KMS keys Um AWS KMS key in einem AWS KMS Schlüsselbund eine anzugeben, verwenden Sie eine unterstützte AWS KMS Schlüssel-ID. Die Schlüsselbezeichner, die Sie zur Identifizierung eines AWS KMS key in einem Schlüsselbund verwenden können, variieren je nach Vorgang und Sprachimplementierung. Einzelheiten zu den Schlüsselkennungen für einen AWS KMS key finden Sie unter Schlüsselkennungen im Entwicklerhandbuch.AWS Key Management Service

Es hat sich bewährt, die spezifischste Schlüssel-ID zu verwenden, die für Ihre Aufgabe praktikabel ist.

Wenn Sie einen Aliasnamen oder Alias ARN für einen KMS Schlüssel in einem Verschlüsselungsschlüsselbund angeben, speichert der Verschlüsselungsvorgang den ARN aktuell mit dem Alias verknüpften Schlüssel in den Metadaten des verschlüsselten Datenschlüssels. Der Alias wird nicht gespeichert. Änderungen am Alias wirken sich nicht auf den KMS Schlüssel aus, der zum Entschlüsseln Ihrer verschlüsselten Datenschlüssel verwendet wird.

Einen AWS KMS Schlüsselbund für die Verschlüsselung erstellen

Sie können jeden AWS KMS Schlüsselbund mit einem AWS KMS key oder mehreren Schlüsselbändern AWS KMS keys im selben oder einem anderen AWS-Konten und konfigurieren. AWS-Regionen Das AWS KMS keys müssen symmetrische Verschlüsselungsschlüssel (SYMMETRIC_DEFAULT) sein. Sie können auch einen Schlüssel für mehrere KMS Regionen mit symmetrischer Verschlüsselung verwenden. Wie bei allen Schlüsselbunden können Sie einen oder mehrere AWS KMS Schlüsselringe in einem Schlüsselbund verwenden.

Wenn Sie einen AWS KMS Schlüsselbund zum Verschlüsseln von Daten erstellen, müssen Sie einen Generatorschlüssel angeben. Dieser wird verwendet, um einen Klartext-Datenschlüssel zu generieren und AWS KMS key diesen zu verschlüsseln. Der Datenschlüssel hat mathematisch gesehen nichts mit dem Schlüssel zu tun. KMS Wenn Sie möchten, können Sie dann weitere angeben, AWS KMS keys die denselben Klartext-Datenschlüssel verschlüsseln.

Um die durch diesen Schlüsselbund geschützte verschlüsselte Nachricht zu entschlüsseln, muss der verwendete Schlüsselbund mindestens einen der im Schlüsselbund AWS KMS keys definierten Elemente enthalten, oder nein. AWS KMS keys(Ein AWS KMS Schlüsselbund ohne AWS KMS keys wird als Discovery-Schlüsselbund bezeichnet.)AWS KMS

In anderen AWS Encryption SDK Sprachimplementierungen als dem müssen alle Schlüssel AWS-Verschlüsselungs-SDK for C, die in einen Verschlüsselungsschlüsselbund oder einen Mehrfachschlüsselbund eingeschlossen werden, in der Lage sein, den Datenschlüssel zu verschlüsseln. Wenn ein Umschließungsschlüssel nicht verschlüsselt werden kann, schlägt die Verschlüsselungsmethode fehl. Daher muss der Anrufer über die erforderlichen Berechtigungen für alle Schlüssel im Schlüsselbund verfügen. Wenn Sie einen Discovery-Schlüsselbund verwenden, um Daten allein oder in einem Mehrfachschlüsselbund zu verschlüsseln, schlägt der Verschlüsselungsvorgang fehl. Die Ausnahme ist der AWS-Verschlüsselungs-SDK for C, bei dem der Verschlüsselungsvorgang einen standardmäßigen Erkennungsschlüsselbund ignoriert, aber fehlschlägt, wenn Sie einen Erkennungsschlüsselbund mit mehreren Regionen angeben, allein oder in einem Schlüsselbund mit mehreren Schlüsselbunden.

In den folgenden Beispielen wird ein AWS KMS Schlüsselbund mit einem Generatorschlüssel und einem zusätzlichen Schlüssel erstellt. In diesen Beispielen werden Schlüssel verwendetARNs, um die KMS Schlüssel zu identifizieren. Dies ist eine bewährte Methode für AWS KMS Schlüsselringe, die zur Verschlüsselung verwendet werden, und eine Voraussetzung für AWS KMS Schlüsselringe, die zur Entschlüsselung verwendet werden. Details hierzu finden Sie unter Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund.

C

Um einen Schlüsselbund AWS KMS key in einer Verschlüsselung zu identifizieren AWS-Verschlüsselungs-SDK for C, geben Sie einen Schlüssel oder Alias an. ARN ARN In einem Schlüsselbund zur Entschlüsselung müssen Sie einen Schlüssel verwenden. ARN Details hierzu finden Sie unter Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund.

Ein vollständiges Beispiel finden Sie unter 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

Um einen AWS KMS Schlüsselbund mit einem oder mehreren AWS KMS Schlüsseln im Formular zu erstellen. AWS Encryption SDK NET, erstellen Sie einen Schlüsselbund mit mehreren Schlüsseln. Das AWS Encryption SDK für. NETenthält einen Schlüsselring mit mehreren Schlüsseln nur für AWS KMS Schlüssel.

Wenn Sie im Feld AWS KMS key für einen Verschlüsselungsschlüsselbund einen Schlüsselbund angeben. AWS Encryption SDK NET, können Sie eine beliebige gültige Schlüssel-ID verwenden: eine Schlüssel-ID, einen Schlüssel ARN, einen Aliasnamen oder einen Alias ARN. Hilfe zur Identifizierung von AWS KMS keys in einem AWS KMS Schlüsselbund finden Sie unterIdentifizierung AWS KMS keys in einem AWS KMS Schlüsselbund.

Im folgenden Beispiel wird Version 4 verwendet. x der AWS Encryption SDK Form. NETum einen AWS KMS Schlüsselbund mit einem Generatorschlüssel und zusätzlichen Tasten zu erstellen. Ein vollständiges Beispiel finden Sie unter 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

Wenn Sie in der einen Schlüsselbund AWS KMS key für die Verschlüsselung angeben AWS-Verschlüsselungs-SDK for JavaScript, können Sie eine beliebige gültige Schlüssel-ID verwenden: eine Schlüssel-ID, einen Schlüssel ARN, einen Aliasnamen oder einen Alias. ARN Hilfe zur Identifizierung von AWS KMS keys in einem AWS KMS Schlüsselbund finden Sie unter. Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugeben,REQUIRE_ENCRYPT_REQUIRE_DECRYPT. Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

Ein vollständiges Beispiel finden Sie unter kms_simple.ts im Repository unter. AWS-Verschlüsselungs-SDK for JavaScript 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

Wenn Sie in der einen Schlüsselbund AWS KMS key für die Verschlüsselung angeben AWS-Verschlüsselungs-SDK for JavaScript, können Sie eine beliebige gültige Schlüssel-ID verwenden: eine Schlüssel-ID, einen Schlüssel ARN, einen Aliasnamen oder einen Alias. ARN Hilfe zur Identifizierung von AWS KMS keys in einem AWS KMS Schlüsselbund finden Sie unter. Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugeben,REQUIRE_ENCRYPT_REQUIRE_DECRYPT. Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

Ein vollständiges Beispiel finden Sie unter kms_simple.ts im Repository unter. AWS-Verschlüsselungs-SDK for JavaScript 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

Um einen AWS KMS Schlüsselbund mit einem oder mehreren Schlüsseln zu erstellen, erstellen Sie einen Schlüsselbund mit mehreren AWS KMS Schlüsseln. AWS-Verschlüsselungs-SDK for Java Der AWS-Verschlüsselungs-SDK for Java beinhaltet einen Mehrfachschlüsselbund nur für Schlüssel. AWS KMS

Wenn Sie in der einen Schlüsselbund AWS KMS key für die Verschlüsselung angeben AWS-Verschlüsselungs-SDK for Java, können Sie eine beliebige gültige Schlüssel-ID verwenden: eine Schlüssel-ID, einen Schlüssel ARN, einen Aliasnamen oder einen Alias. ARN Hilfe zur Identifizierung von AWS KMS keys in einem AWS KMS Schlüsselbund finden Sie unter. Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund

Ein vollständiges Beispiel finden Sie unter BasicEncryptionKeyringExample.java im AWS-Verschlüsselungs-SDK for Java Repository unter. 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

Um einen AWS KMS Schlüsselbund mit einem oder mehreren AWS KMS Schlüsseln in der zu erstellen AWS-Verschlüsselungs-SDK for Python, erstellen Sie einen Mehrfachschlüsselbund. Der AWS-Verschlüsselungs-SDK for Python beinhaltet einen Mehrfachschlüsselbund nur für Schlüssel. AWS KMS Ein Beispiel finden Sie unter aws_kms_multi_keyring_example.py im AWS-Verschlüsselungs-SDK for Python Repository unter. GitHub

Wenn Sie in der einen Schlüsselbund AWS KMS key für die Verschlüsselung angeben AWS-Verschlüsselungs-SDK for Python, können Sie eine beliebige gültige Schlüssel-ID verwenden: eine Schlüssel-ID, einen Schlüssel ARN, einen Aliasnamen oder einen Alias ARN. Hilfe zur Identifizierung von AWS KMS keys in einem AWS KMS Schlüsselbund finden Sie unter. Identifizierung AWS KMS keys in einem AWS KMS Schlüsselbund

Im folgenden Beispiel wird der AWS Encryption SDK Client mit der Standard-Commitment-Richtlinie instanziiert. REQUIRE_ENCRYPT_REQUIRE_DECRYPT Ein vollständiges Beispiel finden Sie unter aws_kms_keyring_example.py im AWS-Verschlüsselungs-SDK for Python Repository unter. 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 )

Einen AWS KMS Schlüsselbund für die Entschlüsselung erstellen

Sie geben auch einen AWS KMS Schlüsselbund an, wenn Sie die verschlüsselte Nachricht entschlüsseln, die zurückgegeben wird. AWS Encryption SDK Wenn der Schlüsselbund für die Entschlüsselung einen Wert angibt AWS KMS keys, verwendet er nur diese Umschließungsschlüssel, um die verschlüsselten Datenschlüssel in der verschlüsselten Nachricht zu entschlüsseln. AWS Encryption SDK (Sie können auch einen AWS KMS Discovery-Schlüsselbund verwenden, in dem kein Schlüsselbund angegeben ist.) AWS KMS keys

Beim Entschlüsseln AWS Encryption SDK durchsucht der den AWS KMS Schlüsselbund nach einem Schlüssel AWS KMS key , der einen der verschlüsselten Datenschlüssel entschlüsseln kann. Insbesondere AWS Encryption SDK verwendet der das folgende Muster für jeden verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht.

  • Der AWS Encryption SDK ruft den Schlüssel ARN des Datenschlüssels AWS KMS key , der den Datenschlüssel verschlüsselt hat, aus den Metadaten der verschlüsselten Nachricht ab.

  • Der AWS Encryption SDK durchsucht den Schlüsselbund für die Entschlüsselung nach einem AWS KMS key mit einem passenden Schlüssel. ARN

  • Wenn ARN im Schlüsselbund ein Schlüssel AWS KMS key mit einem passenden Schlüssel gefunden wird, werden Sie AWS Encryption SDK aufgefordert, den Schlüssel AWS KMS zum Entschlüsseln des verschlüsselten KMS Datenschlüssels zu verwenden.

  • Andernfalls springt er zum nächsten verschlüsselten Datenschlüssel, falls vorhanden.

Der versucht AWS Encryption SDK nie, einen verschlüsselten Datenschlüssel zu entschlüsseln, es sei denn, der Schlüssel ARN des Schlüssels AWS KMS key , der diesen Datenschlüssel verschlüsselt hat, ist im Schlüsselbund für die Entschlüsselung enthalten. Wenn der Schlüsselbund für die Entschlüsselung keinen der Schlüssel enthält, ARNs der einen der Datenschlüssel verschlüsselt hat AWS KMS keys , schlägt der Entschlüsselungsaufruf AWS Encryption SDK fehl, ohne jemals aufgerufen zu haben. AWS KMS

Ab Version 1.7. x, wenn ein verschlüsselter Datenschlüssel entschlüsselt wird, übergibt der AWS Encryption SDK immer den Schlüssel ARN von AWS KMS key an den KeyId Parameter der AWS KMS Decrypt-Operation. Es hat sich AWS KMS key bewährt, beim Entschlüsseln den zu identifizieren, um sicherzustellen, dass Sie den verschlüsselten Datenschlüssel mit dem Umschließungsschlüssel entschlüsseln, den Sie verwenden möchten. AWS KMS

Ein Entschlüsselungsaufruf mit einem AWS KMS Schlüsselbund ist erfolgreich, wenn mindestens einer der Schlüsselbunde AWS KMS key im Entschlüsselungsschlüsselbund einen der verschlüsselten Datenschlüssel in der verschlüsselten Nachricht entschlüsseln kann. Außerdem muss der Aufrufer über die kms:Decrypt-Berechtigung für diesen AWS KMS key verfügen. Dieses Verhalten ermöglicht es Ihnen, Daten unter mehreren Konten AWS KMS keys in verschiedenen AWS-Regionen AND-Konten zu verschlüsseln, aber einen eingeschränkteren Entschlüsselungsschlüsselbund bereitzustellen, der auf ein bestimmtes Konto, eine Region, einen Benutzer, eine Gruppe oder eine Rolle zugeschnitten ist.

Wenn Sie AWS KMS key in einem Entschlüsselungsschlüsselbund einen angeben, müssen Sie seinen Schlüssel verwenden. ARN Andernfalls AWS KMS key wird der nicht erkannt. Hilfe bei der Suche nach dem Schlüssel ARN finden Sie unter Finden der Schlüssel-ID und ARN im AWS Key Management Service Entwicklerhandbuch.

Anmerkung

Wenn Sie einen verschlüsselten Schlüsselbund für die Entschlüsselung wiederverwenden, stellen Sie sicher, dass die AWS KMS keys im Schlüsselbund enthaltenen Schlüssel identifiziert werden. ARNs

Der folgende AWS KMS Schlüsselbund enthält beispielsweise nur den zusätzlichen Schlüssel, der im Verschlüsselungsschlüsselbund verwendet wurde. Anstatt jedoch mit seinem Alias auf den Zusatzschlüssel zu verweisen, verwendet das Beispiel den Schlüssel des zusätzlichen Schlüsselsalias/exampleAlias, ARN wie er für Decrypt-Aufrufe erforderlich ist.

Sie können diesen Schlüsselbund verwenden, um eine Nachricht zu entschlüsseln, die sowohl unter dem Generatorschlüssel als auch dem zusätzlichen Schlüssel verschlüsselt wurde, vorausgesetzt, dass Sie über die Berechtigung verfügen, den zusätzlichen Schlüssel zum Entschlüsseln von Daten zu verwenden.

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

Da dieser Schlüsselbund für die Entschlüsselung nur einen AWS KMS Schlüssel enthält, verwendet das Beispiel die CreateAwsKmsKeyring() Methode mit einer Instanz ihres Objekts. CreateAwsKmsKeyringInput Um einen AWS KMS Schlüsselbund mit einem Schlüssel zu erstellen, können Sie einen AWS KMS Schlüsselbund mit einem Schlüssel oder einem Schlüsselbund mit mehreren Schlüsseln verwenden. Details hierzu finden Sie unter Daten im Formular verschlüsseln. AWS Encryption SDK NET. Im folgenden Beispiel wird Version 4 verwendet. x der AWS Encryption SDK Form. NETum einen AWS KMS Schlüsselbund für die Entschlüsselung zu erstellen.

// 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

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugeben,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

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

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugeben,REQUIRE_ENCRYPT_REQUIRE_DECRYPT. Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

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

Da dieser Schlüsselbund zur Entschlüsselung nur einen AWS KMS Schlüssel enthält, verwendet das Beispiel die CreateAwsKmsKeyring() Methode mit einer Instanz des zugehörigen CreateAwsKmsKeyringInput Objekts. Um einen AWS KMS Schlüsselbund mit einem Schlüssel zu erstellen, können Sie einen AWS KMS Schlüsselbund mit einem Schlüssel oder einem Schlüsselbund mit mehreren Schlüsseln verwenden.

// 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

Im folgenden Beispiel wird der AWS Encryption SDK Client mit der Standard-Commitment-Richtlinie instanziiert. REQUIRE_ENCRYPT_REQUIRE_DECRYPT Ein vollständiges Beispiel finden Sie unter aws_kms_keyring_example.py im AWS-Verschlüsselungs-SDK for Python Repository unter. 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 )

Sie können auch einen AWS KMS Schlüsselbund verwenden, der einen Generatorschlüssel für die Entschlüsselung angibt, z. B. den folgenden. Beim Entschlüsseln AWS Encryption SDK ignoriert der den Unterschied zwischen Generatorschlüsseln und zusätzlichen Schlüsseln. Es kann jeden der angegebenen Schlüssel verwenden, AWS KMS keys um einen verschlüsselten Datenschlüssel zu entschlüsseln. Der Aufruf von AWS KMS ist nur erfolgreich, wenn der Aufrufer berechtigt ist, damit AWS KMS key Daten zu entschlüsseln.

C
struct aws_cryptosdk_keyring *kms_decrypt_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(generator_key, {additional_key, other_key});
C# / .NET

Im folgenden Beispiel wird Version 4 verwendet. x der AWS Encryption SDK Form. 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

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugeben,REQUIRE_ENCRYPT_REQUIRE_DECRYPT. Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

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

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugeben,REQUIRE_ENCRYPT_REQUIRE_DECRYPT. Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

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

Im folgenden Beispiel wird der AWS Encryption SDK Client mit der Standard-Commitment-Richtlinie instanziiert,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT Ein vollständiges Beispiel finden Sie unter aws_kms_keyring_example.py im AWS-Verschlüsselungs-SDK for Python Repository unter. 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 )

Im Gegensatz zu einem Verschlüsselungsschlüsselbund, der alle angegebenen Daten verwendet AWS KMS keys, können Sie eine verschlüsselte Nachricht mit einem Schlüsselbund entschlüsseln, der auch solche enthält AWS KMS keys , die nichts mit der verschlüsselten Nachricht zu tun haben und AWS KMS keys zu deren Verwendung der Anrufer nicht berechtigt ist. Wenn ein Entschlüsselungsaufruf an AWS KMS fehlschlägt, z. B. wenn der Aufrufer nicht über die erforderliche Berechtigung verfügt, springt das AWS Encryption SDK einfach zum nächsten verschlüsselten Datenschlüssel.

Verwenden Sie einen Discovery-Schlüsselbund AWS KMS

Beim Entschlüsseln empfiehlt es sich, die Umschließungsschlüssel anzugeben, die sie verwenden AWS Encryption SDK können. Um dieser bewährten Methode zu folgen, sollten Sie einen Schlüsselbund für die AWS KMS Entschlüsselung verwenden, der die Anzahl der AWS KMS Umschließungsschlüssel auf die von Ihnen angegebenen beschränkt. Sie können jedoch auch einen AWS KMS Discovery-Schlüsselbund erstellen, d. h. einen AWS KMS Schlüsselbund, der keine Schlüssel zum Umschließen festlegt.

Der AWS Encryption SDK bietet einen AWS KMS Standard-Discovery-Schlüsselbund und einen Discovery-Schlüsselbund für Schlüssel mit mehreren Regionen. AWS KMS Hinweise zur Verwendung von Regionsschlüsseln mit dem finden Sie unter. AWS Encryption SDKVerwenden Sie mehrere Regionen AWS KMS keys

Da er keine Umschließungsschlüssel angibt, kann ein Discovery-Schlüsselbund keine Daten verschlüsseln. Wenn Sie einen Discovery-Schlüsselbund verwenden, um Daten allein oder in einem Mehrfachschlüsselbund zu verschlüsseln, schlägt der Verschlüsselungsvorgang fehl. Die Ausnahme ist der AWS-Verschlüsselungs-SDK for C, bei dem der Verschlüsselungsvorgang einen standardmäßigen Erkennungsschlüsselbund ignoriert, aber fehlschlägt, wenn Sie einen Erkennungsschlüsselbund mit mehreren Regionen angeben, allein oder in einem Schlüsselbund mit mehreren Schlüsselbunden.

Bei der Entschlüsselung ermöglicht ein Discovery-Schlüsselbund, die Entschlüsselung eines beliebigen verschlüsselten Datenschlüssels mithilfe des Schlüssels AWS Encryption SDK AWS KMS anzufordern, der ihn verschlüsselt hat, unabhängig davon, wem dieser gehört oder wer Zugriff AWS KMS key darauf hat. AWS KMS key Der Anruf ist nur erfolgreich, wenn der Anrufer die Erlaubnis für hat. kms:Decrypt AWS KMS key

Wichtig

Wenn Sie einen AWS KMS Discovery-Schlüsselbund in einen Mehrschlüsselbund für die Entschlüsselung aufnehmen, setzt der Discovery-Schlüsselbund alle Schlüsseleinschränkungen außer Kraft, die durch andere Schlüsselbunde im KMS Mehrfachschlüsselbund festgelegt wurden. Der Mehrfachschlüsselbund verhält sich wie sein am wenigsten restriktiver Schlüsselbund. Ein AWS KMS Discovery-Schlüsselbund hat keine Auswirkung auf die Verschlüsselung, wenn er alleine oder in einem Mehrfachschlüsselbund verwendet wird.

Der AWS Encryption SDK bietet der Einfachheit halber einen AWS KMS Discovery-Schlüsselbund. Wir empfehlen jedoch aus folgenden Gründen, dass Sie nach Möglichkeit einen beschränkteren Schlüsselbund verwenden.

  • Authentizität — Ein AWS KMS Discovery-Schlüsselbund kann jeden Schlüsselbund verwenden AWS KMS key , der zum Verschlüsseln eines Datenschlüssels in der verschlüsselten Nachricht verwendet wurde, nur damit der Anrufer berechtigt ist, diesen Schlüssel zum Entschlüsseln zu verwenden. AWS KMS key Dies ist möglicherweise nicht der AWS KMS key , den der Aufrufer verwenden möchte. Beispielsweise könnte einer der verschlüsselten Datenschlüssel unter einem weniger sicheren Verfahren verschlüsselt worden sein AWS KMS key , das jeder verwenden kann.

  • Latenz und Leistung — Ein AWS KMS Discovery-Schlüsselbund ist möglicherweise merklich langsamer als andere Schlüsselbunde, da er AWS Encryption SDK versucht, alle verschlüsselten Datenschlüssel zu entschlüsseln, einschließlich der Schlüssel, die AWS KMS keys in anderen Regionen verschlüsselt wurden, AWS-Konten und der Anrufer nicht berechtigt ist, diese für AWS KMS keys die Entschlüsselung zu verwenden.

Wenn Sie einen Discovery-Schlüsselbund verwenden, empfehlen wir die Verwendung eines Discovery-Filters, um die Schlüssel, die verwendet werden können, auf die KMS Schlüssel in bestimmten Partitionen zu beschränken. AWS-Konten Discovery-Filter werden in den Versionen 1.7 unterstützt. x und später von AWS Encryption SDK. Hilfe bei der Suche nach Ihrer Konto-ID und Partition finden Sie unter Ihre AWS-Konto Identifikatoren und Ihr ARNFormat im Allgemeine AWS-Referenz.

Der folgende Code instanziiert einen AWS KMS Discovery-Schlüsselbund mit einem Erkennungsfilter, der die Schlüssel, die er verwenden AWS Encryption SDK kann, auf die KMS Schlüssel in der aws Partition und im Beispielkonto 111122223333 beschränkt.

Bevor Sie diesen Code verwenden, ersetzen Sie die Beispiel AWS-Konto - und Partitionswerte durch gültige Werte für Ihre Partition und. AWS-Konto Wenn sich Ihre KMS Schlüssel in Regionen Chinas befinden, verwenden Sie den aws-cn Partitionswert. Wenn sich Ihre KMS Schlüssel darin befinden AWS GovCloud (US) Regions, verwenden Sie den aws-us-gov Partitionswert. Verwenden Sie für alle anderen AWS-Regionen den aws Partitionswert.

C

Ein vollständiges Beispiel finden Sie unter 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

Das folgende Beispiel verwendet Version 4. x der AWS Encryption SDK Form. 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

JavaScriptIn müssen Sie die Discovery-Eigenschaft explizit angeben.

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugebenREQUIRE_ENCRYPT_REQUIRE_DECRYPT. Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

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

JavaScriptIn müssen Sie die Discovery-Eigenschaft explizit angeben.

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugebenREQUIRE_ENCRYPT_REQUIRE_DECRYPT. Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

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 )

Verwenden Sie einen AWS KMS regionalen Discovery-Schlüsselbund

Ein AWS KMS Regional Discovery-Schlüsselbund ist ein Schlüsselbund, bei dem ARNs die Schlüssel nicht angegeben sind. KMS Stattdessen ermöglicht es die Entschlüsselung AWS Encryption SDK , indem nur die KMS Schlüssel verwendet werden. AWS-Regionen

Bei der Entschlüsselung mit einem AWS KMS regionalen Discovery-Schlüsselbund werden alle verschlüsselten Datenschlüssel AWS Encryption SDK entschlüsselt, die unter einem AWS KMS key der angegebenen Schlüssel verschlüsselt wurden. AWS-Region Um erfolgreich zu sein, muss der Aufrufer über kms:Decrypt Berechtigungen für mindestens einen der angegebenen Schlüssel verfügen AWS-Region , AWS KMS keys der einen Datenschlüssel verschlüsselt hat.

Wie andere Discovery-Schlüsselringe hat auch der regionale Discovery-Schlüsselbund keine Auswirkung auf die Verschlüsselung. Er funktioniert nur beim Entschlüsseln verschlüsselter Nachrichten. Wenn Sie einen Regional Discovery-Schlüsselbund in einem Mehrfachschlüsselbund verwenden, der zum Verschlüsseln und Entschlüsseln verwendet wird, ist dieser nur beim Entschlüsseln wirksam. Wenn Sie einen Schlüsselbund für die Erkennung mehrerer Regionen verwenden, um Daten allein oder in einem Schlüsselbund zu verschlüsseln, schlägt der Verschlüsselungsvorgang fehl.

Wichtig

Wenn Sie einen Schlüsselbund für die AWS KMS regionale Erkennung in einen Schlüsselbund für die Entschlüsselung mit mehreren Schlüsseln aufnehmen, überschreibt der Schlüsselbund für die regionale Erkennung alle Schlüsseleinschränkungen, die durch andere Schlüsselbunde im Mehrfachschlüsselbund festgelegt wurden. KMS Der Mehrfachschlüsselbund verhält sich wie der Schlüsselbund mit den wenigsten Einschränkungen. Ein AWS KMS Discovery-Schlüsselbund hat keine Auswirkung auf die Verschlüsselung, wenn er alleine oder in einem Mehrfachschlüsselbund verwendet wird.

Der regionale Discovery-Schlüsselbund bei AWS-Verschlüsselungs-SDK for C Versuchen, nur mit KMS Schlüsseln in der angegebenen Region zu entschlüsseln. Wenn Sie einen Discovery-Schlüsselbund im und für verwenden. AWS-Verschlüsselungs-SDK for JavaScript AWS Encryption SDK NET, konfigurieren Sie die Region auf dem AWS KMS Client. Bei diesen AWS Encryption SDK Implementierungen AWS KMS werden KMS Schlüssel nicht nach Region gefiltert, aber eine Entschlüsselungsanforderung für KMS Schlüssel außerhalb der angegebenen Region schlägt fehl.

Wenn Sie einen Discovery-Schlüsselbund verwenden, empfehlen wir die Verwendung eines Discovery-Filters, um die bei der Entschlüsselung verwendeten KMS Schlüssel auf die Schlüssel in den angegebenen Partitionen zu beschränken. AWS-Konten Discovery-Filter werden in den Versionen 1.7 unterstützt. x und später von AWS Encryption SDK.

Der folgende Code erstellt beispielsweise einen AWS KMS regionalen Discovery-Schlüsselbund mit einem Discovery-Filter. Dieser Schlüsselbund beschränkt die Anzahl der AWS Encryption SDK KMS Schlüssel im Konto 111122223333 in der Region USA West (Oregon) (us-west-2).

C

Weitere Informationen zum Anzeigen dieses Schlüsselbunds und der create_kms_client-Methode in einem funktionierenden Beispiel finden Sie unter 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 Das für. NEThat keinen speziellen Regional Discovery-Schlüsselanhänger. Sie können jedoch verschiedene Techniken verwenden, um die bei der Entschlüsselung verwendeten KMS Schlüssel auf eine bestimmte Region zu beschränken.

Die effizienteste Methode, die Regionen in einem Discovery-Schlüsselbund einzuschränken, ist die Verwendung eines multi-Region-aware Discovery-Schlüsselbunds, auch wenn Sie die Daten nur mit Schlüsseln aus einer Region verschlüsselt haben. Wenn Schlüssel mit nur einer Region gefunden werden, verwendet der multi-Region-aware Schlüsselbund keine Funktionen für mehrere Regionen.

Der von der CreateAwsKmsMrkDiscoveryKeyring() Methode zurückgegebene Schlüsselbund filtert KMS Schlüssel vor dem Aufruf nach Region. AWS KMS Sie sendet AWS KMS nur dann eine Entschlüsselungsanforderung an, wenn der verschlüsselte Datenschlüssel mit einem KMS Schlüssel in der Region verschlüsselt wurde, die durch den Region Parameter im Objekt angegeben wurde. CreateAwsKmsMrkDiscoveryKeyringInput

In den folgenden Beispielen wird Version 4 verwendet. x der AWS Encryption SDK Form. 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);

Sie können KMS Schlüssel auch auf einen bestimmten Wert beschränken, AWS-Region indem Sie in Ihrer Instanz des AWS KMS Clients (AmazonKeyManagementServiceClient) eine Region angeben. Diese Konfiguration ist jedoch weniger effizient und potenziell kostspieliger als die Verwendung eines multi-Region-aware Discovery-Schlüsselbunds. Anstatt die KMS Schlüssel vor dem Anruf nach Region zu filtern AWS KMS, verwenden Sie das AWS Encryption SDK für. NETruft AWS KMS nach jedem verschlüsselten Datenschlüssel auf (bis er einen entschlüsselt) und beschränkt sich darauf AWS KMS , die verwendeten KMS Schlüssel auf die angegebene Region zu beschränken.

Im folgenden Beispiel wird Version 4 verwendet. x der AWS Encryption SDK Form. 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

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugeben,REQUIRE_ENCRYPT_REQUIRE_DECRYPT. Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

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

Im folgenden Beispiel wird die buildClient Funktion verwendet, um die Standard-Commitment-Richtlinie anzugeben,REQUIRE_ENCRYPT_REQUIRE_DECRYPT. Sie können die auch verwendenbuildClient, um die Anzahl der verschlüsselten Datenschlüssel in einer verschlüsselten Nachricht zu begrenzen. Weitere Informationen finden Sie unter Beschränkung verschlüsselter Datenschlüssel.

Einen Überblick über diesen Schlüsselbund und die limitRegions Funktion finden Sie in einem funktionierenden Beispiel unter 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 )

Die exportiert AWS-Verschlüsselungs-SDK for JavaScript auch eine Funktion für Node.js und den Browser. excludeRegions Diese Funktion erstellt einen AWS KMS Regional Discovery-Schlüsselbund, der bestimmte Regionen AWS KMS keys auslässt. Im folgenden Beispiel wird ein AWS KMS regionaler Discovery-Schlüsselbund erstellt, der AWS KMS keys im Konto 111122223333 in allen Konten AWS-Region außer US East (Nord-Virginia) (us-east-1) verwendet werden kann.

Für AWS-Verschlüsselungs-SDK for C gibt es keine analoge Methode, aber Sie können eine implementieren, indem Sie eine benutzerdefinierte Methode erstellen. ClientSupplier

Dieses Beispiel zeigt den Code für Node.js.

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