AWS KMS portachiavi - AWS SDK per la crittografia del database

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

La nostra libreria di crittografia lato client è stata rinominata Database Encryption SDK. AWS Questa guida per sviluppatori fornisce ancora informazioni sul DynamoDB Encryption Client.

Un AWS KMS portachiavi utilizza la crittografia simmetrica o RSA asimmetrica per generare, crittografare e AWS KMS keysdecrittografare 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.

Puoi anche utilizzare una chiave KMS simmetrica multiregionale in un portachiavi. AWS KMS Per ulteriori dettagli ed esempi di utilizzo di più regioni, vedere. AWS KMS keysUtilizzo di più regioni AWS KMS keys Per informazioni sulle chiavi multiregionali, consulta Uso delle chiavi multiregionali nella Guida per gli AWS Key Management Service sviluppatori.

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.

È necessario disporre di una chiave generatrice per crittografare i record. Quando un AWS KMS portachiavi 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

Il AWS Database Encryption SDK non richiede 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, consulta Authentication and access control nella Developer Guide. AWS KMS keysAWS 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 an 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à.

  • Per crittografare con un AWS KMS portachiavi, puoi utilizzare un ID chiave, un ARN di chiave, un nome alias o un alias ARN per crittografare i dati.

    Nota

    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.

  • Per decrittografare con un AWS KMS portachiavi, è necessario utilizzare una chiave ARN per l'identificazione. AWS KMS keys Per informazioni dettagliate, vedi Selezione delle chiavi di avvolgimento.

  • In un keyring utilizzato per la crittografia e la decrittazione devi utilizzare un ARN di chiave per identificare le AWS KMS keys.

Durante la decrittografia, AWS Database Encryption SDK cerca nel portachiavi una soluzione in AWS KMS key grado di decrittografare una delle AWS KMS chiavi di dati crittografate. In particolare, AWS Database Encryption SDK utilizza lo schema seguente per ogni chiave di dati crittografata nella descrizione del materiale.

  • Il AWS Database Encryption SDK ottiene l'ARN della AWS KMS key chiave che ha crittografato la chiave dati dai metadati della descrizione del materiale.

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

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

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

Creazione di un portachiavi 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 key Deve essere una chiave di crittografia simmetrica (SYMMETRIC_DEFAULT) o una chiave RSA KMS asimmetrica. È inoltre possibile utilizzare una chiave KMS multiregionale con crittografia simmetrica. È possibile utilizzare uno o più AWS KMS portachiavi in un portachiavi multiplo.

È possibile creare un AWS KMS portachiavi che crittografa e decrittografa i dati oppure creare AWS KMS portachiavi specifici per crittografare o decrittografare. 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 un campo crittografato protetto da questo portachiavi, il portachiavi di decrittografia utilizzato deve includere almeno uno dei valori definiti nel portachiavi, altrimenti no. AWS KMS keys AWS KMS keys(Un AWS KMS portachiavi senza è noto come portachiavi Discovery. AWS KMS keys )AWS KMS

Tutte le chiavi di inserimento in un portachiavi crittografico 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 di crittografia 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.

Gli esempi seguenti utilizzano il CreateAwsKmsMrkMultiKeyring metodo per creare un AWS KMS portachiavi con una chiave KMS di crittografia simmetrica. Il CreateAwsKmsMrkMultiKeyring metodo crea automaticamente il AWS KMS client e garantisce che il portachiavi gestisca correttamente sia le chiavi a regione singola che a più regioni. Questi esempi utilizzano una chiave ARN per identificare le chiavi KMS. Per maggiori dettagli, consulta Identificazione AWS KMS keys in un portachiavi AWS KMS.

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyArn) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsMrkMultiKeyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyArn }; var awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);

Gli esempi seguenti utilizzano il CreateAwsKmsRsaKeyring metodo per creare un AWS KMS portachiavi con una chiave RSA KMS asimmetrica. Per creare un portachiavi RSA asimmetrico, fornisci i seguenti valori. AWS KMS

  • kmsClient: crea un nuovo client AWS KMS

  • kmsKeyID: la chiave ARN che identifica la tua chiave RSA KMS asimmetrica

  • publicKey: a ByteBuffer di un file PEM con codifica UTF-8 che rappresenta la chiave pubblica della chiave a cui hai passato kmsKeyID

  • encryptionAlgorithm: l'algoritmo di crittografia deve essere o RSAES_OAEP_SHA_256 RSAES_OAEP_SHA_1

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsRsaKeyringInput createAwsKmsRsaKeyringInput = CreateAwsKmsRsaKeyringInput.builder() .kmsClient(KmsClient.create()) .kmsKeyId(rsaKMSKeyArn) .publicKey(publicKey) .encryptionAlgorithm(EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256) .build(); IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsRsaKeyringInput = new CreateAwsKmsRsaKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = rsaKMSKeyArn, PublicKey = publicKey, EncryptionAlgorithm = EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256 }; IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);

