Java-Beispiele - AWS Datenbankverschlüsselung SDK

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.

Java-Beispiele

Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption umbenannt. AWS SDK Dieses Entwicklerhandbuch enthält weiterhin Informationen zum DynamoDB Encryption Client.

Die folgenden Beispiele zeigen Ihnen, wie Sie die clientseitige Java-Verschlüsselungsbibliothek für DynamoDB verwenden, um die Tabellenelemente in Ihrer Anwendung zu schützen. Weitere Beispiele (und eigene Beispiele) finden Sie in den Java-Beispielen im -dynamodb-Repository unter aws-database-encryption-sdk. GitHub

Die folgenden Beispiele zeigen, wie die clientseitige Java-Verschlüsselungsbibliothek für DynamoDB in einer neuen, nicht aufgefüllten Amazon DynamoDB-Tabelle konfiguriert wird. Wenn Sie Ihre vorhandenen Amazon DynamoDB-Tabellen für die clientseitige Verschlüsselung konfigurieren möchten, finden Sie weitere Informationen unter. Fügen Sie Version 3.x zu einer vorhandenen Tabelle hinzu

Verwenden des erweiterten DynamoDB-Clients

Das folgende Beispiel zeigt, wie Sie den DynamoDB Enhanced Client und DynamoDbEncryptionInterceptor mit einem AWS KMS Schlüsselbund verwenden, um DynamoDB-Tabellenelemente als Teil Ihrer DynamoDB-Aufrufe zu verschlüsseln. API

Sie können jeden unterstützten Schlüsselbund mit dem DynamoDB Enhanced Client verwenden, wir empfehlen jedoch, wann immer möglich, einen der AWS KMS Schlüsselringe zu verwenden.

Anmerkung

Der DynamoDB Enhanced Client unterstützt keine durchsuchbare Verschlüsselung. Verwenden Sie die DynamoDbEncryptionInterceptor zusammen mit DynamoDB auf niedriger Ebene, um eine durchsuchbare Verschlüsselung API zu verwenden.

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

Schritt 1: Erstellen Sie den Schlüsselbund AWS KMS

Im folgenden Beispiel wird CreateAwsKmsMrkMultiKeyring ein AWS KMS Schlüsselbund mit einem symmetrischen Verschlüsselungsschlüssel erstellt. KMS Die CreateAwsKmsMrkMultiKeyring Methode stellt sicher, dass der Schlüsselbund sowohl Schlüssel mit einer Region als auch Schlüssel mit mehreren Regionen korrekt verarbeitet.

final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
Schritt 2: Erstellen Sie ein Tabellenschema aus der annotierten Datenklasse

Im folgenden Beispiel wird die annotierte Datenklasse verwendet, um die zu erstellen. TableSchema

In diesem Beispiel wird davon ausgegangen, dass die mit Anmerkungen versehenen Datenklassen- und Attributaktionen mithilfe der SimpleClass Datei .java definiert wurden. Weitere Hinweise zum Kommentieren Ihrer Attributaktionen finden Sie unter. Verwenden Sie eine Datenklasse mit Anmerkungen

Anmerkung

Die AWS Datenbankverschlüsselung unterstützt SDK keine Anmerkungen zu verschachtelten Attributen.

final TableSchema<SimpleClass> schemaOnEncrypt = TableSchema.fromBean(SimpleClass.class);
Schritt 3: Definieren Sie, welche Attribute von den Signaturen ausgeschlossen werden

Im folgenden Beispiel wird davon ausgegangen, dass alle DO_NOTHING Attribute das eindeutige Präfix ":" haben, und verwendet dieses Präfix, um die zulässigen Attribute ohne Vorzeichen zu definieren. Der Client geht davon aus, dass alle Attributnamen mit dem Präfix ":" von den Signaturen ausgeschlossen sind. Weitere Informationen finden Sie unter Allowed unsigned attributes.

final String unsignedAttrPrefix = ":";
Schritt 4: Erstellen Sie die Verschlüsselungskonfiguration

Das folgende Beispiel definiert eine tableConfigs Map, die die Verschlüsselungskonfiguration für die DynamoDB-Tabelle darstellt.

In diesem Beispiel wird der DynamoDB-Tabellenname als logischer Tabellenname angegeben. Es wird dringend empfohlen, Ihren DynamoDB-Tabellennamen als logischen Tabellennamen anzugeben, wenn Sie Ihre Verschlüsselungskonfiguration zum ersten Mal definieren. Weitere Informationen finden Sie unter Verschlüsselungskonfiguration in AWS Database Encryption SDK for DynamoDB.

Anmerkung

Um durchsuchbare Verschlüsselung oder signierte Beacons zu verwenden, müssen Sie die auch SearchConfigin Ihre Verschlüsselungskonfiguration aufnehmen.

