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.
Konfigurieren Sie eine bestehende DynamoDB-Tabelle für die Verwendung von AWS Database Encryption SDK for DynamoDB
Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption umbenannt. AWS SDK Dieses Entwicklerhandbuch enthält weiterhin Informationen zum DynamoDB Encryption Client. |
Mit Version 3. x der clientseitigen Java-Verschlüsselungsbibliothek für DynamoDB können Sie Ihre vorhandenen Amazon DynamoDB-Tabellen für die clientseitige Verschlüsselung konfigurieren. Dieses Thema enthält Anleitungen zu den drei Schritten, die Sie ausführen müssen, um Version 3 hinzuzufügen. x zu einer vorhandenen, gefüllten DynamoDB-Tabelle.
Voraussetzungen
Version 3. x der clientseitigen Java-Verschlüsselungsbibliothek für DynamoDB erfordert den DynamoDB Enhanced Client, der unter bereitgestellt wird. AWS SDK for Java 2.x Wenn Sie den D immer noch verwendenynamoDBMapper, müssen Sie auf AWS SDK for Java 2.x den DynamoDB Enhanced Client migrieren.
Folgen Sie den Anweisungen für die Migration von Version 1.x auf 2.x von. AWS SDK for Java
Folgen Sie dann den Anweisungen unter Erste Schritte mit dem DynamoDB Enhanced Client. API
Bevor Sie Ihre Tabelle für die Verwendung der clientseitigen Java-Verschlüsselungsbibliothek für DynamoDB konfigurieren, müssen Sie eine Datenklasse TableSchema
mit Anmerkungen generieren und einen erweiterten Client erstellen.
Schritt 1: Bereiten Sie sich darauf vor, verschlüsselte Elemente zu lesen und zu schreiben
Gehen Sie wie folgt vor, um Ihren AWS Database Encryption SDK Client darauf vorzubereiten, verschlüsselte Elemente zu lesen und zu schreiben. Nachdem Sie die folgenden Änderungen vorgenommen haben, liest und schreibt Ihr Client weiterhin Klartext-Elemente. Neue Elemente, die in die Tabelle geschrieben werden, werden nicht verschlüsselt oder signiert, aber es kann verschlüsselte Elemente entschlüsseln, sobald sie erscheinen. Diese Änderungen bereiten den Client darauf vor, mit der Verschlüsselung neuer Elemente zu beginnen. Die folgenden Änderungen müssen auf jedem Lesegerät installiert werden, bevor Sie mit dem nächsten Schritt fortfahren.
- 1. Definieren Sie Ihre Attributaktionen
-
Aktualisieren Sie Ihre Datenklasse mit Anmerkungen, sodass sie Attributaktionen enthält, die definieren, welche Attributwerte verschlüsselt und signiert werden, welche nur signiert und welche ignoriert werden.
Weitere Hinweise zu den aws-database-encryption-sdk DynamoDB Enhanced Client-Anmerkungen finden Sie unter SimpleClass GitHub.java
im -dynamodb-Repository unter. Standardmäßig sind Primärschlüsselattribute signiert, aber nicht verschlüsselt (
SIGN_ONLY
), und alle anderen Attribute sind verschlüsselt und signiert ().ENCRYPT_AND_SIGN
Um Ausnahmen anzugeben, verwenden Sie die Verschlüsselungsanmerkungen, die in der clientseitigen Java-Verschlüsselungsbibliothek für DynamoDB definiert sind. Wenn Sie beispielsweise möchten, dass ein bestimmtes Attribut nur ein Zeichen sein soll, verwenden Sie die Anmerkung.@DynamoDbEncryptionSignOnly
Wenn Sie möchten, dass ein bestimmtes Attribut signiert und in den Verschlüsselungskontext aufgenommen wird, verwenden Sie die@DynamoDbEncryptionSignAndIncludeInEncryptionContext
Anmerkung. Wenn Sie möchten, dass ein bestimmtes Attribut weder signiert noch verschlüsselt (DO_NOTHING
) wird, verwenden Sie die@DynamoDbEncryptionDoNothing
Anmerkung.Anmerkung
Wenn Sie
SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
Attribute angeben, müssen dies auch die Partitions- und Sortierattribute seinSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
. Ein Beispiel, das die zur Definition verwendeten Anmerkungen zeigtSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
, finden Sie unter SimpleClass4.java. Ein Beispiel für Anmerkungen finden Sie unter. Verwenden Sie eine Datenklasse mit Anmerkungen
- 2. 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 = ":";
- 3. Erstellen Sie einen Schlüsselbund
-
Im folgenden Beispiel wird ein AWS KMS Schlüsselbund erstellt. Der AWS KMS Schlüsselbund verwendet symmetrische oder asymmetrische Verschlüsselung, um Datenschlüssel RSA AWS KMS keys zu generieren, zu verschlüsseln und zu entschlüsseln.
In diesem Beispiel wird ein Schlüsselbund
CreateMrkMultiKeyring
mit einem symmetrischen AWS KMS 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);
- 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.
Sie müssen
FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT
als Klartext-Override angeben. Diese Richtlinie liest und schreibt weiterhin Klartext-Elemente, liest verschlüsselte Elemente und bereitet den Client darauf vor, verschlüsselte Elemente zu schreiben.final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .schemaOnEncrypt(tableSchema) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .plaintextOverride(PlaintextOverride.FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT) .build(); tableConfigs.put(ddbTableName, config);
- 5. Erstellen der
DynamoDbEncryptionInterceptor
-
Im folgenden Beispiel wird das
DynamoDbEncryptionInterceptor
mit demtableConfigs
aus Schritt 3 erstellten erstellt.DynamoDbEncryptionInterceptor interceptor = DynamoDbEncryptionInterceptor.builder() .config(DynamoDbTablesEncryptionConfig.builder() .tableEncryptionConfigs(tableConfigs) .build()) .build();
Schritt 2: Schreiben Sie verschlüsselte und signierte Elemente
Aktualisieren Sie die Klartext-Richtlinie in Ihrer DynamoDbEncryptionInterceptor
Konfiguration, damit der Client verschlüsselte und signierte Elemente schreiben kann. Nachdem Sie die folgende Änderung implementiert haben, verschlüsselt und signiert der Client neue Elemente auf der Grundlage der Attributaktionen, die Sie in Schritt 1 konfiguriert haben. Der Client kann Klartext-Elemente sowie verschlüsselte und signierte Elemente lesen.
Bevor Sie mit Schritt 3 fortfahren, müssen Sie alle vorhandenen Klartextelemente in Ihrer Tabelle verschlüsseln und signieren. Es gibt keine einzelne Metrik oder Abfrage, die Sie ausführen können, um Ihre vorhandenen Klartextelemente schnell zu verschlüsseln. Verwenden Sie den Prozess, der für Ihr System am sinnvollsten ist. Sie könnten beispielsweise einen asynchronen Prozess verwenden, der die Tabelle langsam scannt und dann die Elemente mithilfe der von Ihnen definierten Attributaktionen und der Verschlüsselungskonfiguration neu schreibt. Um die Klartext-Elemente in Ihrer Tabelle zu identifizieren, empfehlen wir, nach allen Elementen zu suchen, die nicht die aws_dbe_foot
Attribute aws_dbe_head
und enthalten, die die AWS Datenbankverschlüsselung den Elementen SDK hinzufügt, wenn sie verschlüsselt und signiert sind.
Im folgenden Beispiel wird die Konfiguration der Tabellenverschlüsselung aus Schritt 1 aktualisiert. Sie müssen die Klartext-Override mit FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT
aktualisieren. Diese Richtlinie liest weiterhin Klartext-Elemente, liest und schreibt aber auch verschlüsselte Elemente. Erstellen Sie ein neues DynamoDbEncryptionInterceptor
mit dem aktualisiertentableConfigs
.
final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .schemaOnEncrypt(tableSchema) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) .plaintextOverride(PlaintextOverride.FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT) .build(); tableConfigs.put(ddbTableName, config);
Schritt 3: Nur verschlüsselte und signierte Elemente lesen
Nachdem Sie alle Ihre Elemente verschlüsselt und signiert haben, aktualisieren Sie die Klartext-Überschreibung in Ihrer DynamoDbEncryptionInterceptor
Konfiguration, sodass der Client nur verschlüsselte und signierte Elemente lesen und schreiben kann. Nachdem Sie die folgende Änderung implementiert haben, verschlüsselt und signiert der Client neue Elemente auf der Grundlage der Attributaktionen, die Sie in Schritt 1 konfiguriert haben. Der Client kann nur verschlüsselte und signierte Elemente lesen.
Im folgenden Beispiel wird die Konfiguration der Tabellenverschlüsselung aus Schritt 2 aktualisiert. Sie können entweder die Klartext-Override mit der Klartext-Richtlinie aktualisieren FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT
oder die Klartext-Richtlinie aus Ihrer Konfiguration entfernen. Der Client liest und schreibt standardmäßig nur verschlüsselte und signierte Elemente. Erstellen Sie ein neues DynamoDbEncryptionInterceptor
mit dem aktualisiertentableConfigs
.
final Map<String, DynamoDbTableEncryptionConfig> tableConfigs = new HashMap<>(); final DynamoDbTableEncryptionConfig config = DynamoDbTableEncryptionConfig.builder() .logicalTableName(ddbTableName) .partitionKeyName("partition_key") .sortKeyName("sort_key") .schemaOnEncrypt(tableSchema) .keyring(kmsKeyring) .allowedUnsignedAttributePrefix(unsignedAttrPrefix) // Optional: you can also remove the plaintext policy from your configuration .plaintextOverride(PlaintextOverride.FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT) .build(); tableConfigs.put(ddbTableName, config);