View a markdown version of this page

Codice di esempio per il 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à.

Codice di esempio per il 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.

Gli esempi seguenti mostrano come utilizzare il DynamoDB Encryption Client for Java per proteggere gli elementi della tabella DynamoDB nell'applicazione. Puoi trovare altri esempi (e contribuire con i tuoi) nella directory examples del repository aws-database-encryption-sdk-dynamodb su. GitHub

Utilizzo di DynamoDBEncryptor

Questo esempio mostra come utilizzare il componente DynamoDBEncryptor di livello inferiore con il provider KMS diretto. Il provider Direct KMS genera e protegge i suoi materiali crittografici con un in () specificato dall'utente. AWS KMS key AWS Key Management Service AWS KMS

È possibile utilizzare qualsiasi fornitore di materiali crittografici (CMP) compatibile con. DynamoDBEncryptor

Guarda l'esempio di codice completo: AwsKmsEncryptedItem.java

Fase 1: creazione del provider KMS diretto

Crea un'istanza del AWS KMS client con la regione specificata. Quindi, usa l'istanza del client per creare un'istanza del Direct KMS Provider con la tua preferita AWS KMS key.

Questo esempio utilizza Amazon Resource Name (ARN) per identificare AWS KMS key, ma puoi utilizzare qualsiasi identificatore di chiave valido.

final String keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; final String region = "us-west-2"; final KmsClient kms = KmsClient.builder().region(Region.of(region)).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, keyArn);
Fase 2: creazione di un item

Questo esempio definisce un elemento record HashMap che rappresenta un elemento di tabella di esempio.

final String partitionKeyName = "partition_attribute"; final String sortKeyName = "sort_attribute"; final Map<String, AttributeValue> record = new HashMap<>(); record.put(partitionKeyName, new AttributeValue().withS("value1")); record.put(sortKeyName, new AttributeValue().withN("55")); record.put("example", new AttributeValue().withS("data")); record.put("numbers", new AttributeValue().withN("99")); record.put("binary", new AttributeValue().withB(ByteBuffer.wrap(new byte[]{0x00, 0x01, 0x02}))); record.put("test", new AttributeValue().withS("test-value"));
Fase 3: creazione di un componente DynamoDBEncryptor

Crea un'istanza del componente DynamoDBEncryptor con il provider KMS diretto.

final DynamoDBEncryptor encryptor = DynamoDBEncryptor.getInstance(cmp);
Fase 4: Creare un contesto di crittografia DynamoDB

Il contesto di crittografia DynamoDB contiene informazioni sulla struttura della tabella e su come viene crittografata e firmata.

final String tableName = "testTable"; final EncryptionContext encryptionContext = new EncryptionContext.Builder() .withTableName(tableName) .withHashKeyName(partitionKeyName) .withRangeKeyName(sortKeyName) .build();
Fase 5: creazione dell'oggetto delle operazioni di attributo.

Le operazioni di attributo determinano quali attributi dell'item sono crittografati e firmati, quali solo firmati e quali non sono né crittografati né firmati.

In Java, per specificare le azioni relative agli attributi, si crea una serie HashMap di coppie di nomi e EncryptionFlags valori degli attributi.

Ad esempio, il codice Java seguente crea un codice actions HashMap che crittografa e firma tutti gli attributi dell'recordelemento, ad eccezione della chiave di partizione e degli attributi della chiave di ordinamento, che sono firmati ma non crittografati, e dell'testattributo, 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: // fall through to the next case case sortKeyName: // Partition and sort keys must not be encrypted, but should be signed actions.put(attributeName, signOnly); break; case "test": // Neither encrypted nor signed break; default: // Encrypt and sign all other attributes actions.put(attributeName, encryptAndSign); break; } }
Fase 6: crittografia e firma dell'item

Per crittografare e firmare l'item della tabella, chiama il metodo encryptRecord nell'istanza del componente DynamoDBEncryptor. Specifica l'item della tabella (record), le operazioni di attributo (actions) e il contesto di crittografia (encryptionContext).

final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext);
Fase 7: Inserire l'elemento nella tabella DynamoDB

Infine, inserisci l'elemento crittografato e firmato nella tabella DynamoDB.

final DynamoDbClient ddb = DynamoDbClient.builder().region(Region.of(region)).build(); ddb.putItem(tableName, encrypted_record);