AWS KMS portachiavi - AWS Encryption SDK

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

AWS KMS portachiavi

Un AWS KMS portachiavi utilizza la crittografia simmetrica AWS KMS keysper generare, crittografare e decrittografare le chiavi di dati. AWS Key Management Service (AWS KMS) protegge le chiavi KMS ed esegue operazioni crittografiche entro i confini FIPS. Ti consigliamo di utilizzare un AWS KMS portachiavi o un portachiavi con proprietà di sicurezza simili, quando possibile.

È possibile utilizzare una chiave AWS KMS multiregionale in un portachiavi o in un provider di AWS KMS chiavi master a partire dalla versione 2.3. x della versione AWS Encryption SDK 3.0. x della CLI di AWS crittografia. Per dettagli ed esempi sull'utilizzo del nuovo simbolo multiregionale, vedere. Utilizzo di più regioni AWS KMS keys Per informazioni sulle chiavi multiregionali, consulta Uso delle chiavi multiregionali nella Guida per gli sviluppatori.AWS Key Management Service

Nota

Versione 4. x di AWS Encryption SDK per .NET e versione 3. x di queste SDK di crittografia AWS per Java sono le uniche implementazioni del linguaggio di programmazione che supportano AWS KMS portachiavi che utilizzano RSA asimmetrico. AWS KMS keys

Se si tenta di includere una chiave KMS asimmetrica in un portachiavi di crittografia in qualsiasi altra implementazione linguistica, la chiamata encrypt ha esito negativo. Se la includi in un portachiavi di decrittografia, viene ignorata.

Tutte le menzioni relative ai portachiavi KMS nel riquadro si riferiscono ai portachiavi. AWS Encryption SDK AWS KMS

AWS KMS i portachiavi possono includere due tipi di chiavi avvolgenti:

  • Chiave generatrice: genera una chiave di dati in testo semplice e la crittografa. Un portachiavi che crittografa i dati deve avere una chiave generatrice.

  • Chiavi aggiuntive: crittografa la chiave di dati in testo semplice generata dalla chiave del generatore. AWS KMS I portachiavi possono avere zero o più chiavi aggiuntive.

Durante la crittografia, il AWS KMS portachiavi utilizzato deve avere una chiave generatrice. Durante la decrittografia, la chiave del generatore è facoltativa e la distinzione tra le chiavi dei generatori e le chiavi aggiuntive viene ignorata.

Quando un portachiavi di AWS KMS crittografia ha una sola AWS KMS chiave, tale chiave viene utilizzata per generare e crittografare la chiave dati.

Come tutti i portachiavi, i AWS KMS portachiavi possono essere utilizzati indipendentemente o in un portachiavi multiplo con altri portachiavi dello stesso tipo o di un tipo diverso.

AWS KMS Autorizzazioni richieste per i portachiavi

AWS Encryption SDK Non richiede un Account AWS e non dipende da nessuno. Servizio AWS Tuttavia, per utilizzare un AWS KMS portachiavi, sono necessarie le seguenti autorizzazioni Account AWS minime sul AWS KMS keys portachiavi.

Per informazioni dettagliate sulle autorizzazioni per AWS KMS keys, consulta Autenticazione e controllo degli accessi nella Guida per gli sviluppatori.AWS Key Management Service

Identificazione AWS KMS keys in un portachiavi AWS KMS

Un AWS KMS portachiavi può includerne uno o più. AWS KMS keys Per specificare un elemento AWS KMS key in un AWS KMS portachiavi, utilizzate un identificatore di AWS KMS chiave supportato. Gli identificatori di chiave che è possibile utilizzare per identificare un elemento AWS KMS key in un portachiavi variano a seconda dell'operazione e dell'implementazione del linguaggio. Per informazioni dettagliate sugli identificatori chiave di un AWS KMS key, consulta Key Identifiers nella Developer Guide.AWS Key Management Service

