Konfigurieren Sie eine bestehende DynamoDB-Tabelle für die Verwendung des AWS Database Encryption SDK für DynamoDB - 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.

Konfigurieren Sie eine bestehende DynamoDB-Tabelle für die Verwendung des AWS Database Encryption SDK für DynamoDB

Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK umbenannt. AWS 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 DynamoDBMapper weiterhin verwenden, müssen Sie auf den DynamoDB AWS SDK for Java 2.x 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 der 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 auf das Lesen und Schreiben verschlüsselter Elemente vorzubereiten. 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 Zulässige Attribute ohne Vorzeichen.

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 Verschlüsselung oder asymmetrisches RSA, um Datenschlüssel AWS KMS keys zu generieren, zu verschlüsseln und zu entschlüsseln.

In diesem Beispiel wird ein AWS KMS Schlüsselbund CreateMrkMultiKeyring mit einem KMS-Schlüssel mit symmetrischer Verschlüsselung erstellt. 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);
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 im AWS Database Encryption SDK für 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 dem tableConfigs 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 das AWS Database Encryption SDK Elementen 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);