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üsselringe
Ein AWS KMS Schlüsselbund wird verwendet, AWS KMS keysum Datenschlüssel zu 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 FIPS-Grenze durch. Wir empfehlen, wann immer möglich einen AWS KMS Schlüsselbund oder einen Schlüsselbund mit ähnlichen Sicherheitseigenschaften zu verwenden.
Alle Programmiersprachenimplementierungen, die Schlüsselringe unterstützen, unterstützen Schlüsselbunde, die AWS KMS KMS-Schlüssel mit symmetrischer Verschlüsselung verwenden. Die folgenden Programmiersprachenimplementierungen unterstützen auch AWS KMS Schlüsselringe, die asymmetrische RSA-KMS-Schlüssel verwenden:
-
Version 3. x der AWS-Verschlüsselungs-SDK for Java
-
Ausführung 4. x von AWS Encryption SDK für .NET
-
Version 4. x von AWS-Verschlüsselungs-SDK for Python, wenn es mit der optionalen Abhängigkeit der Cryptographic Material Providers Library (MPL) verwendet wird.
-
Version 1. x von der AWS Encryption SDK für Rust
-
Version 0.1. x oder höher von AWS Encryption SDK for Go
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.
Ab Version 2.3 können Sie einen Schlüssel AWS KMS mit mehreren 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 Encryption CLI. Einzelheiten und Beispiele zur Verwendung des multi-Region-aware Symbols finden Sie unterVerwendung mehrerer 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.
Alle Erwähnungen von KMS-Schlüsselanhängern im AWS Encryption SDK
beziehen sich auf Schlüsselringe. 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.
Sie müssen über einen Generatorschlüssel verfügen, um Nachrichten zu verschlüsseln. Wenn ein AWS KMS Schlüsselbund nur einen KMS-Schlüssel hat, wird dieser Schlüssel verwendet, um den Datenschlüssel zu generieren und zu verschlüsseln. Bei der Entschlüsselung ist der Generatorschlüssel optional, und die Unterscheidung zwischen Generatorschlüsseln und zusätzlichen Schlüsseln wird ignoriert.
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 AWS KMS keys den Schlüsselbund.
Ausführliche Informationen zu den Berechtigungen für finden Sie unter KMS-Schlüsselzugriff AWS KMS keys und -berechtigungen 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üsselbezeichnern 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.
-
In einem Verschlüsselungsschlüsselbund für können Sie einen Schlüssel-ARN oder Alias-ARN verwenden AWS-Verschlüsselungs-SDK for C, um KMS-Schlüssel zu identifizieren. In allen anderen Sprachimplementierungen können Sie eine Schlüssel-ID, einen Schlüssel-ARN, einen Aliasnamen oder einen Alias-ARN verwenden, um Daten zu verschlüsseln.
-
In einem Entschlüsselungsschlüsselbund müssen Sie einen Schlüssel-ARN verwenden, um AWS KMS keys zu identifizieren. Diese Anforderung gilt für alle Sprachenimplementierungen des AWS Encryption SDK. Details hierzu finden Sie unter Auswahl von Schlüsseln zum Umbrechen.
-
In einem Schlüsselbund, der für die Verschlüsselung und Entschlüsselung verwendet wird, müssen Sie einen Schlüssel-ARN verwenden, um AWS KMS keys zu identifizieren. Diese Anforderung gilt für alle Sprachenimplementierungen des AWS Encryption SDK.
Wenn Sie einen Aliasnamen oder Alias-ARN für einen KMS-Schlüssel in einem Verschlüsselungsschlüsselbund angeben, speichert der Verschlüsselungsvorgang den Schlüssel-ARN, der derzeit mit dem Alias verknüpft ist, 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 Schlüsselbund erstellen AWS KMS
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 Dabei AWS KMS keys muss es sich um einen KMS-Schlüssel mit symmetrischer Verschlüsselung (SYMMETRIC_DEFAULT) oder um einen asymmetrischen RSA-KMS-Schlüssel handeln. Sie können auch einen KMS-Schlüssel mit symmetrischer Verschlüsselung für mehrere Regionen verwenden. Sie können einen oder mehrere AWS KMS Schlüsselbunde in einem Mehrfachschlüsselbund verwenden.
Sie können einen AWS KMS Schlüsselbund erstellen, der Daten ver- und entschlüsselt, oder Sie können AWS KMS Schlüsselbunde speziell zum Verschlüsseln oder Entschlüsseln erstellen. 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 nichts mit dem KMS-Schlüssel zu tun. Wenn Sie möchten, können Sie dann weitere angeben, AWS KMS keys die denselben Klartext-Datenschlüssel verschlüsseln. Um ein durch diesen Schlüsselbund geschütztes verschlüsseltes Feld zu entschlüsseln, muss der von Ihnen verwendete Entschlüsselungsschlüsselbund mindestens einen der im Schlüsselbund AWS KMS keys definierten Werte 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 Wrapping-Schlü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. Sowohl der Generatorschlüssel als auch der Zusatzschlüssel sind KMS-Schlüssel mit symmetrischer Verschlüsselung. In diesen Beispielen wird der Schlüssel verwendet ARNs, 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 AWS KMS key in einem Verschlüsselungsschlüsselbund in der zu identifizieren AWS-Verschlüsselungs-SDK for C, geben Sie einen Schlüssel-ARN oder Alias-ARN an. In einem Entschlüsselungsschlüsselbund müssen Sie einen Schlüssel-ARN verwenden. 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
-
Verwenden Sie die Methode, um einen Schlüsselbund mit einem oder mehreren KMS-Schlüsseln im AWS Encryption SDK für.NET zu erstellen. CreateAwsKmsMultiKeyring()
In diesem Beispiel werden zwei AWS KMS Schlüssel verwendet. Verwenden Sie nur den Generator
Parameter, um einen KMS-Schlüssel anzugeben. Der KmsKeyIds
Parameter, der zusätzliche KMS-Schlüssel angibt, ist optional.
Die Eingabe für diesen Schlüsselbund benötigt keinen AWS KMS Client. Stattdessen AWS Encryption SDK verwendet der den AWS KMS Standardclient für jede Region, die durch einen KMS-Schlüssel im Schlüsselbund repräsentiert wird. Befindet sich der KMS-Schlüssel, der durch den Wert des Generator
Parameters identifiziert wird, beispielsweise in der Region USA West (Oregon) (us-west-2
), AWS Encryption SDK wird ein AWS KMS Standardclient für die us-west-2
Region erstellt. Wenn Sie den AWS KMS
Client anpassen müssen, verwenden Sie die CreateAwsKmsKeyring()
Methode.
Wenn Sie im für.NET einen Schlüsselbund AWS KMS key AWS Encryption SDK für die Verschlüsselung angeben, 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 Version 4 verwendet. x von AWS Encryption SDK für .NET und die CreateAwsKmsKeyring()
Methode zum Anpassen des AWS KMS Clients.
// 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";
List<string> additionalKeys = new List<string> { "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" };
// Instantiate the keyring input object
var createEncryptKeyringInput = new CreateAwsKmsMultiKeyringInput
{
Generator = generatorKey,
KmsKeyIds = additionalKeys
};
var kmsEncryptKeyring = materialProviders.CreateAwsKmsMultiKeyring(createEncryptKeyringInput);
- 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
-
Verwenden Sie die Methode, um einen Schlüsselbund mit einem oder mehreren Schlüsseln zu erstellen. AWS KMS CreateAwsKmsMultiKeyring()
In diesem Beispiel werden zwei KMS-Schlüssel verwendet. Verwenden Sie nur den generator
Parameter, um einen KMS-Schlüssel anzugeben. Der msKeyIds
Parameter, der zusätzliche KMS-Schlüssel angibt, ist optional.
Die Eingabe für diesen Schlüsselbund benötigt keinen AWS KMS Client. Stattdessen AWS Encryption SDK verwendet der den AWS KMS Standardclient für jede Region, die durch einen KMS-Schlüssel im Schlüsselbund repräsentiert wird. Befindet sich der KMS-Schlüssel, der durch den Wert des Generator
Parameters identifiziert wird, beispielsweise in der Region USA West (Oregon) (us-west-2
), AWS Encryption SDK wird ein AWS KMS Standardclient für die us-west-2
Region erstellt. Wenn Sie den AWS KMS
Client anpassen müssen, verwenden Sie die CreateAwsKmsKeyring()
Methode.
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("arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321");
// Create the keyring
final CreateAwsKmsMultiKeyringInput keyringInput = CreateAwsKmsMultiKeyringInput.builder()
.generator(generatorKey)
.kmsKeyIds(additionalKey)
.build();
final IKeyring kmsKeyring = materialProviders.CreateAwsKmsMultiKeyring(keyringInput);
- Python
-
Verwenden Sie die Methode, um einen Schlüsselbund mit einem oder mehreren AWS KMS Schlüsseln zu erstellen. create_aws_kms_multi_keyring()
In diesem Beispiel werden zwei KMS-Schlüssel verwendet. Verwenden Sie nur den generator
Parameter, um einen KMS-Schlüssel anzugeben. Der kms_key_ids
Parameter, der zusätzliche KMS-Schlüssel angibt, ist optional.
Die Eingabe für diesen Schlüsselbund benötigt keinen AWS KMS Client. Stattdessen AWS Encryption SDK verwendet der den AWS KMS Standardclient für jede Region, die durch einen KMS-Schlüssel im Schlüsselbund repräsentiert wird. Befindet sich der KMS-Schlüssel, der durch den Wert des generator
Parameters identifiziert wird, beispielsweise in der Region USA West (Oregon) (us-west-2
), AWS Encryption SDK wird ein AWS KMS Standardclient für die us-west-2
Region erstellt. Wenn Sie den AWS KMS
Client anpassen müssen, verwenden Sie die create_aws_kms_keyring()
Methode.
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
)
# 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
kms_multi_keyring_input: CreateAwsKmsMultiKeyringInput = CreateAwsKmsMultiKeyringInput(
generator=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
,
kms_key_ids=arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321
)
kms_multi_keyring: IKeyring = mat_prov.create_aws_kms_multi_keyring(
input=kms_multi_keyring_input
)
- Rust
-
Verwenden Sie die create_aws_kms_multi_keyring()
Methode, um einen Schlüsselbund mit einem oder mehreren AWS KMS Schlüsseln zu erstellen. In diesem Beispiel werden zwei KMS-Schlüssel verwendet. Verwenden Sie nur den generator
Parameter, um einen KMS-Schlüssel anzugeben. Der kms_key_ids
Parameter, der zusätzliche KMS-Schlüssel angibt, ist optional.
Die Eingabe für diesen Schlüsselbund benötigt keinen AWS KMS Client. Stattdessen AWS Encryption SDK verwendet der den AWS KMS Standardclient für jede Region, die durch einen KMS-Schlüssel im Schlüsselbund repräsentiert wird. Befindet sich der KMS-Schlüssel, der durch den Wert des generator
Parameters identifiziert wird, beispielsweise in der Region USA West (Oregon) (us-west-2
), AWS Encryption SDK wird ein AWS KMS Standardclient für die us-west-2
Region erstellt. Wenn Sie den AWS KMS
Client anpassen müssen, verwenden Sie die create_aws_kms_keyring()
Methode.
Wenn Sie im AWS KMS key for Rust einen Schlüsselbund für eine Verschlüsselung angeben, 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. AWS Encryption SDK 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.rs im Rust-Verzeichnis des Repositorys auf. aws-encryption-sdk GitHub
// Instantiate the AWS Encryption SDK client
let esdk_config = AwsEncryptionSdkConfig::builder().build()?;
let esdk_client = esdk_client::Client::from_conf(esdk_config)?;
// Create an AWS KMS client
let sdk_config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await;
let kms_client = aws_sdk_kms::Client::new(&sdk_config);
// Optional: Create an encryption context
let encryption_context = HashMap::from([
("encryption".to_string(), "context".to_string()),
("is not".to_string(), "secret".to_string()),
("but adds".to_string(), "useful metadata".to_string()),
("that can help you".to_string(), "be confident that".to_string()),
("the data you are handling".to_string(), "is what you think it is".to_string()),
]);
// Instantiate the material providers library
let mpl_config = MaterialProvidersConfig::builder().build()?;
let mpl = mpl_client::Client::from_conf(mpl_config)?;
// Create the AWS KMS keyring
let kms_keyring = mpl
.create_aws_kms_keyring()
.kms_key_id(kms_key_id)
.kms_client(kms_client)
.send()
.await?;
kms_multi_keyring: IKeyring = mat_prov.create_aws_kms_multi_keyring(
input=kms_multi_keyring_input
)
- Go
-
Verwenden Sie die Methode, um einen Schlüsselbund mit einem oder mehreren Schlüsseln zu erstellen. AWS KMS create_aws_kms_multi_keyring()
In diesem Beispiel werden zwei KMS-Schlüssel verwendet. Verwenden Sie nur den generator
Parameter, um einen KMS-Schlüssel anzugeben. Der kms_key_ids
Parameter, der zusätzliche KMS-Schlüssel angibt, ist optional.
Die Eingabe für diesen Schlüsselbund benötigt keinen AWS KMS Client. Stattdessen AWS Encryption SDK verwendet der den AWS KMS Standardclient für jede Region, die durch einen KMS-Schlüssel im Schlüsselbund repräsentiert wird. Befindet sich der KMS-Schlüssel, der durch den Wert des generator
Parameters identifiziert wird, beispielsweise in der Region USA West (Oregon) (us-west-2
), AWS Encryption SDK wird ein AWS KMS Standardclient für die us-west-2
Region erstellt. Wenn Sie den AWS KMS
Client anpassen müssen, verwenden Sie die create_aws_kms_keyring()
Methode.
Wenn Sie in AWS KMS key for Go einen Schlüsselbund für eine Verschlüsselung angeben, 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. AWS Encryption SDK 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
import (
"context"
mpl "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygenerated"
mpltypes "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygeneratedtypes"
client "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygenerated"
esdktypes "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygeneratedtypes"
)
// Instantiate the AWS Encryption SDK client
encryptionClient, err := client.NewClient(esdktypes.AwsEncryptionSdkConfig{})
if err != nil {
panic(err)
}
// Optional: Create an encryption context
encryptionContext := map[string]string{
"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
matProv, err := mpl.NewClient(mpltypes.MaterialProvidersConfig{})
if err != nil {
panic(err)
}
// Create the AWS KMS keyring
awsKmsMultiKeyringInput := mpltypes.CreateAwsKmsMultiKeyringInput{
Generator: &arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab,
KmsKeyIds: []string{arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321},
}
awsKmsMultiKeyring, err := matProv.CreateAwsKmsMultiKeyring(context.Background(), awsKmsMultiKeyringInput)
Das unterstützt AWS Encryption SDK auch AWS KMS Schlüsselringe, die asymmetrische RSA-KMS-Schlüssel verwenden. Asymmetrische AWS KMS RSA-Schlüsselringe können nur ein key pair enthalten.
Um mit einem asymmetrischen AWS KMS RSA-Schlüsselbund zu verschlüsseln, benötigen Sie kms: GenerateDataKey oder kms:Encrypt nicht, da Sie bei der Erstellung des Schlüsselbunds das Material der öffentlichen Schlüssel angeben müssen, das Sie für die Verschlüsselung verwenden möchten. Bei der Verschlüsselung mit diesem Schlüsselbund werden keine Anrufe getätigt. AWS KMS Um mit einem asymmetrischen AWS KMS RSA-Schlüsselbund zu entschlüsseln, benötigen Sie die kms:Decrypt-Berechtigung.
Um einen AWS KMS Schlüsselbund zu erstellen, der asymmetrische RSA-KMS-Schlüssel verwendet, müssen Sie eine der folgenden Programmiersprachenimplementierungen verwenden:
-
Version 3. x der AWS-Verschlüsselungs-SDK for Java
-
Ausführung 4. x von AWS Encryption SDK für .NET
-
Version 4. x von AWS-Verschlüsselungs-SDK for Python, wenn es mit der optionalen Abhängigkeit der Cryptographic Material Providers Library (MPL) verwendet wird.
-
Version 1. x von der AWS Encryption SDK für Rust
-
Version 0.1. x oder höher von AWS Encryption SDK for Go
In den folgenden Beispielen CreateAwsKmsRsaKeyring
wird die Methode verwendet, um einen AWS KMS Schlüsselbund mit einem asymmetrischen RSA-KMS-Schlüssel zu erstellen. Um einen asymmetrischen AWS KMS RSA-Schlüsselbund zu erstellen, geben Sie die folgenden Werte an.
-
kmsClient
: einen neuen Client erstellen AWS KMS
-
kmsKeyID
: der Schlüssel-ARN, der Ihren asymmetrischen RSA-KMS-Schlüssel identifiziert
-
publicKey
: eine Datei ByteBuffer aus einer UTF-8-codierten PEM-Datei, die den öffentlichen Schlüssel des Schlüssels darstellt, an den Sie übergeben haben kmsKeyID
-
encryptionAlgorithm
: Der Verschlüsselungsalgorithmus muss oder sein RSAES_OAEP_SHA_256
RSAES_OAEP_SHA_1
- C# / .NET
-
Um einen asymmetrischen AWS KMS RSA-Schlüsselbund zu erstellen, müssen Sie den öffentlichen Schlüssel und den privaten Schlüssel ARN aus Ihrem asymmetrischen RSA-KMS-Schlüssel angeben. Der öffentliche Schlüssel muss PEM-codiert sein. Im folgenden Beispiel wird ein AWS KMS Schlüsselbund mit einem asymmetrischen RSA-Schlüsselpaar erstellt.
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
var publicKey = new MemoryStream(Encoding.UTF8.GetBytes(AWS KMS RSA public key
));
// Instantiate the keyring input object
var createKeyringInput = new CreateAwsKmsRsaKeyringInput
{
KmsClient = new AmazonKeyManagementServiceClient(),
KmsKeyId = AWS KMS RSA private key ARN
,
PublicKey = publicKey,
EncryptionAlgorithm = EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256
};
// Create the keyring
var kmsRsaKeyring = mpl.CreateAwsKmsRsaKeyring(createKeyringInput);
- Java
-
Um einen asymmetrischen AWS KMS RSA-Schlüsselbund zu erstellen, müssen Sie den öffentlichen Schlüssel und den privaten Schlüssel ARN aus Ihrem asymmetrischen RSA-KMS-Schlüssel angeben. Der öffentliche Schlüssel muss PEM-codiert sein. Im folgenden Beispiel wird ein AWS KMS Schlüsselbund mit einem asymmetrischen RSA-Schlüsselpaar erstellt.
// Instantiate the AWS Encryption SDK and material providers
final AwsCrypto crypto = AwsCrypto.builder()
// Specify algorithmSuite without asymmetric signing here
//
// ALG_AES_128_GCM_IV12_TAG16_NO_KDF("0x0014"),
// ALG_AES_192_GCM_IV12_TAG16_NO_KDF("0x0046"),
// ALG_AES_256_GCM_IV12_TAG16_NO_KDF("0x0078"),
// ALG_AES_128_GCM_IV12_TAG16_HKDF_SHA256("0x0114"),
// ALG_AES_192_GCM_IV12_TAG16_HKDF_SHA256("0x0146"),
// ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256("0x0178")
.withEncryptionAlgorithm(CryptoAlgorithm.ALG_AES_256_GCM_IV12_TAG16_HKDF_SHA256
)
.build();
final MaterialProviders matProv = MaterialProviders.builder()
.MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
.build();
// Create a KMS RSA keyring.
// This keyring takes in:
// - kmsClient
// - kmsKeyId: Must be an ARN representing an asymmetric RSA KMS key
// - publicKey: A ByteBuffer of a UTF-8 encoded PEM file representing the public
// key for the key passed into kmsKeyId
// - encryptionAlgorithm: Must be either RSAES_OAEP_SHA_256 or RSAES_OAEP_SHA_1
final CreateAwsKmsRsaKeyringInput createAwsKmsRsaKeyringInput =
CreateAwsKmsRsaKeyringInput.builder()
.kmsClient(KmsClient.create())
.kmsKeyId(rsaKeyArn
)
.publicKey(publicKey
)
.encryptionAlgorithm(EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256
)
.build();
IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);
- Python
-
Um einen asymmetrischen AWS KMS RSA-Schlüsselbund zu erstellen, müssen Sie den öffentlichen Schlüssel und den privaten Schlüssel ARN aus Ihrem asymmetrischen RSA-KMS-Schlüssel angeben. Der öffentliche Schlüssel muss PEM-codiert sein. Im folgenden Beispiel wird ein AWS KMS Schlüsselbund mit einem asymmetrischen RSA-Schlüsselpaar erstellt.
# Instantiate the AWS Encryption SDK client
client = aws_encryption_sdk.EncryptionSDKClient(
commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
# 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: CreateAwsKmsRsaKeyringInput = CreateAwsKmsRsaKeyringInput(
public_key=public_key
,
kms_key_id=kms_key_id
,
encryption_algorithm="RSAES_OAEP_SHA_256
",
kms_client=kms_client
)
kms_rsa_keyring: IKeyring = mat_prov.create_aws_kms_rsa_keyring(
input=keyring_input
)
- Rust
-
Um einen asymmetrischen AWS KMS RSA-Schlüsselbund zu erstellen, müssen Sie den öffentlichen Schlüssel und den privaten Schlüssel ARN aus Ihrem asymmetrischen RSA-KMS-Schlüssel angeben. Der öffentliche Schlüssel muss PEM-codiert sein. Im folgenden Beispiel wird ein AWS KMS Schlüsselbund mit einem asymmetrischen RSA-Schlüsselpaar erstellt.
// Instantiate the AWS Encryption SDK client
let esdk_config = AwsEncryptionSdkConfig::builder().build()?;
let esdk_client = esdk_client::Client::from_conf(esdk_config)?;)
// Create an AWS KMS client
let sdk_config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await;
let kms_client = aws_sdk_kms::Client::new(&sdk_config);
// Optional: Create an encryption context
let encryption_context = HashMap::from([
("encryption".to_string(), "context".to_string()),
("is not".to_string(), "secret".to_string()),
("but adds".to_string(), "useful metadata".to_string()),
("that can help you".to_string(), "be confident that".to_string()),
("the data you are handling".to_string(), "is what you think it is".to_string()),
]);
// Instantiate the material providers library
let mpl_config = MaterialProvidersConfig::builder().build()?;
let mpl = mpl_client::Client::from_conf(mpl_config)?;
// Create the AWS KMS keyring
let kms_rsa_keyring = mpl
.create_aws_kms_rsa_keyring()
.kms_key_id(kms_key_id
.public_key(aws_smithy_types::Blob::new(public_key
))
.encryption_algorithm(aws_sdk_kms::types::EncryptionAlgorithmSpec::RsaesOaepSha256
)
.kms_client(kms_client)
.send()
.await?;
- Go
-
import (
"context"
mpl "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygenerated"
mpltypes "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygeneratedtypes"
client "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygenerated"
esdktypes "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygeneratedtypes"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/kms"
)
// Instantiate the AWS Encryption SDK client
encryptionClient, err := client.NewClient(esdktypes.AwsEncryptionSdkConfig{})
if err != nil {
panic(err)
}
// Create an AWS KMS client
cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
panic(err)
}
kmsClient := kms.NewFromConfig(cfg, func(o *kms.Options) {
o.Region = KmsKeyRegion
})
// Optional: Create an encryption context
encryptionContext := map[string]string{
"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
matProv, err := mpl.NewClient(mpltypes.MaterialProvidersConfig{})
if err != nil {
panic(err)
}
// Create the AWS KMS keyring
awsKmsRSAKeyringInput := mpltypes.CreateAwsKmsRsaKeyringInput{
KmsClient: kmsClient,
KmsKeyId: kmsKeyID
,
PublicKey: kmsPublicKey
,
EncryptionAlgorithm: kmstypes.EncryptionAlgorithmSpecRsaesOaepSha256
,
}
awsKmsRSAKeyring, err := matProv.CreateAwsKmsRsaKeyring(context.Background(), awsKmsRSAKeyringInput)
if err != nil {
panic(err)
}
Verwenden eines Discovery-Schlüsselbunds 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 Schlüsselbund, der keine AWS KMS Schlüssel zum Umschließen von Schlüsseln 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 SDKVerwendung mehrerer 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 können Sie mithilfe eines Discovery-Schlüsselbunds die AWS Encryption SDK Entschlüsselung eines beliebigen verschlüsselten Datenschlüssels unter Verwendung des verschlüsselten Schlüssels anfordern AWS KMS , 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 über die entsprechende Berechtigung verfügt. kms:Decrypt
AWS KMS key
Wenn Sie einen AWS KMS Discovery-Schlüsselbund in einen Mehrschlüsselbund für die Entschlüsselung aufnehmen, setzt der Discovery-Schlüsselbund alle KMS-Schlüsseleinschränkungen außer Kraft, die durch andere Schlüsselbunde im 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 Anrufer verwenden möchte. Beispielsweise könnte einer der verschlüsselten Datenschlüssel unter einer weniger sicheren Methode verschlüsselt worden sein AWS KMS key , die 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 KMS-Schlüssel, die verwendet werden können, auf diejenigen 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 das ARN-Format in der Allgemeine AWS-Referenz.
Der folgende Code instanziiert einen AWS KMS Discovery-Schlüsselbund mit einem Erkennungsfilter, der die KMS-Schlüssel, die er verwenden AWS Encryption SDK kann, auf diejenigen 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 China Regionen befinden, verwenden Sie den aws-cn
Partitionswert. Wenn sich Ihre KMS-Schlüssel 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
-
Im folgenden Beispiel wird Version 4 verwendet. x von AWS Encryption SDK für .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
)
- Rust
-
// Instantiate the AWS Encryption SDK
let esdk_config = AwsEncryptionSdkConfig::builder().build()?;
let esdk_client = esdk_client::Client::from_conf(esdk_config)?;
// Create a AWS KMS client.
let sdk_config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await;
let kms_client = aws_sdk_kms::Client::new(&sdk_config);
// Instantiate the material providers library
let mpl_config = MaterialProvidersConfig::builder().build()?;
let mpl = mpl_client::Client::from_conf(mpl_config)?;
// Create discovery filter
let discovery_filter = DiscoveryFilter::builder()
.account_ids(vec![aws_account_id.to_string()])
.partition("aws".to_string())
.build()?;
// Create the AWS KMS discovery keyring
let discovery_keyring = mpl
.create_aws_kms_discovery_keyring()
.kms_client(kms_client.clone())
.discovery_filter(discovery_filter)
.send()
.await?;
- Go
-
import (
"context"
mpl "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygenerated"
mpltypes "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygeneratedtypes"
client "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygenerated"
esdktypes "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygeneratedtypes"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/kms"
)
// Instantiate the AWS Encryption SDK client
encryptionClient, err := client.NewClient(esdktypes.AwsEncryptionSdkConfig{})
if err != nil {
panic(err)
}
// Create an AWS KMS client
cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
panic(err)
}
kmsClient := kms.NewFromConfig(cfg, func(o *kms.Options) {
o.Region = KmsKeyRegion
})
// Optional: Create an encryption context
encryptionContext := map[string]string{
"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
matProv, err := mpl.NewClient(mpltypes.MaterialProvidersConfig{})
if err != nil {
panic(err)
}
// Create discovery filter
discoveryFilter := mpltypes.DiscoveryFilter{
AccountIds: []string{kmsKeyAccountID},
Partition: "aws",
}
awsKmsDiscoveryKeyringInput := mpltypes.CreateAwsKmsDiscoveryKeyringInput{
KmsClient: kmsClient,
DiscoveryFilter: &discoveryFilter,
}
awsKmsDiscoveryKeyring, err := matProv.CreateAwsKmsDiscoveryKeyring(context.Background(), awsKmsDiscoveryKeyringInput)
if err != nil {
panic(err)
}
Verwenden Sie einen AWS KMS regionalen Discovery-Schlüsselbund
Ein AWS KMS Regional Discovery-Schlüsselbund ist ein Schlüsselbund, der ARNs die KMS-Schlüssel nicht spezifiziert. Stattdessen ermöglicht es die Entschlüsselung AWS Encryption SDK , wobei insbesondere 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 Zeichen 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.
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 in AWS-Verschlüsselungs-SDK for JavaScript und AWS Encryption SDK für.NET verwenden, konfigurieren Sie die Region auf dem Client. AWS KMS Bei diesen AWS Encryption SDK Implementierungen AWS KMS werden KMS-Schlüssel nicht nach Region gefiltert, allerdings schlägt eine Entschlüsselungsanforderung für KMS-Schlüssel außerhalb der angegebenen Region 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 in den angegebenen Partitionen verwendeten KMS-Schlüssel 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 Für .NET gibt es keinen eigenen Schlüsselbund für die regionale Erkennung. 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 von AWS Encryption SDK für .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 eine Region in Ihrer Instanz des AWS KMS Clients angeben (AmazonKeyManagementServiceClient). Diese Konfiguration ist jedoch weniger effizient und potenziell kostspieliger als die Verwendung eines multi-Region-aware Discovery-Schlüsselbunds. Anstatt KMS-Schlüssel vor dem Aufrufen nach Region zu filtern AWS KMS, ruft AWS KMS for.NET jeden verschlüsselten Datenschlüssel auf (bis er einen entschlüsselt) und beschränkt sich darauf, die verwendeten KMS-Schlüssel auf AWS KMS die angegebene Region zu beschränken. AWS Encryption SDK
Im folgenden Beispiel wird Version 4 verwendet. x von AWS Encryption SDK für .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
)
- Rust
-
// Instantiate the AWS Encryption SDK
let esdk_config = AwsEncryptionSdkConfig::builder().build()?;
let esdk_client = esdk_client::Client::from_conf(esdk_config)?;
// Optional: Create an encryption context
let encryption_context = HashMap::from([
("encryption".to_string(), "context".to_string()),
("is not".to_string(), "secret".to_string()),
("but adds".to_string(), "useful metadata".to_string()),
("that can help you".to_string(), "be confident that".to_string()),
("the data you are handling".to_string(), "is what you think it is".to_string()),
]);
// Instantiate the material providers library
let mpl_config = MaterialProvidersConfig::builder().build()?;
let mpl = mpl_client::Client::from_conf(mpl_config)?;
// Create an AWS KMS client
let decrypt_kms_config = aws_sdk_kms::config::Builder::from(&sdk_config)
.region(Region::new(mrk_replica_decrypt_region.clone()))
.build();
let decrypt_kms_client = aws_sdk_kms::Client::from_conf(decrypt_kms_config);
// Create discovery filter
let discovery_filter = DiscoveryFilter::builder()
.account_ids(vec![aws_account_id.to_string()])
.partition("aws".to_string())
.build()?;
// Create the regional discovery keyring
let discovery_keyring = mpl
.create_aws_kms_mrk_discovery_keyring()
.kms_client(decrypt_kms_client)
.region(mrk_replica_decrypt_region)
.discovery_filter(discovery_filter)
.send()
.await?;
- Go
-
import (
"context"
mpl "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygenerated"
mpltypes "aws/aws-cryptographic-material-providers-library/releases/go/mpl/awscryptographymaterialproviderssmithygeneratedtypes"
client "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygenerated"
esdktypes "github.com/aws/aws-encryption-sdk/awscryptographyencryptionsdksmithygeneratedtypes"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/kms"
)
// Instantiate the AWS Encryption SDK client
encryptionClient, err := client.NewClient(esdktypes.AwsEncryptionSdkConfig{})
if err != nil {
panic(err)
}
// Create an AWS KMS client
cfg, err := config.LoadDefaultConfig(context.TODO())
if err != nil {
panic(err)
}
kmsClient := kms.NewFromConfig(cfg, func(o *kms.Options) {
o.Region = KmsKeyRegion
})
// Optional: Create an encryption context
encryptionContext := map[string]string{
"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",
}
// Create discovery filter
discoveryFilter := mpltypes.DiscoveryFilter{
AccountIds: []string{awsAccountID},
Partition: "aws",
}
// Create the regional discovery keyring
awsKmsMrkDiscoveryInput := mpltypes.CreateAwsKmsMrkDiscoveryKeyringInput{
KmsClient: kmsClient,
Region: alternateRegionMrkKeyRegion,
DiscoveryFilter: &discoveryFilter,
}
awsKmsMrkDiscoveryKeyring, err := matProv.CreateAwsKmsMrkDiscoveryKeyring(context.Background(), awsKmsMrkDiscoveryInput)
if err != nil {
panic(err)
}
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
' }
})