final Map<String, DynamoDbEnhancedTableEncryptionConfig> tableConfigs = new HashMap<>(); tableConfigs.put(ddbTableName, DynamoDbEnhancedTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .schemaOnEncrypt(tableSchema) .build());
Schritt 5: Erstellt das DynamoDbEncryptionInterceptor

Das folgende Beispiel erstellt ein neues DynamoDbEncryptionInterceptor mit dem tableConfigs aus Schritt 4.

final DynamoDbEncryptionInterceptor interceptor = DynamoDbEnhancedClientEncryption.CreateDynamoDbEncryptionInterceptor( CreateDynamoDbEncryptionInterceptorInput.builder() .tableEncryptionConfigs(tableConfigs) .build() );
Schritt 6: Einen neuen AWS SDK DynamoDB-Client erstellen

Im folgenden Beispiel wird ein neuer AWS SDK DynamoDB-Client mit dem interceptor aus Schritt 5 erstellt.

final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
Schritt 7: DynamoDB Enhanced Client erstellen und eine Tabelle erstellen

Das folgende Beispiel erstellt den DynamoDB Enhanced Client mithilfe des in Schritt 6 erstellten AWS SDK DynamoDB-Clients und erstellt eine Tabelle mit der annotierten Datenklasse.

final DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder() .dynamoDbClient(ddb) .build(); final DynamoDbTable<SimpleClass> table = enhancedClient.table(ddbTableName, tableSchema);
Schritt 8: Verschlüsseln und signieren Sie ein Tabellenelement

Im folgenden Beispiel wird mithilfe des DynamoDB Enhanced Client ein Element in die DynamoDB-Tabelle eingefügt. Das Element wird clientseitig verschlüsselt und signiert, bevor es an DynamoDB gesendet wird.

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);

Verwenden der Low-Level-DynamoDB API

Das folgende Beispiel zeigt, wie Sie DynamoDB auf niedriger Ebene API mit einem AWS KMS Schlüsselbund verwenden, um Elemente automatisch clientseitig mit Ihren DynamoDB-Anfragen zu verschlüsseln und zu signieren. PutItem

Sie können jeden unterstützten Schlüsselbund verwenden, wir empfehlen jedoch, wann immer möglich, einen der Schlüsselbunde zu verwenden. AWS KMS

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

Schritt 1: Erstellen Sie den Schlüsselbund AWS KMS

Im folgenden Beispiel wird CreateAwsKmsMrkMultiKeyring ein AWS KMS Schlüsselbund mit einem symmetrischen Verschlüsselungsschlüssel erstellt. KMS Die CreateAwsKmsMrkMultiKeyring Methode stellt sicher, dass der Schlüsselbund sowohl Schlüssel mit einer Region als auch Schlüssel mit mehreren Regionen korrekt verarbeitet.

final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
Schritt 2: Konfigurieren Sie Ihre Attributaktionen

Das folgende Beispiel definiert eine attributeActionsOnEncrypt Map, die Beispiel-Attributaktionen für ein Tabellenelement darstellt.

Anmerkung

Das folgende Beispiel definiert keine Attribute alsSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. Wenn Sie SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT Attribute angeben, müssen auch die Partitions- und Sortierattribute angegeben werdenSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT.

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);
Schritt 3: Definieren Sie, welche Attribute von den Signaturen ausgeschlossen werden

Im folgenden Beispiel wird davon ausgegangen, dass alle DO_NOTHING Attribute das eindeutige Präfix ":" haben, und verwendet dieses Präfix, um die zulässigen Attribute ohne Vorzeichen zu definieren. Der Client geht davon aus, dass alle Attributnamen mit dem Präfix ":" von den Signaturen ausgeschlossen sind. Weitere Informationen finden Sie unter Allowed unsigned attributes.

final String unsignedAttrPrefix = ":";
Schritt 4: Definieren Sie die Konfiguration der DynamoDB-Tabellenverschlüsselung

Das folgende Beispiel definiert eine tableConfigs Map, die die Verschlüsselungskonfiguration für diese DynamoDB-Tabelle darstellt.

In diesem Beispiel wird der DynamoDB-Tabellenname als logischer Tabellenname angegeben. Es wird dringend empfohlen, Ihren DynamoDB-Tabellennamen als logischen Tabellennamen anzugeben, wenn Sie Ihre Verschlüsselungskonfiguration zum ersten Mal definieren. Weitere Informationen finden Sie unter Verschlüsselungskonfiguration in AWS Database Encryption SDK for DynamoDB.

Anmerkung

Um durchsuchbare Verschlüsselung oder signierte Beacons zu verwenden, müssen Sie die auch SearchConfigin Ihre Verschlüsselungskonfiguration aufnehmen.

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);
Schritt 5: Erstellen Sie das DynamoDbEncryptionInterceptor

Im folgenden Beispiel wird das DynamoDbEncryptionInterceptor mit dem tableConfigs aus Schritt 4 erstellt.