Come procedura consigliata, utilizzate l'identificatore di chiave più specifico e pratico per la vostra attività.

  • In un portachiavi di crittografia per SDK di crittografia AWS per C, è possibile utilizzare una chiave ARN o un alias ARN per identificare le chiavi KMS. In tutte le altre implementazioni linguistiche, puoi utilizzare un ID chiave, un ARN di chiave, un nome alias o un alias ARN per crittografare i dati.

  • In un keyring di decrittazione devi utilizzare un ARN di chiave per identificare le AWS KMS keys. Questo requisito si applica a tutte le implementazioni di linguaggio di AWS Encryption SDK. Per informazioni dettagliate, vedi Selezione dei tasti di avvolgimento.

  • In un keyring utilizzato per la crittografia e la decrittazione devi utilizzare un ARN di chiave per identificare le AWS KMS keys. Questo requisito si applica a tutte le implementazioni di linguaggio di AWS Encryption SDK.

Se si specifica un nome alias o un alias ARN per una chiave KMS in un portachiavi di crittografia, l'operazione di crittografia salva la chiave ARN attualmente associata all'alias nei metadati della chiave dati crittografata. Non salva l'alias. Le modifiche all'alias non influiscono sulla chiave KMS utilizzata per decrittografare le chiavi di dati crittografate.

Creazione di un portachiavi per la crittografia AWS KMS

È possibile configurare ogni AWS KMS portachiavi con uno AWS KMS key o più portachiavi nello stesso e AWS KMS keys in modo diverso Account AWS . Regioni AWS AWS KMS keys Devono essere chiavi di crittografia simmetriche (SYMMETRIC_DEFAULT). È inoltre possibile utilizzare una chiave KMS multiregionale con crittografia simmetrica. Come con tutti i portachiavi, puoi utilizzare uno o più AWS KMS portachiavi in un portachiavi multiplo.

Quando si crea un AWS KMS portachiavi per crittografare i dati, è necessario specificare una chiave generatrice, AWS KMS key che viene utilizzata per generare una chiave di dati in testo semplice e crittografarla. La chiave dati non è matematicamente correlata alla chiave KMS. Quindi, se lo desideri, puoi specificarne altre AWS KMS keys che crittografano la stessa chiave di dati in testo normale.

Per decrittografare il messaggio crittografato protetto da questo portachiavi, il portachiavi utilizzato deve includere almeno uno dei messaggi AWS KMS keys definiti nel portachiavi, altrimenti no. AWS KMS keys(Un AWS KMS portachiavi con no AWS KMS keys è noto come portachiavi Discovery.)AWS KMS

Nelle implementazioni AWS Encryption SDK linguistiche diverse dalla SDK di crittografia AWS per C, tutte le chiavi di inserimento in un portachiavi di crittografia o in un portachiavi multiplo devono essere in grado di crittografare la chiave dati. Se una chiave di wrapping non riesce a crittografare, il metodo encrypt fallisce. Di conseguenza, il chiamante deve disporre delle autorizzazioni necessarie per tutte le chiavi del portachiavi. Se si utilizza un portachiavi Discovery per crittografare i dati, da solo o in un portachiavi multiplo, l'operazione di crittografia non riesce. L'eccezione è la SDK di crittografia AWS per C, in cui l'operazione di crittografia ignora un portachiavi di rilevamento standard, ma ha esito negativo se si specifica un portachiavi di rilevamento multiarea, da solo o in un portachiavi multiregionale.

Gli esempi seguenti creano un AWS KMS portachiavi con una chiave generatrice e una chiave aggiuntiva. Questi esempi utilizzano gli ARN chiave per identificare le chiavi KMS. Si tratta di una procedura ottimale per i AWS KMS portachiavi utilizzati per la crittografia e un requisito per i AWS KMS portachiavi utilizzati per la decrittografia. Per informazioni dettagliate, vedi Identificazione AWS KMS keys in un portachiavi AWS KMS.

C

Per identificare un elemento AWS KMS key in un portachiavi di crittografia in SDK di crittografia AWS per C, specificare una chiave ARN o un alias ARN. In un keyring di decrittografia devi utilizzare un ARN di chiave. Per informazioni dettagliate, vedi Identificazione AWS KMS keys in un portachiavi AWS KMS.

Per un esempio completo, vedi 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

