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
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
Themen
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 DieCreateAwsKmsMrkMultiKeyring
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 demtableConfigs
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 DieCreateAwsKmsMrkMultiKeyring
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 als
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
. Wenn SieSIGN_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 demtableConfigs
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 DieCreateAwsKmsMrkMultiKeyring
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 als
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
. Wenn SieSIGN_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 die
DynamoDbItemEncryptor
.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 demconfig
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
DasDynamoDbItemEncryptor
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();