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 von AWS SDK für Datenbankverschlüsselung
| Unsere clientseitige Verschlüsselungsbibliothek wurde in AWS Database Encryption SDK umbenannt. Dieses Entwicklerhandbuch enthält weiterhin Informationen zum DynamoDB Encryption Client. |
Das AWS Database Encryption SDK ist so konzipiert, dass es einfach zu bedienen ist. Obwohl das AWS Database Encryption SDK mehrere Konfigurationsoptionen bietet, wurden die Standardwerte sorgfältig ausgewählt, um für die meisten Anwendungen praktisch und sicher zu sein. Möglicherweise müssen Sie jedoch Ihre Konfiguration anpassen, um die Leistung zu verbessern, oder eine benutzerdefinierte Funktion in Ihr Design aufnehmen.
Themen
Auswahl einer Programmiersprache
Das AWS Database Encryption SDK für DynamoDB ist in mehreren Programmiersprachen verfügbar. Die Sprachimplementierungen sind so konzipiert, dass sie vollständig interoperabel sind und dieselben Funktionen bieten, obwohl sie auf unterschiedliche Weise implementiert werden können. In der Regel verwenden Sie die Bibliothek, die mit Ihrer Anwendung kompatibel ist.
Auswahl von Schlüsseln zum Umbrechen
Das AWS Database Encryption SDK generiert einen eindeutigen symmetrischen Datenschlüssel, um jedes Feld zu verschlüsseln. Sie müssen die Datenschlüssel nicht konfigurieren, verwalten oder verwenden. Das AWS Database Encryption SDK erledigt das für Sie.
Sie müssen jedoch einen oder mehrere Wrapping-Schlüssel auswählen, um jeden Datenschlüssel zu verschlüsseln. Das AWS Database Encryption SDK unterstützt AWS Key Management Service (AWS KMS) KMS-Schlüssel für symmetrische Verschlüsselung und asymmetrische RSA-KMS-Schlüssel. Es unterstützt auch symmetrische AES-Schlüssel und asymmetrische RSA-Schlüssel, die Sie in verschiedenen Größen bereitstellen. Sie sind für die Sicherheit und Haltbarkeit Ihrer Wrapping Keys verantwortlich. Wir empfehlen Ihnen daher, einen Verschlüsselungsschlüssel in einem Hardware-Sicherheitsmodul oder einem wichtigen Infrastrukturdienst zu verwenden, z. B. AWS KMS
Um Ihre Wrapping-Schlüssel für die Verschlüsselung und Entschlüsselung anzugeben, verwenden Sie einen Schlüsselbund. Je nachdem, welche Art von Schlüsselbund Sie verwenden, können Sie einen oder mehrere Umhüllungsschlüssel desselben oder verschiedener Typen angeben. Wenn Sie zum Umschließen eines Datenschlüssels mehrere Umschließungsschlüssel verwenden, verschlüsselt jeder Umschließungsschlüssel eine Kopie desselben Datenschlüssels. Die verschlüsselten Datenschlüssel (einer pro Umhüllungsschlüssel) werden in der Materialbeschreibung gespeichert, die neben dem verschlüsselten Feld gespeichert ist. Um die Daten zu entschlüsseln, muss das AWS Database Encryption SDK zunächst einen Ihrer Wrapping-Schlüssel verwenden, um einen verschlüsselten Datenschlüssel zu entschlüsseln.
Wir empfehlen, wann immer möglich einen der AWS KMS Schlüsselringe zu verwenden. Das AWS Database Encryption SDK stellt den AWS KMS Schlüsselbund und den AWS KMS hierarchischen Schlüsselbund zur Verfügung, wodurch die Anzahl der Aufrufe von reduziert wird. AWS KMS Um einen AWS KMS key in einem Schlüsselbund anzugeben, verwenden Sie einen unterstützten Schlüsselbezeichner. AWS KMS Wenn Sie den AWS KMS hierarchischen Schlüsselbund verwenden, müssen Sie den Schlüssel-ARN angeben. Einzelheiten zu den Schlüsselkennungen für einen Schlüssel finden Sie unter AWS KMS Schlüsselkennungen im Entwicklerhandbuch. AWS Key Management Service
-
Wenn Sie mit einem AWS KMS Schlüsselbund verschlüsseln, können Sie jeden gültigen Schlüsselbezeichner (Schlüssel-ARN, Aliasname, Alias-ARN oder Schlüssel-ID) für einen KMS-Schlüssel für die symmetrische Verschlüsselung angeben. Wenn Sie einen asymmetrischen RSA-KMS-Schlüssel verwenden, müssen Sie den Schlüssel-ARN angeben.
Wenn Sie beim Verschlüsseln einen Aliasnamen oder einen Alias-ARN für einen KMS-Schlüssel angeben, speichert das AWS Database Encryption SDK den Schlüssel-ARN, der derzeit mit diesem Alias verknüpft ist. Der Alias wird nicht gespeichert. Änderungen am Alias wirken sich nicht auf den KMS-Schlüssel aus, der zum Entschlüsseln Ihrer Datenschlüssel verwendet wird.
-
Standardmäßig entschlüsselt der AWS KMS Schlüsselbund Datensätze im strikten Modus (in dem Sie bestimmte KMS-Schlüssel angeben). Zur Identifizierung AWS KMS keys für die Entschlüsselung müssen Sie einen Schlüssel-ARN verwenden.
Wenn Sie mit einem AWS KMS Schlüsselbund verschlüsseln, speichert das AWS Database Encryption SDK den Schlüssel-ARN des AWS KMS key in der Materialbeschreibung mit dem verschlüsselten Datenschlüssel. Beim Entschlüsseln im strikten Modus überprüft das AWS Database Encryption SDK, ob derselbe Schlüssel-ARN im Schlüsselbund erscheint, bevor es versucht, den Wrapping-Schlüssel zum Entschlüsseln des verschlüsselten Datenschlüssels zu verwenden. Wenn Sie einen anderen Schlüsselbezeichner verwenden, erkennt oder verwendet das AWS Database Encryption SDK diesen nicht AWS KMS key, auch wenn sich die Identifikatoren auf denselben Schlüssel beziehen.
-
Beim Entschlüsseln im Discovery-Modus geben Sie keine Wrapping-Schlüssel an. Zunächst versucht das AWS Database Encryption SDK, den Datensatz mit dem in der Materialbeschreibung gespeicherten Schlüssel-ARN zu entschlüsseln. Wenn das nicht funktioniert, fordert das AWS Database Encryption SDK auf, den Datensatz mithilfe des KMS-Schlüssels AWS KMS zu entschlüsseln, mit dem er verschlüsselt wurde, unabhängig davon, wem dieser KMS-Schlüssel gehört oder Zugriff darauf hat.
Um einen unformatierten AES-Schlüssel oder ein unformatiertes RSA-Schlüsselpaar als Umschließungsschlüssel in einem Schlüsselbund anzugeben, müssen Sie einen Namespace und einen Namen angeben. Beim Entschlüsseln müssen Sie für jeden Raw-Wrapping-Schlüssel exakt denselben Namespace und Namen verwenden, den Sie beim Verschlüsseln verwendet haben. Wenn Sie einen anderen Namespace oder Namen verwenden, erkennt oder verwendet das AWS Database Encryption SDK den Wrapping-Schlüssel nicht, auch wenn das Schlüsselmaterial dasselbe ist.
Einen Discovery-Filter erstellen
Beim Entschlüsseln von Daten, die mit KMS-Schlüsseln verschlüsselt wurden, empfiehlt es sich, die Entschlüsselung im strikten Modus durchzuführen, d. h. die Anzahl der verwendeten Wrapping-Schlüssel auf die von Ihnen angegebenen Schlüssel zu beschränken. Bei Bedarf können Sie die Entschlüsselung jedoch auch im Discovery-Modus durchführen, in dem Sie keine Wrapping-Schlüssel angeben. In diesem Modus AWS KMS können Sie den verschlüsselten Datenschlüssel mithilfe des KMS-Schlüssels entschlüsseln, mit dem er verschlüsselt wurde, unabhängig davon, wem dieser KMS-Schlüssel gehört oder Zugriff darauf hat.
Wenn Sie im Discovery-Modus entschlüsseln müssen, empfehlen wir, immer einen Discovery-Filter zu verwenden, der die Anzahl der KMS-Schlüssel, die verwendet werden können, auf die in einer angegebenen AWS-Konto UND-Partition beschränkt. https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html Der Discovery-Filter ist optional, aber es handelt sich um eine bewährte Methode.
Ermitteln Sie anhand der folgenden Tabelle den Partitionswert für Ihren Discovery-Filter.
| Region | Partition |
|---|---|
| AWS-Regionen | aws |
| Regionen in China | aws-cn |
| AWS GovCloud (US) Regions | aws-us-gov |
Das folgende Beispiel zeigt, wie Sie einen Discovery-Filter erstellen. Bevor Sie den Code verwenden, ersetzen Sie die Beispielwerte durch gültige Werte für Ihre AWS-Konto UND-Partition.
Arbeiten mit Datenbanken mit mehreren Mandanten
Mit dem AWS Database Encryption SDK können Sie die clientseitige Verschlüsselung für Datenbanken mit einem gemeinsamen Schema konfigurieren, indem Sie jeden Mandanten mit unterschiedlichen Verschlüsselungsmaterialien isolieren. Wenn Sie eine mehrinstanzenfähige Datenbank in Betracht ziehen, nehmen Sie sich etwas Zeit, um Ihre Sicherheitsanforderungen zu überprüfen und zu erfahren, wie sich Mehrmandantenfähigkeit auf sie auswirken könnte. Beispielsweise kann die Verwendung einer mehrinstanzenfähigen Datenbank Ihre Fähigkeit beeinträchtigen, das AWS Database Encryption SDK mit einer anderen serverseitigen Verschlüsselungslösung zu kombinieren.
Wenn mehrere Benutzer Verschlüsselungsvorgänge in Ihrer Datenbank ausführen, können Sie einen der AWS KMS Schlüsselringe verwenden, um jedem Benutzer einen eigenen Schlüssel zur Verfügung zu stellen, den er für seine kryptografischen Operationen verwenden kann. Die Verwaltung der Datenschlüssel für eine mandantenfähige clientseitige Verschlüsselungslösung kann kompliziert sein. Wir empfehlen, Ihre Daten nach Möglichkeit nach Mandanten zu organisieren. Wenn der Mandant anhand der Primärschlüsselwerte identifiziert wird (z. B. der Partitionsschlüssel in einer Amazon DynamoDB-Tabelle), ist die Verwaltung Ihrer Schlüssel einfacher.
Sie können den AWS KMS Schlüsselbund verwenden, um jeden Mandanten durch einen eigenen AWS KMS Schlüsselbund und zu isolieren. AWS KMS keys Je nachdem, wie viele AWS KMS Anrufe pro Mandant getätigt werden, empfiehlt es sich, den AWS KMS hierarchischen Schlüsselbund zu verwenden, um die Anzahl der Anrufe zu minimieren. AWS KMS Beim AWS KMS hierarchischen Schlüsselbund handelt es sich um eine Lösung zum Zwischenspeichern kryptografischer Materialien, die die Anzahl der AWS KMS Aufrufe reduziert, indem AWS KMS geschützte Zweigschlüssel verwendet werden, die in einer Amazon DynamoDB-Tabelle gespeichert sind, und anschließend das für Verschlüsselungs- und Entschlüsselungsvorgänge verwendete Zweigschlüsselmaterial lokal zwischenspeichert. Sie müssen den hierarchischen Schlüsselbund verwenden, um eine durchsuchbare Verschlüsselung in Ihrer Datenbank zu AWS KMS implementieren. Durchsuchbare Verschlüsselung
Signierte Beacons erstellen
Das AWS Database Encryption SDK verwendet Standard-Beacons und zusammengesetzte Beacons, um durchsuchbare Verschlüsselungslösungen bereitzustellen, mit denen Sie verschlüsselte Datensätze durchsuchen können, ohne die gesamte abgefragte Datenbank zu entschlüsseln. Das AWS Database Encryption SDK unterstützt jedoch auch signierte Beacons, die vollständig aus signierten Klartext-Feldern konfiguriert werden können. Signierte Beacons sind eine Art von zusammengesetzten Beacons, die komplexe Abfragen für Felder und Felder indizieren und ausführen. SIGN_ONLY SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
Wenn Sie beispielsweise eine mehrinstanzenfähige Datenbank haben, möchten Sie vielleicht ein signiertes Beacon erstellen, mit dem Sie Ihre Datenbank nach Datensätzen abfragen können, die mit dem Schlüssel eines bestimmten Mandanten verschlüsselt wurden. Weitere Informationen finden Sie unter Abfragen von Beacons in einer mandantenfähigen Datenbank.
Sie müssen den AWS KMS hierarchischen Schlüsselbund verwenden, um signierte Beacons zu erstellen.
Um ein signiertes Beacon zu konfigurieren, geben Sie die folgenden Werte an.
Sie können Ihre signierten Teile in lokal oder global definierten Listen definieren. Wir empfehlen, Ihre signierten Teile in einer globalen Liste in der Beacon-Version zu definieren, wann immer dies möglich ist. Indem Sie signierte Teile global definieren, können Sie jedes Teil einmal definieren und die Teile dann in mehreren zusammengesetzten Beacon-Konfigurationen wiederverwenden. Wenn Sie beabsichtigen, ein signiertes Teil nur einmal zu verwenden, können Sie es in einer lokalen Liste in der signierten Beacon-Konfiguration definieren. Sie können in Ihrer Konstruktorliste sowohl auf lokale als auch auf globale Teile verweisen.
Wenn Sie Ihre signierten Teilelisten global definieren, müssen Sie eine Liste von Konstruktorteilen bereitstellen, in der alle Möglichkeiten aufgeführt sind, wie das signierte Beacon die Felder in Ihrer Beacon-Konfiguration zusammenstellen kann.
Anmerkung
Um signierte Teilelisten global zu definieren, müssen Sie Version 3.2 oder höher des AWS Database Encryption SDK verwenden. Stellen Sie die neue Version allen Lesern zur Verfügung, bevor Sie neue Teile global definieren.
Sie können bestehende Beacon-Konfigurationen nicht aktualisieren, um signierte Teilelisten global zu definieren.
- Name des Beacons
-
Der Name, den Sie bei der Abfrage des Beacons verwenden.
Ein signierter Beacon-Name kann nicht mit einem unverschlüsselten Feld identisch sein. Keine zwei Beacons können denselben Beacon-Namen haben.
- Geteilter Charakter
-
Das Zeichen, das verwendet wurde, um die Teile zu trennen, aus denen dein signiertes Leuchtfeuer besteht.
Das geteilte Zeichen darf in den Klartextwerten der Felder, aus denen das signierte Beacon aufgebaut ist, nicht vorkommen.
- Liste der signierten Bauteile
-
Identifiziert die signierten Felder, die im signierten Beacon enthalten sind.
Jeder Teil muss einen Namen, eine Quelle und ein Präfix enthalten. Die Quelle ist das
SIGN_ONLYSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTOR-Feld, das das Teil identifiziert. Bei der Quelle muss es sich um einen Feldnamen oder einen Index handeln, der auf den Wert eines verschachtelten Feldes verweist. Wenn Ihr Teilname die Quelle identifiziert, können Sie die Quelle weglassen und das AWS Database Encryption SDK verwendet den Namen automatisch als Quelle. Wir empfehlen, wann immer möglich die Quelle als Teilnamen anzugeben. Das Präfix kann eine beliebige Zeichenfolge sein, es muss jedoch eindeutig sein. Keine zwei signierten Teile in einem signierten Beacon können dasselbe Präfix haben. Wir empfehlen, einen kurzen Wert zu verwenden, der das Teil von anderen Teilen unterscheidet, die vom zusammengesetzten Beacon bedient werden.Wir empfehlen, Ihre signierten Teile nach Möglichkeit global zu definieren. Sie könnten erwägen, ein signiertes Teil lokal zu definieren, wenn Sie es nur in einem zusammengesetzten Beacon verwenden möchten. Ein lokal definiertes Teil kann nicht dasselbe Präfix oder denselben Namen wie ein global definiertes Teil haben.
- Konstruktorliste (optional)
-
Identifiziert die Konstruktoren, die die verschiedenen Arten definieren, wie die signierten Teile durch das signierte Beacon zusammengebaut werden können.
Wenn Sie keine Konstruktorliste angeben, stellt das AWS Database Encryption SDK das signierte Beacon mit dem folgenden Standardkonstruktor zusammen.
-
Alle signierten Teile in der Reihenfolge, in der sie der signierten Teileliste hinzugefügt wurden
-
Alle Teile sind erforderlich
- Konstruktoren
-
Jeder Konstruktor ist eine geordnete Liste von Konstruktorteilen, die eine Methode definiert, wie das signierte Beacon zusammengebaut werden kann. Die Konstruktorteile werden in der Reihenfolge zusammengefügt, in der sie der Liste hinzugefügt wurden, wobei jedes Teil durch das angegebene Trennzeichen getrennt wird.
Jeder Konstruktorteil benennt einen signierten Teil und definiert, ob dieser Teil im Konstruktor erforderlich oder optional ist. Wenn Sie beispielsweise ein signiertes Beacon für, und abfragen möchten
Field1Field1.Field2Field1.Field2.Field3, markieren Sie undField3als optionalField2und erstellen Sie einen Konstruktor.Jeder Konstruktor muss mindestens ein erforderliches Teil enthalten. Wir empfehlen, den ersten Teil in jedem Konstruktor erforderlich zu machen, damit Sie den
BEGINS_WITHOperator in Ihren Abfragen verwenden können.Ein Konstruktor ist erfolgreich, wenn alle erforderlichen Teile im Datensatz vorhanden sind. Wenn Sie einen neuen Datensatz schreiben, bestimmt das signierte Beacon anhand der Konstruktorliste, ob das Beacon aus den angegebenen Werten zusammengestellt werden kann. Es versucht, das Beacon in der Reihenfolge zusammenzustellen, in der die Konstruktoren zur Konstruktorliste hinzugefügt wurden, und es verwendet den ersten Konstruktor, der erfolgreich ist. Wenn kein Konstruktor erfolgreich ist, wird das Beacon nicht in den Datensatz geschrieben.
Alle Leser und Autoren sollten dieselbe Reihenfolge der Konstruktoren angeben, um sicherzustellen, dass ihre Abfrageergebnisse korrekt sind.
Verwenden Sie die folgenden Verfahren, um Ihre eigene Konstruktorliste anzugeben.
-
Erstellen Sie für jedes signierte Teil ein Konstruktorteil, um zu definieren, ob dieses Teil erforderlich ist oder nicht.
Der Name des Konstruktorteils muss der Name des signierten Felds sein.
Das folgende Beispiel zeigt, wie ein Konstruktorteil für ein signiertes Feld erstellt wird.
-
Erstellen Sie mithilfe der Konstruktorteile, die Sie in Schritt 1 erstellt haben, einen Konstruktor für jede mögliche Art, wie das signierte Beacon zusammengebaut werden kann.
Wenn Sie beispielsweise
Field1.Field2.Field3und abfragen möchtenField4.Field2.Field3, müssen Sie zwei Konstruktoren erstellen.Field1undField4können beide erforderlich sein, da sie in zwei separaten Konstruktoren definiert sind. -
Erstellen Sie eine Konstruktorliste, die alle Konstruktoren enthält, die Sie in Schritt 2 erstellt haben.
-
Geben Sie an
constructorList, wann Sie Ihr signiertes Beacon erstellen.
-