Per creare un AWS KMS portachiavi con una o più AWS KMS chiavi in formato.NET, create un portachiavi multiplo. AWS Encryption SDK Il portachiavi AWS Encryption SDK per .NET include un portachiavi multiplo solo per le chiavi. AWS KMS

Quando si specifica un AWS KMS key per un portachiavi di crittografia in per.NET, è possibile utilizzare qualsiasi identificatore di chiave valido: un ID chiave, un ARN di chiave, un nome alias o un alias ARN. AWS Encryption SDK Per informazioni su come identificarlo in un portachiavi, consulta. AWS KMS keys AWS KMS Identificazione AWS KMS keys in un portachiavi AWS KMS

L'esempio seguente utilizza la versione 4. x di the per.NET AWS Encryption SDK per creare un AWS KMS portachiavi con una chiave generatrice e chiavi aggiuntive. Per un esempio completo, vedi 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

Quando si specifica un AWS KMS key per un portachiavi di crittografia in SDK di crittografia AWS per JavaScript, è possibile utilizzare qualsiasi identificatore di chiave valido: un ID di chiave, un ARN di chiave, un nome alias o un alias ARN. Per informazioni sull' AWS KMS keys identificazione di un portachiavi, vedere. AWS KMS Identificazione AWS KMS keys in un portachiavi AWS KMS

Per un esempio completo, vedi kms_simple.ts nel repository in. SDK di crittografia AWS per JavaScript GitHub

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

Quando si specifica un AWS KMS key per un portachiavi di crittografia in SDK di crittografia AWS per JavaScript, è possibile utilizzare qualsiasi identificatore di chiave valido: un ID di chiave, un ARN di chiave, un nome alias o un alias ARN. Per informazioni sull' AWS KMS keys identificazione di un portachiavi, vedere. AWS KMS Identificazione AWS KMS keys in un portachiavi AWS KMS

Per un esempio completo, vedi kms_simple.ts nel repository in. SDK di crittografia AWS per JavaScript GitHub

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

Per creare un AWS KMS portachiavi con una o più chiavi in, crea un AWS KMS portachiavi multiplo. SDK di crittografia AWS per Java SDK di crittografia AWS per Java Include un portachiavi multiplo solo per le chiavi. AWS KMS

Quando si specifica un AWS KMS key per un portachiavi di crittografia in SDK di crittografia AWS per Java, è possibile utilizzare qualsiasi identificatore di chiave valido: un ID di chiave, un ARN di chiave, un nome alias o un alias ARN. Per informazioni sull' AWS KMS keys identificazione di un portachiavi, vedere. AWS KMS Identificazione AWS KMS keys in un portachiavi AWS KMS

Per un esempio completo, consulta BasicEncryptionKeyringExample.java nel SDK di crittografia AWS per Java repository in. 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);

Creazione di un AWS KMS portachiavi per la decrittografia

È inoltre necessario specificare un AWS KMS portachiavi quando si decrittografa il messaggio crittografato che restituisce. AWS Encryption SDK Se il portachiavi di decrittografia lo specifica AWS KMS keys, AWS Encryption SDK utilizzerà solo quelle chiavi di avvolgimento per decrittografare le chiavi di dati crittografate nel messaggio crittografato. (Puoi anche usare un portachiavi AWS KMS Discovery, che non ne specifica alcuna.) AWS KMS keys

Durante la decrittografia, AWS Encryption SDK cerca nel AWS KMS portachiavi un oggetto in grado di decrittografare una AWS KMS key delle chiavi di dati crittografate. In particolare, AWS Encryption SDK utilizza lo schema seguente per ogni chiave di dati crittografata in un messaggio crittografato.

  • AWS Encryption SDK Ottiene la chiave ARN di chi AWS KMS key ha crittografato la chiave dati dai metadati del messaggio crittografato.

  • AWS Encryption SDK Cerca nel portachiavi di decrittografia un ARN AWS KMS key con una chiave corrispondente.

  • Se trova un ARN AWS KMS key con una chiave ARN corrispondente nel portachiavi, AWS Encryption SDK chiede di utilizzare la chiave KMS AWS KMS per decrittografare la chiave dati crittografata.

  • In caso contrario, passa alla chiave di dati crittografata successiva, se presente.

