View a markdown version of this page

Utilizzo del client di crittografia DynamoDB per Java - 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à.

Utilizzo del client di crittografia DynamoDB per Java

Nota

La nostra libreria di crittografia lato client è stata rinominata Database Encryption SDK. AWS Il seguente argomento fornisce informazioni sulle versioni 1. x —2. x del DynamoDB Encryption Client for Java e versioni 1. x —3. x del client di crittografia DynamoDB per Python. Per ulteriori informazioni, consulta AWS Database Encryption SDK per il supporto della versione DynamoDB.

Questo argomento spiega alcune funzionalità del DynamoDB Encryption Client in Java che potrebbero non essere presenti in altre implementazioni del linguaggio di programmazione.

Per i dettagli sulla programmazione con il DynamoDB Encryption Client, consulta gli esempi Java, gli esempi in the GitHub on e Javadoc per aws-dynamodb-encryption-java repository il DynamoDB Encryption Client.

Crittografi degli oggetti: DynamodbEncryptor

Il DynamoDB Encryptor Client in Java ha un solo elemento di crittografia: il DynamodbEncryptor di livello inferiore

Operazioni di attributo in Java

Le operazioni di attributo determinano quali valori attributo sono crittografati e firmati, quali solo firmati e quali ignorati.

Importante

Dopo aver utilizzato le azioni degli attributi per crittografare gli elementi della tabella, l'aggiunta o la rimozione di attributi dal modello di dati potrebbe causare un errore di convalida della firma che impedisce di decrittografare i dati. Per una spiegazione dettagliata, consulta Modifica del modello di dati.

Per specificare le operazioni di attributo quando utilizzi direttamente il componente DynamoDBEncryptor, crea un oggetto HashMap in cui le coppie nome-valore rappresentano i nomi degli attributi e le operazioni specificate.

I valori sono validi per le operazioni di attributo definite nel tipo enumerato EncryptionFlags. Puoi utilizzare ENCRYPT e SIGN insieme o solo SIGN o ometterle entrambe. Tuttavia, se si utilizza ENCRYPT da solo, il client di crittografia DynamoDB genera un errore. Non puoi crittografare un attributo non firmato.

ENCRYPT SIGN
avvertimento

Non crittografare gli attributi che vengono usati per la chiave primaria. Devono rimanere in testo semplice in modo che DynamoDB possa trovare l'elemento senza eseguire una scansione completa della tabella.

Se si specifica una chiave primaria nel contesto di crittografia e quindi si specifica ENCRYPT nell'azione di attributo per uno degli attributi della chiave primaria, il client di crittografia DynamoDB genera un'eccezione.

Ad esempio, il seguente codice Java crea un codice actions HashMap che crittografa e firma tutti gli attributi dell'elemento. record Le eccezioni sono la chiave di partizione e gli attributi della chiave di ordinamento, che sono firmati ma non crittografati, e l'attributo test, che non è firmato o crittografato.

final EnumSet<EncryptionFlags> signOnly = EnumSet.of(EncryptionFlags.SIGN); final EnumSet<EncryptionFlags> encryptAndSign = EnumSet.of(EncryptionFlags.ENCRYPT, EncryptionFlags.SIGN); final Map<String, Set<EncryptionFlags>> actions = new HashMap<>(); for (final String attributeName : record.keySet()) { switch (attributeName) { case partitionKeyName: // no break; falls through to next case case sortKeyName: // Partition and sort keys must not be encrypted, but should be signed actions.put(attributeName, signOnly); break; case "test": // Don't encrypt or sign break; default: // Encrypt and sign everything else actions.put(attributeName, encryptAndSign); break; } }

Successivamente, quando chiami il metodo encryptRecord del componente DynamoDBEncryptor, devi specificare la mappa come valore del parametro attributeFlags. Ad esempio, questa chiamata a encryptRecord utilizza la mappa actions.

// Encrypt the plaintext record final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext);

Sovrascrivere i nomi delle tabelle

Nel DynamoDB Encryption Client, il nome della tabella DynamoDB è un elemento del contesto di crittografia DynamoDB che viene passato ai metodi di crittografia e decrittografia. Quando si crittografano o si firmano gli elementi della tabella, il contesto di crittografia DynamoDB, incluso il nome della tabella, è associato crittograficamente al testo cifrato. Se il contesto di crittografia DynamoDB passato al metodo decrypt non corrisponde al contesto di crittografia DynamoDB passato al metodo encrypt, l'operazione di decrittografia ha esito negativo.

In alcuni casi, il nome di una tabella cambia, ad esempio quando esegui il backup di una tabella oppure quando esegui un ripristino point-in-time. Quando si decrittografa o si verifica la firma di questi elementi, è necessario passare nello stesso contesto di crittografia DynamoDB utilizzato per crittografare e firmare gli elementi, incluso il nome della tabella originale. Il nome della tabella corrente non è necessario.

Quando si utilizzaDynamoDBEncryptor, si assembla manualmente il contesto di crittografia DynamoDB. Pertanto, non utilizzate gli operatori che sostituiscono i nomi delle tabelle se utilizzate. DynamoDBEncryptor Crea invece un contesto di crittografia con il nome della tabella originale e invialo al metodo di decrittografia.