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à.
Esempi di Java
La nostra libreria di crittografia lato client è stata rinominata Database Encryption SDK. AWS Questa guida per sviluppatori fornisce ancora informazioni sul DynamoDB Encryption Client. |
Gli esempi seguenti mostrano come utilizzare la libreria di crittografia lato client Java per DynamoDB per proteggere gli elementi della tabella nell'applicazione. Puoi trovare altri esempi (e contribuire con i tuoi) negli esempi Java
Gli esempi seguenti mostrano come configurare la libreria di crittografia lato client Java per DynamoDB in una nuova tabella Amazon DynamoDB non popolata. Se desideri configurare le tabelle Amazon DynamoDB esistenti per la crittografia lato client, consulta. Aggiungi la versione 3.x a una tabella esistente
Argomenti
Utilizzo del client avanzato DynamoDB
L'esempio seguente mostra come utilizzare il DynamoDB Enhanced Client DynamoDbEncryptionInterceptor
e AWS KMS un portachiavi per crittografare gli elementi della tabella DynamoDB come parte delle chiamate API DynamoDB.
Puoi utilizzare qualsiasi portachiavi supportato con DynamoDB Enhanced Client, ma consigliamo di utilizzare uno dei AWS KMS portachiavi quando possibile.
Nota
Il DynamoDB Enhanced Client non supporta la crittografia ricercabile. Utilizza l'DynamoDbEncryptionInterceptor
API DynamoDB di basso livello per utilizzare la crittografia ricercabile.
Guarda l'esempio di codice completo: .java EnhancedPutGetExample
- Fase 1: Creare il portachiavi AWS KMS
-
L'esempio seguente utilizza la creazione
CreateAwsKmsMrkMultiKeyring
di un AWS KMS portachiavi con una chiave KMS di crittografia simmetrica. IlCreateAwsKmsMrkMultiKeyring
metodo garantisce che il portachiavi gestisca correttamente sia le chiavi a regione singola che quelle a più regioni.final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- Passaggio 2: creare uno schema tabellare dalla classe di dati annotata
-
L'esempio seguente utilizza la classe di dati annotati per creare il.
TableSchema
Questo esempio presuppone che la classe di dati annotata e le azioni degli attributi siano state definite utilizzando .java. SimpleClass
Per ulteriori informazioni sull'annotazione delle azioni relative agli attributi, consulta. Utilizza una classe di dati annotata final TableSchema<SimpleClass> schemaOnEncrypt = TableSchema.fromBean(SimpleClass.class);
- Fase 3: Definire quali attributi sono esclusi dalle firme
-
L'esempio seguente presuppone che tutti
DO_NOTHING
gli attributi condividano il prefisso distinto ":
«e utilizza il prefisso per definire gli attributi non firmati consentiti. Il client presuppone che qualsiasi nome di attributo con il prefisso ":
" sia escluso dalle firme. Per ulteriori informazioni, consulta Allowed unsigned attributes.final String unsignedAttrPrefix = ":";
- Fase 4: Creare la configurazione di crittografia
-
L'esempio seguente definisce una
tableConfigs
mappa che rappresenta la configurazione di crittografia per la tabella DynamoDB.Questo esempio specifica il nome della tabella DynamoDB come nome della tabella logica. Consigliamo vivamente di specificare il nome della tabella DynamoDB come nome della tabella logica quando si definisce per la prima volta la configurazione di crittografia. Per ulteriori informazioni, consulta Configurazione della crittografia nel AWS Database Encryption SDK per DynamoDB.
Nota
Per utilizzare la crittografia ricercabile o i beacon firmati, è necessario includerli anche nella configurazione di crittografia. SearchConfig
final Map<String, DynamoDbEnhancedTableEncryptionConfig> tableConfigs = new HashMap<>(); tableConfigs.put(ddbTableName, DynamoDbEnhancedTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .schemaOnEncrypt(tableSchema) .build());
- Fase 5: Crea il
DynamoDbEncryptionInterceptor
-
L'esempio seguente ne crea uno nuovo
DynamoDbEncryptionInterceptor
con iltableConfigs
passo 4.final DynamoDbEncryptionInterceptor interceptor = DynamoDbEnhancedClientEncryption.CreateDynamoDbEncryptionInterceptor( CreateDynamoDbEncryptionInterceptorInput.builder() .tableEncryptionConfigs(tableConfigs) .build() );
- Fase 6: Creare un nuovo client AWS SDK DynamoDB
-
L'esempio seguente crea un nuovo client AWS SDK DynamoDB utilizzando
interceptor
lo Step 5.final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
- Fase 7: Creare il DynamoDB Enhanced Client e creare una tabella
-
L'esempio seguente crea il DynamoDB Enhanced Client utilizzando il client DynamoDB AWS SDK creato nel passaggio 6 e crea una tabella utilizzando la classe di dati annotati.
final DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder() .dynamoDbClient(ddb) .build(); final DynamoDbTable<SimpleClass> table = enhancedClient.table(ddbTableName, tableSchema);
- Fase 8: Crittografare e firmare un elemento della tabella
-
L'esempio seguente inserisce un elemento nella tabella DynamoDB utilizzando il DynamoDB Enhanced Client. L'elemento viene crittografato e firmato lato client prima di essere inviato a DynamoDB.
final SimpleClass item = new SimpleClass(); item.setPartitionKey("EnhancedPutGetExample"); item.setSortKey(0); item.setAttribute1("encrypt and sign me!"); item.setAttribute2("sign me!"); item.setAttribute3("ignore me!"); table.putItem(item);
Utilizzo dell'API DynamoDB di basso livello
L'esempio seguente mostra come utilizzare l'API DynamoDB di basso livello con AWS KMS un portachiavi per crittografare e firmare automaticamente gli elementi lato client con le richieste DynamoDB. PutItem
Puoi utilizzare qualsiasi portachiavi supportato, ma ti consigliamo di utilizzare uno dei portachiavi quando possibile. AWS KMS
Guarda l'esempio di codice completo: .java BasicPutGetExample
- Fase 1: Creare il portachiavi AWS KMS
-
L'esempio seguente utilizza la creazione
CreateAwsKmsMrkMultiKeyring
di un AWS KMS portachiavi con una chiave KMS di crittografia simmetrica. IlCreateAwsKmsMrkMultiKeyring
metodo garantisce che il portachiavi gestisca correttamente sia le chiavi a regione singola che quelle a più regioni.final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- Passaggio 2: configura le azioni relative agli attributi
-
L'esempio seguente definisce una
attributeActionsOnEncrypt
mappa che rappresenta azioni di esempio relative agli attributi per un elemento della tabella.Nota
L'esempio seguente non definisce alcun attributo come
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
. Se si specifica unSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
attributo, devono esserloSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
anche gli attributi di partizione e ordinamento.final Map<String, CryptoAction> attributeActionsOnEncrypt = new HashMap<>(); // The partition attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("partition_key", CryptoAction.SIGN_ONLY); // The sort attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("sort_key", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put("attribute1", CryptoAction.ENCRYPT_AND_SIGN); attributeActionsOnEncrypt.put("attribute2", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put(":attribute3", CryptoAction.DO_NOTHING);
- Fase 3: Definire quali attributi sono esclusi dalle firme
-
L'esempio seguente presuppone che tutti
DO_NOTHING
gli attributi condividano il prefisso distinto ":
«e utilizza il prefisso per definire gli attributi non firmati consentiti. Il client presuppone che qualsiasi nome di attributo con il prefisso ":
" sia escluso dalle firme. Per ulteriori informazioni, consulta Allowed unsigned attributes.final String unsignedAttrPrefix = ":";
- Fase 4: Definire la configurazione di crittografia delle tabelle DynamoDB
-
L'esempio seguente definisce una
tableConfigs
mappa che rappresenta la configurazione di crittografia per questa tabella DynamoDB.Questo esempio specifica il nome della tabella DynamoDB come nome della tabella logica. Consigliamo vivamente di specificare il nome della tabella DynamoDB come nome della tabella logica quando si definisce per la prima volta la configurazione di crittografia. Per ulteriori informazioni, consulta Configurazione della crittografia nel AWS Database Encryption SDK per DynamoDB.
Nota
Per utilizzare la crittografia ricercabile o i beacon firmati, è necessario includerli anche nella configurazione di crittografia. SearchConfig
final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .attributeActionsOnEncrypt(attributeActionsOnEncrypt) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .build(); tableConfigs.put(ddbTableName, config);
- Fase 5: Creare il
DynamoDbEncryptionInterceptor
-
L'esempio seguente crea l'
DynamoDbEncryptionInterceptor
utilizzo deltableConfigs
dal passaggio 4.DynamoDbEncryptionInterceptor interceptor = DynamoDbEncryptionInterceptor.builder() .config(DynamoDbTablesEncryptionConfig.builder() .tableEncryptionConfigs(tableConfigs) .build()) .build();
- Fase 6: Creare un nuovo client AWS SDK DynamoDB
-
L'esempio seguente crea un nuovo client AWS SDK DynamoDB utilizzando
interceptor
lo Step 5.final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
- Fase 7: Crittografare e firmare un elemento della tabella DynamoDB
-
L'esempio seguente definisce una
item
mappa che rappresenta un elemento della tabella di esempio e inserisce l'elemento nella tabella DynamoDB. L'elemento viene crittografato e firmato lato client prima di essere inviato a DynamoDB.final HashMap<String, AttributeValue> item = new HashMap<>(); item.put("partition_key", AttributeValue.builder().s("BasicPutGetExample").build()); item.put("sort_key", AttributeValue.builder().n("0").build()); item.put("attribute1", AttributeValue.builder().s("encrypt and sign me!").build()); item.put("attribute2", AttributeValue.builder().s("sign me!").build()); item.put(":attribute3", AttributeValue.builder().s("ignore me!").build()); final PutItemRequest putRequest = PutItemRequest.builder() .tableName(ddbTableName) .item(item) .build(); final PutItemResponse putResponse = ddb.putItem(putRequest);
Utilizzo del livello inferiore DynamoDbItemEncryptor
L'esempio seguente mostra come utilizzare il livello inferiore DynamoDbItemEncryptor
con un AWS KMS portachiavi per crittografare e firmare direttamente gli elementi della tabella. Non DynamoDbItemEncryptor
inserisce l'elemento nella tabella DynamoDB.
Puoi utilizzare qualsiasi portachiavi supportato con DynamoDB Enhanced Client, ma consigliamo di utilizzare uno dei AWS KMS portachiavi quando possibile.
Nota
Il livello inferiore DynamoDbItemEncryptor non supporta la crittografia ricercabile. Utilizza l'DynamoDbEncryptionInterceptor
API DynamoDB di basso livello per utilizzare la crittografia ricercabile.
Guarda l'esempio di codice completo: .java ItemEncryptDecryptExample
- Fase 1: Creare il portachiavi AWS KMS
-
L'esempio seguente utilizza la creazione
CreateAwsKmsMrkMultiKeyring
di un AWS KMS portachiavi con una chiave KMS di crittografia simmetrica. IlCreateAwsKmsMrkMultiKeyring
metodo garantisce che il portachiavi gestisca correttamente sia le chiavi a regione singola che quelle a più regioni.final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
- Passaggio 2: configura le azioni relative agli attributi
-
L'esempio seguente definisce una
attributeActionsOnEncrypt
mappa che rappresenta azioni di esempio relative agli attributi per un elemento della tabella.Nota
L'esempio seguente non definisce alcun attributo come
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
. Se si specifica unSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
attributo, devono esserloSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
anche gli attributi di partizione e ordinamento.final Map<String, CryptoAction> attributeActionsOnEncrypt = new HashMap<>(); // The partition attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("partition_key", CryptoAction.SIGN_ONLY); // The sort attribute must be SIGN_ONLY attributeActionsOnEncrypt.put("sort_key", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put("attribute1", CryptoAction.ENCRYPT_AND_SIGN); attributeActionsOnEncrypt.put("attribute2", CryptoAction.SIGN_ONLY); attributeActionsOnEncrypt.put(":attribute3", CryptoAction.DO_NOTHING);
- Fase 3: Definire quali attributi sono esclusi dalle firme
-
L'esempio seguente presuppone che tutti
DO_NOTHING
gli attributi condividano il prefisso distinto ":
«e utilizza il prefisso per definire gli attributi non firmati consentiti. Il client presuppone che qualsiasi nome di attributo con il prefisso ":
" sia escluso dalle firme. Per ulteriori informazioni, consulta Allowed unsigned attributes.final String unsignedAttrPrefix = ":";
- Fase 4: Definire la configurazione
DynamoDbItemEncryptor
-
L'esempio seguente definisce la configurazione per
DynamoDbItemEncryptor
.Questo esempio specifica il nome della tabella DynamoDB come nome della tabella logica. Consigliamo vivamente di specificare il nome della tabella DynamoDB come nome della tabella logica quando si definisce per la prima volta la configurazione di crittografia. Per ulteriori informazioni, consulta Configurazione della crittografia nel AWS Database Encryption SDK per DynamoDB.
final DynamoDbItemEncryptorConfig config = DynamoDbItemEncryptorConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .attributeActionsOnEncrypt(attributeActionsOnEncrypt) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .build();
- Fase 5: Creare il
DynamoDbItemEncryptor
-
L'esempio seguente ne crea uno nuovo
DynamoDbItemEncryptor
utilizzando ilconfig
tratto dal passaggio 4.final DynamoDbItemEncryptor itemEncryptor = DynamoDbItemEncryptor.builder() .DynamoDbItemEncryptorConfig(config) .build();
- Fase 6: Crittografare e firmare direttamente un elemento della tabella
-
L'esempio seguente crittografa e firma direttamente un elemento utilizzando il.
DynamoDbItemEncryptor
NonDynamoDbItemEncryptor
inserisce l'elemento nella tabella DynamoDB.final Map<String, AttributeValue> originalItem = new HashMap<>(); originalItem.put("partition_key", AttributeValue.builder().s("ItemEncryptDecryptExample").build()); originalItem.put("sort_key", AttributeValue.builder().n("0").build()); originalItem.put("attribute1", AttributeValue.builder().s("encrypt and sign me!").build()); originalItem.put("attribute2", AttributeValue.builder().s("sign me!").build()); originalItem.put(":attribute3", AttributeValue.builder().s("ignore me!").build()); final Map<String, AttributeValue> encryptedItem = itemEncryptor.EncryptItem( EncryptItemInput.builder() .plaintextItem(originalItem) .build() ).encryptedItem();