AWS Encryption SDK Non tenta mai di decrittografare una chiave dati crittografata a meno che la chiave ARN della AWS KMS key chiave crittografata non sia inclusa nel portachiavi di decrittografia. Se il portachiavi di decrittografia non include gli ARN di nessuna delle chiavi di dati AWS KMS keys che hanno crittografato una delle chiavi di dati, fallisce la chiamata di decrittografia senza mai chiamare. AWS Encryption SDK AWS KMS

A partire dalla versione 1.7. x, quando si decrittografa una chiave di dati crittografata, passa AWS Encryption SDK sempre la chiave ARN del AWS KMS key al KeyId parametro dell'operazione Decrypt. AWS KMS Identificare il AWS KMS key momento della decrittografia è una procedura AWS KMS consigliata che garantisce la decrittografia della chiave di dati crittografata con la chiave di wrapping che si intende utilizzare.

Una chiamata di decrittografia con un AWS KMS portachiavi ha esito positivo quando almeno uno dei componenti del portachiavi di decrittografia è AWS KMS key in grado di decrittografare una delle chiavi di dati crittografate nel messaggio crittografato. Inoltre, l'intermediario deve avere l'autorizzazione kms:Decrypt per la AWS KMS key. Questo comportamento consente di crittografare i dati relativi a più account Regioni AWS e AWS KMS keys in diversi account, ma fornisce un portachiavi di decrittografia più limitato e personalizzato per un particolare account, regione, utente, gruppo o ruolo.

Quando si specifica una chiave AWS KMS key in un portachiavi di decrittografia, è necessario utilizzare la relativa chiave ARN. Altrimenti, non viene riconosciuto AWS KMS key . Per informazioni su come trovare l'ARN chiave, consulta Finding the Key ID and ARN nella Developer Guide.AWS Key Management Service

Nota

Se un keyring di crittografia viene riutilizzato per la decrittazione assicurati che le AWS KMS keys nel keyring siano identificate dai relativi ARN di chiave.

Ad esempio, il seguente AWS KMS portachiavi include solo la chiave aggiuntiva utilizzata nel portachiavi di crittografia. Tuttavia, invece di fare riferimento alla chiave aggiuntiva tramite il relativo aliasalias/exampleAlias, l'esempio utilizza l'ARN della chiave aggiuntiva come richiesto dalle chiamate di decrittografia.

Puoi utilizzare questo keyring per decrittare un messaggio crittografato sia con la chiave generatore che con la chiave aggiuntiva, a condizione che hai l'autorizzazione per utilizzare la chiave aggiuntiva per decrittare i dati.

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

Poiché questo portachiavi di decrittografia include solo una AWS KMS chiave, nell'esempio viene utilizzato il CreateAwsKmsKeyring() metodo con un'istanza del relativo oggetto. CreateAwsKmsKeyringInput Per creare un AWS KMS portachiavi con una sola AWS KMS chiave, è possibile utilizzare un portachiavi a chiave singola o multipla. Per informazioni dettagliate, vedi Crittografia dei dati in per.NET AWS Encryption SDK. L'esempio seguente utilizza la versione 4. x di a per.NET AWS Encryption SDK per creare un AWS KMS portachiavi per la decrittografia.

// 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
const clientProvider = getClient(KMS, { credentials }) const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321' const keyring = new KmsKeyringBrowser({ clientProvider, keyIds: [additionalKey] })
JavaScript Node.js
const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321' const keyring = new KmsKeyringNode({ keyIds: [additionalKey] })
Java

Poiché questo portachiavi di decrittografia include solo una AWS KMS chiave, nell'esempio viene utilizzato il CreateAwsKmsKeyring() metodo con un'istanza del relativo oggetto. CreateAwsKmsKeyringInput Per creare un AWS KMS portachiavi con una sola AWS KMS chiave, è possibile utilizzare un portachiavi a chiave singola o multipla.

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