DynamoDbEncryptionInterceptor interceptor = DynamoDbEncryptionInterceptor.builder() .config(DynamoDbTablesEncryptionConfig.builder() .tableEncryptionConfigs(tableConfigs) .build()) .build();
Schritt 6: Einen neuen AWS SDK DynamoDB-Client erstellen

Im folgenden Beispiel wird ein neuer AWS SDK DynamoDB-Client mit dem interceptor aus Schritt 5 erstellt.

final DynamoDbClient ddb = DynamoDbClient.builder() .overrideConfiguration( ClientOverrideConfiguration.builder() .addExecutionInterceptor(interceptor) .build()) .build();
Schritt 7: Verschlüsseln und Signieren eines DynamoDB-Tabellenelements

Das folgende Beispiel definiert eine item Map, die ein Beispieltabellenelement darstellt, und platziert das Element in der DynamoDB-Tabelle. Das Element wird clientseitig verschlüsselt und signiert, bevor es an DynamoDB gesendet wird.

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);

Verwenden Sie die untergeordnete Ebene DynamoDbItemEncryptor

Das folgende Beispiel zeigt, wie Sie die untergeordnete Ebene DynamoDbItemEncryptor mit einem AWS KMS Schlüsselbund verwenden, um Tabellenelemente direkt zu verschlüsseln und zu signieren. Das DynamoDbItemEncryptor fügt das Element nicht in Ihre DynamoDB-Tabelle ein.

Sie können jeden unterstützten Schlüsselbund mit dem DynamoDB Enhanced Client verwenden, wir empfehlen jedoch, wann immer möglich, einen der AWS KMS Schlüsselringe zu verwenden.

Anmerkung

Die untergeordnete Ebene unterstützt keine durchsuchbare Verschlüsselung. DynamoDbItemEncryptor Verwenden Sie die DynamoDbEncryptionInterceptor zusammen mit DynamoDB auf niedriger Ebene, um eine durchsuchbare Verschlüsselung API zu verwenden.

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

Schritt 1: Erstellen Sie den Schlüsselbund AWS KMS

Im folgenden Beispiel wird CreateAwsKmsMrkMultiKeyring ein AWS KMS Schlüsselbund mit einem symmetrischen Verschlüsselungsschlüssel erstellt. KMS Die CreateAwsKmsMrkMultiKeyring Methode stellt sicher, dass der Schlüsselbund sowohl Schlüssel mit einer Region als auch Schlüssel mit mehreren Regionen korrekt verarbeitet.

final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyId) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
Schritt 2: Konfigurieren Sie Ihre Attributaktionen

Das folgende Beispiel definiert eine attributeActionsOnEncrypt Map, die Beispiel-Attributaktionen für ein Tabellenelement darstellt.

Anmerkung

Das folgende Beispiel definiert keine Attribute alsSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT. Wenn Sie SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT Attribute angeben, müssen auch die Partitions- und Sortierattribute angegeben werdenSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT.

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);
Schritt 3: Definieren Sie, welche Attribute von den Signaturen ausgeschlossen werden

Im folgenden Beispiel wird davon ausgegangen, dass alle DO_NOTHING Attribute das eindeutige Präfix ":" haben, und verwendet dieses Präfix, um die zulässigen Attribute ohne Vorzeichen zu definieren. Der Client geht davon aus, dass alle Attributnamen mit dem Präfix ":" von den Signaturen ausgeschlossen sind. Weitere Informationen finden Sie unter Allowed unsigned attributes.

final String unsignedAttrPrefix = ":";
Schritt 4: Definieren Sie die DynamoDbItemEncryptor Konfiguration

Das folgende Beispiel definiert die Konfiguration für dieDynamoDbItemEncryptor.

In diesem Beispiel wird der DynamoDB-Tabellenname als logischer Tabellenname angegeben. Es wird dringend empfohlen, Ihren DynamoDB-Tabellennamen als logischen Tabellennamen anzugeben, wenn Sie Ihre Verschlüsselungskonfiguration zum ersten Mal definieren. Weitere Informationen finden Sie unter Verschlüsselungskonfiguration in AWS Database Encryption SDK for DynamoDB.

final DynamoDbItemEncryptorConfig config = DynamoDbItemEncryptorConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .attributeActionsOnEncrypt(attributeActionsOnEncrypt) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .build();
Schritt 5: Erstellen Sie das DynamoDbItemEncryptor

Im folgenden Beispiel wird DynamoDbItemEncryptor mit dem config aus Schritt 4 ein neues erstellt.

final DynamoDbItemEncryptor itemEncryptor = DynamoDbItemEncryptor.builder() .DynamoDbItemEncryptorConfig(config) .build();
Schritt 6: Verschlüsseln und signieren Sie ein Tabellenelement direkt

Im folgenden Beispiel wird ein Element direkt verschlüsselt und signiert mit dem. DynamoDbItemEncryptor Das DynamoDbItemEncryptor fügt das Element nicht in Ihre DynamoDB-Tabelle ein.

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();