Utilizzo di più regioni AWS KMS keys

È possibile utilizzare più regioni AWS KMS keys come chiavi di wrapping nel AWS Database Encryption SDK. Se si esegue la crittografia con una chiave multiregionale in una Regione AWS, è possibile decrittografare utilizzando una chiave multiregionale correlata in un'altra. Regione AWS

Le chiavi KMS multiregionali sono un insieme di chiavi diverse Regioni AWS che hanno lo stesso AWS KMS keys materiale chiave e lo stesso ID di chiave. Puoi usare queste chiavi correlate come se fossero la stessa chiave in diverse regioni. Le chiavi multiregionali supportano scenari di disaster recovery e backup comuni che richiedono la crittografia in una regione e la decrittografia in un'altra regione senza effettuare una chiamata interregionale a. AWS KMSPer informazioni sulle chiavi multiregionali, consulta Using Multiregion Keys nella Developer Guide.AWS Key Management Service

Per supportare le chiavi multiregionali, il AWS Database Encryption SDK include portachiavi compatibili con più regioni. AWS KMS Il CreateAwsKmsMrkMultiKeyring metodo supporta sia chiavi a regione singola che a più regioni.

  • Per le chiavi a regione singola, il simbolo che riconosce più regioni si comporta esattamente come il portachiavi a regione singola. AWS KMS Tenta di decrittografare il testo cifrato solo con la chiave a regione singola che ha crittografato i dati. Per semplificare la tua esperienza AWS KMS con il portachiavi, ti consigliamo di utilizzare questo CreateAwsKmsMrkMultiKeyring metodo ogni volta che utilizzi una chiave KMS con crittografia simmetrica.

  • Per le chiavi multiregionali, il simbolo che supporta più regioni tenta di decrittografare il testo cifrato con la stessa chiave multiregionale che ha crittografato i dati o con la relativa chiave multiregionale nella regione specificata.

Nei portachiavi con riconoscimento multiregionale che utilizzano più di una chiave KMS, puoi specificare più chiavi singole e multiregionali. Tuttavia, puoi specificare solo una chiave per ogni set di chiavi multiregionali correlate. Se specificate più di un identificatore di chiave con lo stesso ID chiave, la chiamata al costruttore ha esito negativo.

Gli esempi seguenti creano un AWS KMS portachiavi con una chiave KMS multiregionale. Gli esempi specificano una chiave multiregionale come chiave del generatore e una chiave a regione singola come chiave secondaria.

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput createAwsKmsMrkMultiKeyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(multiRegionKeyArn) .kmsKeyIds(Collections.singletonList(kmsKeyArn)) .build(); IKeyring awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsMrkMultiKeyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = multiRegionKeyArn, KmsKeyIds = new List<String> { kmsKeyArn } }; var awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);

Quando si utilizzano AWS KMS portachiavi multiregione, è possibile decrittografare il testo cifrato in modalità rigorosa o in modalità discovery. Per decrittografare il testo cifrato in modalità rigorosa, crea un'istanza del simbolo multiregionale con la chiave ARN della chiave multiregione correlata nella regione in cui stai decrittografando il testo cifrato. Se si specifica la chiave ARN di una chiave multiregionale correlata in una regione diversa (ad esempio, la regione in cui il record è stato crittografato), il simbolo che supporta più regioni effettuerà una chiamata interregionale a tale scopo. AWS KMS key

Durante la decrittografia in modalità rigorosa, il simbolo che supporta più regioni richiede una chiave ARN. Accetta solo una chiave ARN da ogni set di chiavi multiregione correlate.

È inoltre possibile decrittografare in modalità di scoperta con chiavi multiregionali. AWS KMS Durante la decrittografia in modalità di rilevamento, non ne viene specificata alcuna. AWS KMS keys(Per informazioni sui portachiavi Single-Region AWS KMS Discovery, consulta.) Utilizzo di un portachiavi Discovery AWS KMS