È inoltre possibile utilizzare un AWS KMS portachiavi che specifica una chiave generatrice per la decrittografia, come la seguente. Durante la decrittografia, AWS Encryption SDK ignora la distinzione tra le chiavi del generatore e le chiavi aggiuntive. Può utilizzare qualsiasi delle opzioni specificate AWS KMS keys per decrittografare una chiave di dati crittografata. La chiamata a ha AWS KMS esito positivo solo quando il chiamante è autorizzato a utilizzarla per decrittografare i AWS KMS key dati.

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

L'esempio seguente utilizza la versione 4. x del AWS Encryption SDK per .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
const clientProvider = getClient(KMS, { credentials }) const keyring = new KmsKeyringBrowser({ clientProvider, generatorKeyId, keyIds: [additionalKey, otherKey] })
JavaScript Node.js
const keyring = new KmsKeyringNode({ generatorKeyId, keyIds: [additionalKey, otherKey] })
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);

A differenza di un portachiavi di crittografia che utilizza tutti gli elementi specificati AWS KMS keys, è possibile decrittografare un messaggio crittografato utilizzando un portachiavi di decrittografia AWS KMS keys che include messaggi non correlati al messaggio crittografato e AWS KMS keys che il chiamante non è autorizzato a utilizzare. Se una chiamata di decrittazione a AWS KMS non riesce, ad esempio quando l'intermediario non ha le autorizzazioni necessarie, AWS Encryption SDK passa semplicemente alla chiave di dati crittografata successiva.

Utilizzo di un portachiavi Discovery AWS KMS

Durante la decrittografia, è consigliabile specificare le chiavi di wrapping che possono utilizzare. AWS Encryption SDK Per seguire questa procedura ottimale, utilizzate un portachiavi di AWS KMS decrittografia che limiti le chiavi di AWS KMS wrapping a quelle specificate. Tuttavia, puoi anche creare un portachiavi AWS KMS Discovery, ovvero un AWS KMS portachiavi che non specifichi alcuna chiave di avvolgimento.

AWS Encryption SDK Fornisce un portachiavi AWS KMS Discovery standard e un portachiavi Discovery per chiavi multiregionali. AWS KMS Per informazioni sull'utilizzo delle chiavi multiregionali con, vedere. AWS Encryption SDKUtilizzo di più regioni AWS KMS keys

Poiché non specifica alcuna chiave di wrapping, un portachiavi Discovery non può crittografare i dati. Se si utilizza un portachiavi Discovery per crittografare i dati, da solo o in un portachiavi multiplo, l'operazione di crittografia non riesce. L'eccezione è la SDK di crittografia AWS per C, in cui l'operazione di crittografia ignora un portachiavi di rilevamento standard, ma ha esito negativo se si specifica un portachiavi di rilevamento multiarea, da solo o in un portachiavi multiregionale.

Durante la decrittografia, un portachiavi Discovery consente di chiedere AWS KMS di AWS Encryption SDK decrittografare qualsiasi chiave di dati crittografata utilizzando quella che l'ha crittografata, indipendentemente da chi la possiede o ha accesso a AWS KMS key tale chiave. AWS KMS key La chiamata ha esito positivo solo quando il chiamante dispone dell'autorizzazione per. kms:Decrypt AWS KMS key

Importante

Se includi un portachiavi AWS KMS Discovery in un portachiavi multiplo di decrittografia, il portachiavi Discovery ha la precedenza su tutte le restrizioni relative alle chiavi KMS specificate dagli altri portachiavi del portachiavi multiplo. Il portachiavi multiplo si comporta come il portachiavi meno restrittivo. Un portachiavi AWS KMS Discovery non ha alcun effetto sulla crittografia se utilizzato da solo o in un portachiavi multiplo.

