View a markdown version of this page

Beispielcode für den DynamoDB Encryption Client für Java - AWS SDK für Datenbankverschlüsselung

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beispielcode für den DynamoDB Encryption Client für Java

Anmerkung

Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK umbenannt. AWS Das folgende Thema enthält Informationen zu Versionen 1. x —2. x des DynamoDB Encryption Client für Java und Versionen 1. x —3. x des DynamoDB Encryption Client für Python. Weitere Informationen finden Sie unter AWS Database Encryption SDK für DynamoDB-Versionsunterstützung.

Die folgenden Beispiele zeigen Ihnen, wie Sie den DynamoDB Encryption Client für Java verwenden, um DynamoDB-Tabellenelemente in Ihrer Anwendung zu schützen. Weitere Beispiele (und eigene Beispiele) finden Sie im Beispielverzeichnis des aws-database-encryption-sdk-dynamodb-Repositorys unter. GitHub

Verwenden des DynamoDBEncryptor

Dieses Beispiel zeigt Ihnen, wie Sie den untergeordneten DynamoDBEncryptor mit dem Direct KMS Provider verwenden. Der Direct KMS-Anbieter generiert und schützt seine kryptografischen Materialien unter einem von Ihnen angegebenen Wert in (). AWS KMS key AWS Key Management Service AWS KMS

Sie können jeden kompatiblen Anbieter für kryptografisches Material (CMP) mit dem verwenden. DynamoDBEncryptor

Sehen Sie sich das vollständige Codebeispiel an: AwsKmsEncryptedItem.java

Schritt 1: Erstellen Sie den Direct KMS Provider

Erstellen Sie eine Instanz des AWS KMS Clients mit der angegebenen Region. Verwenden Sie dann die Client-Instanz, um eine Instanz des Direct KMS Providers mit Ihrem bevorzugten zu erstellen AWS KMS key.

In diesem Beispiel wird der Amazon-Ressourcenname (ARN) verwendet, um den zu identifizieren AWS KMS key, aber Sie können jeden gültigen Schlüsselbezeichner verwenden.

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);
Schritt 2: Erstellen Sie ein Element

In diesem Beispiel wird a definiert record HashMap , das ein Beispieltabellenelement darstellt.

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"));
Schritt 3: Erstellen Sie einen DynamoDBEncryptor

Erstellen Sie eine Instance von DynamoDBEncryptor mit dem Direct KMS Provider.

final DynamoDBEncryptor encryptor = DynamoDBEncryptor.getInstance(cmp);
Schritt 4: Erstellen Sie einen DynamoDB-Verschlüsselungskontext

Der DynamoDB-Verschlüsselungskontext enthält Informationen über die Tabellenstruktur und wie sie verschlüsselt und signiert ist.

final String tableName = "testTable"; final EncryptionContext encryptionContext = new EncryptionContext.Builder() .withTableName(tableName) .withHashKeyName(partitionKeyName) .withRangeKeyName(sortKeyName) .build();
Schritt 5: Erstellen Sie das Attribut-Aktionen-Objekt

Attribut-Aktionen bestimmen, welche Attribute des Elements verschlüsselt und signiert sind, welche nur signiert und welche nicht verschlüsselt oder signiert sind.

In Java erstellen Sie zur Angabe von Attributaktionen eine Kombination HashMap aus Attributnamen und EncryptionFlags Wertepaaren.

Der folgende Java-Code erstellt beispielsweise eine, actions HashMap die alle Attribute im record Element verschlüsselt und signiert, mit Ausnahme der Partitionsschlüssel- und Sortierschlüsselattribute, die signiert, aber nicht verschlüsselt sind, und des test Attributs, das nicht signiert oder verschlüsselt ist.

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; } }
Schritt 6: Verschlüsseln und signieren Sie das Element

Um das Tabellenelement zu verschlüsseln und zu signieren, rufen Sie die Methode encryptRecord für die Instance des DynamoDBEncryptor auf. Geben Sie das Tabellenelement (record), die Attribut-Aktionen (actions) und den Verschlüsselungskontext (encryptionContext) an.

final Map<String, AttributeValue> encrypted_record = encryptor.encryptRecord(record, actions, encryptionContext);
Schritt 7: Fügen Sie das Element in die DynamoDB-Tabelle ein

Fügen Sie abschließend das verschlüsselte und signierte Element in die DynamoDB-Tabelle ein.

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