Se la crittografia è stata eseguita con una chiave multiregionale, il simbolo che supporta più regioni in modalità di individuazione tenterà di decrittografare utilizzando una chiave multiregionale correlata nella regione locale. Se non ne esiste nessuna, la chiamata ha esito negativo. In modalità di individuazione, AWS Database Encryption SDK non tenterà di effettuare una chiamata interregionale per la chiave multiregionale utilizzata per la crittografia.

Utilizzo di un portachiavi Discovery AWS KMS

Durante la decrittografia, è consigliabile specificare le chiavi di wrapping che il AWS Database Encryption SDK può utilizzare. Per seguire questa procedura ottimale, utilizza 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.

Il AWS Database Encryption SDK fornisce un portachiavi di AWS KMS rilevamento standard e un portachiavi di rilevamento per chiavi multiregionali. AWS KMS Per informazioni sull'utilizzo di chiavi multiregionali con AWS Database Encryption SDK, consulta. Utilizzo 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.

Durante la decrittografia, un portachiavi Discovery consente al AWS Database Encryption SDK di chiedere AWS KMS di decrittografare qualsiasi chiave di dati crittografata utilizzando quella chiave 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. Se si utilizza un portachiavi Discovery per crittografare i dati, da solo o in un portachiavi multiplo, l'operazione di crittografia non riesce

Il AWS Database Encryption SDK fornisce un portachiavi di rilevamento per comodità. AWS KMS 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 AWS KMS key chiave utilizzata per crittografare una chiave di dati nella descrizione del materiale, purché il chiamante sia autorizzato a utilizzarla per la decrittografia. AWS KMS key Questo potrebbe non essere quello AWS KMS key che il chiamante intende utilizzare. Ad esempio, una delle chiavi di dati crittografate potrebbe essere stata crittografata con un metodo meno sicuro AWS KMS key che chiunque può utilizzare.

  • Latenza e prestazioni: un portachiavi AWS KMS Discovery potrebbe essere sensibilmente più lento rispetto ad altri portachiavi perché AWS Database 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 presenti in partizioni Account AWS e specifiche. 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

I seguenti esempi di codice creano un'istanza di un portachiavi di AWS KMS rilevamento con un filtro di rilevamento che limita le chiavi KMS che AWS Database Encryption SDK può utilizzare a quelle presenti nella partizione e nell'account di esempio. aws 111122223333

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.

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);
C# / .NET
// Create discovery filter var discoveryFilter = new DiscoveryFilter { Partition = "aws", AccountIds = 111122223333 }; // Create the discovery keyring var createAwsKmsMrkDiscoveryMultiKeyringInput = new CreateAwsKmsMrkDiscoveryMultiKeyringInput { DiscoveryFilter = discoveryFilter }; var 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. Al contrario, consente al AWS Database Encryption SDK di decrittografare utilizzando solo le chiavi KMS in particolare. Regioni AWS

Quando si esegue la decrittografia con un keyring di rilevamento AWS KMS regionale, AWS Database Encryption SDK decrittografa qualsiasi chiave di dati crittografata che è stata crittografata con un valore specificato. AWS KMS key Regione AWS Per avere successo, il chiamante deve disporre dell'kms:Decryptautorizzazione su almeno una delle chiavi di dati specificate che hanno crittografato una AWS KMS keys chiave dati. Regione AWS

Come altri portachiavi Discovery, il portachiavi Discovery regionale non ha alcun effetto sulla crittografia. Funziona solo quando si decifrano campi 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 di rilevamento regionale nel AWS Database Encryption SDK tenta di decrittografare solo con chiavi KMS nella regione specificata. Quando si utilizza un portachiavi di rilevamento, si configura la regione sul client. AWS KMS Queste implementazioni di AWS Database Encryption SDK non filtrano le chiavi KMS per regione, ma AWS KMS falliranno una richiesta di decrittografia per le 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 presenti nelle partizioni e nelle partizioni specificate. Account AWS

Ad esempio, il codice seguente crea un portachiavi di rilevamento AWS KMS regionale con un filtro di rilevamento. Questo portachiavi limita l'SDK di crittografia del AWS database alle chiavi KMS nell'account 111122223333 nella regione Stati Uniti occidentali (Oregon) (us-west-2).

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);
C# / .NET
// Create discovery filter var discoveryFilter = new DiscoveryFilter { Partition = "aws", AccountIds = 111122223333 }; // Create the discovery keyring var createAwsKmsMrkDiscoveryMultiKeyringInput = new CreateAwsKmsMrkDiscoveryMultiKeyringInput { DiscoveryFilter = discoveryFilter, Regions = us-west-2 }; var decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);