AWS Encryption SDK Fornisce un portachiavi AWS KMS Discovery per una maggiore comodità. ma, se possibile, consigliamo di utilizzare un keyring di portata più limitata per i motivi seguenti.

  • Autenticità: un portachiavi AWS KMS Discovery può utilizzare qualsiasi chiave utilizzata per crittografare una chiave di dati nel messaggio crittografato, solo in modo AWS KMS key che il chiamante abbia il permesso di utilizzarla per decrittografarla. AWS KMS key anche se potrebbe non essere la AWS KMS key che intende impiegare. Ad esempio, una delle chiavi di dati crittografate potrebbe essere stata crittografata con un metodo meno sicuro che chiunque può utilizzare. AWS KMS key

  • Latenza e prestazioni: un portachiavi AWS KMS Discovery potrebbe essere sensibilmente più lento rispetto ad altri portachiavi perché AWS Encryption SDK tenta di decrittografare tutte le chiavi di dati crittografate, comprese quelle crittografate AWS KMS keys in altre regioni, Account AWS e AWS KMS keys che il chiamante non è autorizzato a utilizzare per la decrittografia.

Se utilizzi un portachiavi di rilevamento, ti consigliamo di utilizzare un filtro di rilevamento per limitare le chiavi KMS che possono essere utilizzate a quelle contenute in partizioni e specifiche. Account AWS I filtri Discovery sono supportati nelle versioni 1.7. x e versioni successive di AWS Encryption SDK. Per informazioni su come trovare l'ID e la partizione dell'account, consulta I tuoi Account AWS identificatori e il formato ARN in. Riferimenti generali di AWS

Il codice seguente crea un'istanza di un portachiavi di AWS KMS rilevamento con un filtro di rilevamento che limita le chiavi KMS AWS Encryption SDK utilizzabili a quelle presenti nella partizione e nell'account di esempio 111122223333. aws

Prima di utilizzare questo codice, sostituisci i valori di esempio Account AWS e di partizione con valori validi per la tua partizione and. Account AWS Se le tue chiavi KMS si trovano nelle regioni cinesi, usa il valore della aws-cn partizione. Se le tue chiavi KMS sono inserite AWS GovCloud (US) Regions, usa il valore della aws-us-gov partizione. Per tutti gli altri Regioni AWS, usa il valore della aws partizione.

C

Per un esempio completo, vedi: 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

L'esempio seguente utilizza la versione 4. x del AWS Encryption SDK per .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

In JavaScript, è necessario specificare in modo esplicito la proprietà discovery.

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

In JavaScript, è necessario specificare in modo esplicito la proprietà discovery.

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);

Utilizzo di un portachiavi AWS KMS Regional Discovery

Un portachiavi AWS KMS Regional Discovery è un portachiavi che non specifica gli ARN delle chiavi KMS. Invece, consente la decrittografia utilizzando solo AWS Encryption SDK le chiavi KMS in particolare. Regioni AWS

Quando si decrittografa con un portachiavi AWS KMS Regional Discovery, AWS Encryption SDK decripta qualsiasi chiave di dati crittografata che è stata crittografata con un codice specificato. AWS KMS key Regione AWS Per avere successo, il chiamante deve disporre dell'kms:Decryptautorizzazione su almeno una delle chiavi di dati specificate Regione AWS che hanno AWS KMS keys crittografato una chiave dati.

Come altri portachiavi Discovery, il portachiavi Discovery regionale non ha alcun effetto sulla crittografia. Funziona solo quando si decifrano i messaggi crittografati. Se si utilizza un portachiavi Regional Discovery in un portachiavi multiplo utilizzato per la crittografia e la decrittografia, è efficace solo durante la decrittografia. Se si utilizza un portachiavi di rilevamento multiregionale per crittografare i dati, da solo o in un portachiavi multiregionale, l'operazione di crittografia non riesce.

Importante

Se includi un portachiavi di rilevamento AWS KMS regionale in un portachiavi multiplo di decrittografia, il portachiavi di rilevamento regionale ha la precedenza su tutte le restrizioni relative alle chiavi KMS specificate dagli altri portachiavi del portachiavi multiplo. Il portachiavi multiplo si comporta come il portachiavi meno restrittivo. Un portachiavi AWS KMS Discovery non ha alcun effetto sulla crittografia se utilizzato da solo o in un portachiavi multiplo.

Il portachiavi Regional Discovery SDK di crittografia AWS per C tenta di decriptare solo con chiavi KMS nella regione specificata. Quando si utilizza un portachiavi di rilevamento in SDK di crittografia AWS per JavaScript e AWS Encryption SDK per .NET, si configura la regione sul client. AWS KMS Queste AWS Encryption SDK implementazioni non filtrano le chiavi KMS per regione, ma AWS KMS falliranno una richiesta di decrittografia delle chiavi KMS al di fuori della regione specificata.

Se utilizzi un portachiavi di rilevamento, ti consigliamo di utilizzare un filtro di rilevamento per limitare le chiavi KMS utilizzate nella decrittografia a quelle nelle partizioni e nelle partizioni specificate. Account AWS I filtri Discovery sono supportati nelle versioni 1.7. x e versioni successive di AWS Encryption SDK.

Ad esempio, il codice seguente crea un portachiavi di scoperta AWS KMS regionale con un filtro di scoperta. Questo portachiavi limita le AWS Encryption SDK chiavi KMS nel conto 111122223333 nella regione Stati Uniti occidentali (Oregon) (us-west-2).

C

Per esaminare un esempio che mostra questo keyring e il metodo create_kms_client, consulta 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

Il portachiavi AWS Encryption SDK for .NET non dispone di un portachiavi dedicato alla scoperta regionale. Tuttavia, è possibile utilizzare diverse tecniche per limitare le chiavi KMS utilizzate durante la decrittografia a una particolare regione.

Il modo più efficiente per limitare le regioni in un portachiavi di rilevamento consiste nell'utilizzare un portachiavi di rilevamento che supporta più regioni, anche se i dati sono stati crittografati utilizzando solo chiavi a regione singola. Quando incontra chiavi a regione singola, il portachiavi che supporta più regioni non utilizza alcuna funzionalità multiregionale.

Il portachiavi restituito dal metodo filtra le chiavi KMS per regione prima della chiamataCreateAwsKmsMrkDiscoveryKeyring(). AWS KMS Invia una richiesta di decrittografia AWS KMS solo quando la chiave di dati crittografata è stata crittografata da una chiave KMS nella regione specificata dal parametro nell'Regionoggetto. CreateAwsKmsMrkDiscoveryKeyringInput

Gli esempi seguenti utilizzano la versione 4. x del AWS Encryption SDK per .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);

Puoi anche limitare le chiavi KMS a uno specifico Regione AWS specificando una regione nell'istanza del AWS KMS client () AmazonKeyManagementServiceClient. Tuttavia, questa configurazione è meno efficiente e potenzialmente più costosa rispetto all'utilizzo di un portachiavi di rilevamento con riconoscimento multiregionale. Invece di filtrare le chiavi KMS AWS Encryption SDK per regione prima della chiamata AWS KMS, fo.NET chiama ogni chiave di dati crittografata (finché non ne decripta una) e si affida AWS KMS per limitare le chiavi KMS utilizzate AWS KMS alla regione specificata.

L'esempio seguente utilizza la versione 4. x del AWS Encryption SDK per .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
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

Per visualizzare questo keyring e la funzione limitRegions in un esempio di lavoro, vedi kms_regional_discovery.ts.

const discovery = true const clientProvider = limitRegions(['us-west-2'], getKmsClient) const keyring = new KmsKeyringNode({ clientProvider, discovery, discoveryFilter: { accountIDs: ['111122223333'], partition: 'aws' } })
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);

Esporta SDK di crittografia AWS per JavaScript anche una excludeRegions funzione per Node.js e il browser. Questa funzione crea un portachiavi di rilevamento AWS KMS regionale che omette AWS KMS keys in aree particolari. L'esempio seguente crea un portachiavi AWS KMS Regional Discovery che può essere utilizzato AWS KMS keys nell'account 111122223333 in tutti gli Stati Uniti Regione AWS ad eccezione di Stati Uniti orientali (Virginia settentrionale) (us-east-1).

Non SDK di crittografia AWS per C dispone di un metodo analogo, ma è possibile implementarne uno creandone uno personalizzato. ClientSupplier

Questo esempio mostra il codice per Node.js.

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