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.
AWS KMS Hierarchische Schlüsselanhänger
Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK umbenannt. AWS Dieses Entwicklerhandbuch enthält weiterhin Informationen zum DynamoDB Encryption Client. |
Anmerkung
Seit dem 24. Juli 2023 werden Branch-Schlüssel, die während der Developer Preview erstellt wurden, nicht unterstützt. Erstellen Sie neue Branch-Schlüssel, um den Branch-Schlüsselspeicher, den Sie während der Developer Preview erstellt haben, weiterhin verwenden zu können.
Mit dem AWS KMS hierarchischen Schlüsselbund können Sie Ihre kryptografischen Materialien mit einem KMS-Schlüssel mit symmetrischer Verschlüsselung schützen, ohne AWS KMS jedes Mal, wenn Sie einen Datensatz ver- oder entschlüsseln, erneut aufrufen zu müssen. Es ist eine gute Wahl für Anwendungen, bei denen die Anzahl der Aufrufe minimiert werden muss AWS KMS, und für Anwendungen, die kryptografisches Material wiederverwenden können, ohne ihre Sicherheitsanforderungen zu verletzen.
Der hierarchische Schlüsselbund ist eine Lösung zum Zwischenspeichern von kryptografischem Material, die die Anzahl der AWS KMS Aufrufe reduziert, indem AWS KMS geschützte Branch-Schlüssel verwendet werden, die in einer Amazon DynamoDB-Tabelle gespeichert sind, und anschließend das bei Verschlüsselungs- und Entschlüsselungsvorgängen verwendete Zweigschlüsselmaterial lokal zwischengespeichert wird. Die DynamoDB-Tabelle dient als Branch-Schlüsselspeicher, der Branch-Schlüssel verwaltet und schützt. Sie speichert den aktiven Branch-Schlüssel und alle vorherigen Versionen des Branch-Schlüssels. Der aktive Zweigschlüssel ist die neueste Version des Zweigschlüssels. Der hierarchische Schlüsselbund verwendet einen eindeutigen Datenschlüssel, um jedes Feld zu verschlüsseln, und verschlüsselt jeden Datenschlüssel mit einem eindeutigen Umschließungsschlüssel, der vom aktiven Zweigschlüssel abgeleitet wird. Der hierarchische Schlüsselbund hängt von der Hierarchie ab, die zwischen aktiven Zweigschlüsseln und ihren abgeleiteten Umschließungsschlüsseln festgelegt wurde.
Der hierarchische Schlüsselbund verwendet in der Regel jede Version des Zweigschlüssels, um mehrere Anfragen zu erfüllen. Sie kontrollieren jedoch, in welchem Umfang aktive Zweigschlüssel wiederverwendet werden, und Sie bestimmen, wie oft der aktive Zweigschlüssel rotiert wird. Die aktive Version des Abzweigschlüssels bleibt aktiv, bis Sie ihn drehen. Frühere Versionen des aktiven Zweigschlüssels werden nicht zur Ausführung von Verschlüsselungsvorgängen verwendet, sie können jedoch weiterhin abgefragt und bei Entschlüsselungsvorgängen verwendet werden.
Wenn Sie den hierarchischen Schlüsselbund instanziieren, erstellt er einen lokalen Cache. Sie geben ein Cache-Limit an, das die maximale Zeitspanne definiert, für die die Branch-Schlüsselmaterialien im lokalen Cache gespeichert werden, bevor sie ablaufen und aus dem Cache entfernt werden. Der hierarchische Schlüsselbund führt einen AWS KMS Aufruf durch, um den Zweigschlüssel zu entschlüsseln und die Zweigschlüsselmaterialien zusammenzustellen, wenn a zum ersten Mal in einem Vorgang angegeben branch-key-id
wird. Anschließend werden die Materialien der Verzweigungsschlüssel im lokalen Cache gespeichert und für alle Verschlüsselungs- und Entschlüsselungsvorgänge, die dies spezifizieren, wiederverwendet, bis das Cache-Limit abläuft. branch-key-id
Das Speichern von Zweigschlüsselmaterialien im lokalen Cache reduziert die Anzahl der Aufrufe. AWS KMS Stellen Sie sich beispielsweise ein Cache-Limit von 15 Minuten vor. Wenn Sie 10.000 Verschlüsselungsvorgänge innerhalb dieses Cache-Limits ausführen, müsste der herkömmliche AWS KMS Schlüsselbund 10.000 AWS KMS Aufrufe tätigen, um 10.000 Verschlüsselungsvorgänge zu erfüllen. Wenn Sie einen aktiven Schlüsselbund habenbranch-key-id
, muss der hierarchische Schlüsselbund nur einen AWS KMS Aufruf tätigen, um 10.000 Verschlüsselungsvorgänge abzuwickeln.
Der lokale Cache besteht aus zwei Partitionen, einer für Verschlüsselungsvorgänge und einer zweiten für Entschlüsselungsvorgänge. Die Verschlüsselungspartition speichert die aus dem aktiven Zweigschlüssel zusammengestellten Materialien und verwendet sie für alle Verschlüsselungsvorgänge wieder, bis das Cache-Limit abläuft. In der Entschlüsselungspartition werden die Materialien für Zweigschlüssel gespeichert, die für andere Versionen von Zweigschlüsseln zusammengestellt wurden, die bei Entschlüsselungsvorgängen identifiziert wurden. In der Entschlüsselungspartition können mehrere aktive Versionen von Zweigschlüsselmaterialien gleichzeitig gespeichert werden. Wenn sie für die Verwendung eines Branch-Schlüssel-ID-Anbieters für eine Mehrmandantendatenbank konfiguriert ist, kann die verschlüsselte Partition auch mehrere Versionen von Branch-Schlüsselmaterialien gleichzeitig speichern. Weitere Informationen finden Sie unter Verwenden Sie den hierarchischen Schlüsselbund bei Mehrmandantendatenbanken.
Anmerkung
Alle Erwähnungen des hierarchischen Schlüsselbundes im AWS Database Encryption SDK beziehen sich auf den hierarchischen Schlüsselbund. AWS KMS
Themen
Funktionsweise
In den folgenden exemplarischen Vorgehensweisen wird beschrieben, wie der hierarchische Schlüsselbund Verschlüsselungs- und Entschlüsselungsmaterialien zusammenstellt und welche verschiedenen Aufrufe der Schlüsselbund für Verschlüsselungs- und Entschlüsselungsvorgänge vornimmt. Technische Einzelheiten zur Ableitung von Schlüsseln und zur Verschlüsselung von Klartext-Datenschlüsseln finden Sie unter Technische Details zum hierarchischen Schlüsselbund.AWS KMS
Verschlüsseln und signieren
In der folgenden exemplarischen Vorgehensweise wird beschrieben, wie der hierarchische Schlüsselbund Verschlüsselungsmaterialien zusammenstellt und daraus einen eindeutigen Umschließungsschlüssel ableitet.
-
Die Verschlüsselungsmethode fragt den hierarchischen Schlüsselbund nach Verschlüsselungsmaterialien. Der Schlüsselbund generiert einen Klartext-Datenschlüssel und überprüft dann, ob sich im lokalen Cache gültiges Verzweigungsmaterial für die Generierung des Wrapping-Schlüssels befindet. Wenn gültiges Schlüsselmaterial für die Zweige vorhanden ist, fährt der Schlüsselbund mit Schritt 5 fort.
-
Wenn kein gültiges Material für Zweigschlüssel vorhanden ist, fragt der hierarchische Schlüsselbund den Schlüsselspeicher der Filiale nach dem aktiven Zweigschlüssel ab.
-
Der Branch-Schlüsselspeicher ruft AWS KMS auf, um den aktiven Branch-Schlüssel zu entschlüsseln, und gibt den aktiven Branch-Schlüssel im Klartext zurück. Daten, die den aktiven Zweigschlüssel identifizieren, werden serialisiert, um zusätzliche authentifizierte Daten (AAD) beim Entschlüsselungsaufruf von bereitzustellen. AWS KMS
-
Der Zweigschlüsselspeicher gibt den Klartext-Zweigschlüssel und Daten, die ihn identifizieren, wie z. B. die Version des Zweigschlüssels, zurück.
-
-
Der hierarchische Schlüsselbund stellt die Materialien der Verzweigungsschlüssel (die Klartext-Version für den Zweigschlüssel und die Zweigschlüsselversion) zusammen und speichert eine Kopie davon im lokalen Cache.
-
Der hierarchische Schlüsselbund leitet aus dem Klartext-Verzweigungsschlüssel und einem 16-Byte-Zufallssalz einen eindeutigen Umbruchschlüssel ab. Er verwendet den abgeleiteten Umschließungsschlüssel, um eine Kopie des Klartext-Datenschlüssels zu verschlüsseln.
Die Verschlüsselungsmethode verwendet die Verschlüsselungsmaterialien, um den Datensatz zu verschlüsseln und zu signieren. Weitere Informationen darüber, wie Datensätze im AWS Database Encryption SDK verschlüsselt und signiert werden, finden Sie unter Verschlüsseln und Signieren.
Entschlüsseln und verifizieren
In der folgenden exemplarischen Vorgehensweise wird beschrieben, wie der hierarchische Schlüsselbund Entschlüsselungsmaterialien zusammenstellt und den verschlüsselten Datenschlüssel entschlüsselt.
-
Die Entschlüsselungsmethode identifiziert den verschlüsselten Datenschlüssel aus dem Materialbeschreibungsfeld des verschlüsselten Datensatzes und übergibt ihn an den hierarchischen Schlüsselbund.
-
Der hierarchische Schlüsselbund deserialisiert Daten, die den verschlüsselten Datenschlüssel identifizieren, einschließlich der Version des Zweigschlüssels, des 16-Byte-Salts und anderer Informationen, die beschreiben, wie der Datenschlüssel verschlüsselt wurde.
Weitere Informationen finden Sie unter AWS KMSTechnische Details zum hierarchischen Schlüsselbund.
-
Mit dem hierarchischen Schlüsselbund wird geprüft, ob sich im lokalen Cache gültiges Zweigschlüsselmaterial befindet, das mit der in Schritt 2 identifizierten Version des Zweigschlüssels übereinstimmt. Wenn gültiges Schlüsselmaterial für die Zweige vorhanden ist, fährt der Schlüsselbund mit Schritt 6 fort.
-
Wenn kein gültiges Material für Zweigschlüssel vorhanden ist, fragt der hierarchische Schlüsselbund den Zweigschlüsselspeicher nach dem Zweigschlüssel ab, der mit der in Schritt 2 identifizierten Version des Zweigschlüssels übereinstimmt.
-
Der Branch-Schlüsselspeicher ruft AWS KMS auf, um den Branch-Schlüssel zu entschlüsseln, und gibt den aktiven Branch-Schlüssel im Klartext zurück. Daten, die den aktiven Branch-Schlüssel identifizieren, werden serialisiert, um zusätzliche authentifizierte Daten (AAD) beim Entschlüsselungsaufruf von bereitzustellen. AWS KMS
-
Der Zweigschlüsselspeicher gibt den Klartext-Zweigschlüssel und Daten, die ihn identifizieren, wie z. B. die Version des Zweigschlüssels, zurück.
-
-
Der hierarchische Schlüsselbund stellt die Materialien der Verzweigungsschlüssel (die Klartext-Version für den Zweigschlüssel und die Zweigschlüsselversion) zusammen und speichert eine Kopie davon im lokalen Cache.
-
Der hierarchische Schlüsselbund verwendet die zusammengestellten Zweigschlüsselmaterialien und das in Schritt 2 identifizierte 16-Byte-Salt, um den eindeutigen Wrapping-Schlüssel zu reproduzieren, mit dem der Datenschlüssel verschlüsselt wurde.
-
Der hierarchische Schlüsselbund verwendet den reproduzierten Wrapping-Schlüssel, um den Datenschlüssel zu entschlüsseln, und gibt den Klartext-Datenschlüssel zurück.
Bei der Entschlüsselungsmethode werden die Entschlüsselungsmaterialien und der Klartext-Datenschlüssel verwendet, um den Datensatz zu entschlüsseln und zu verifizieren. Weitere Informationen darüber, wie Datensätze im AWS Database Encryption SDK entschlüsselt und verifiziert werden, finden Sie unter Entschlüsseln und Überprüfen.
Voraussetzungen
Das AWS Database Encryption SDK benötigt kein AWS-Konto und ist auch von keinem abhängig. AWS -Service Der hierarchische Schlüsselbund hängt jedoch von Amazon DynamoDB AWS KMS ab.
Um einen hierarchischen Schlüsselbund verwenden zu können, benötigen Sie eine symmetrische Verschlüsselung mit kms:Decrypt-Berechtigungen. AWS KMS key Sie können auch einen Schlüssel für mehrere Regionen mit symmetrischer Verschlüsselung verwenden. Ausführliche Informationen zu den Berechtigungen für AWS KMS keys finden Sie unter Authentifizierung und Zugriffskontrolle im AWS Key Management Service Entwicklerhandbuch.
Bevor Sie einen hierarchischen Schlüsselbund erstellen und verwenden können, müssen Sie Ihren Branch-Schlüsselspeicher erstellen und ihn mit Ihrem ersten aktiven Branch-Schlüssel auffüllen.
- Schritt 1: Konfigurieren Sie einen neuen Schlüsselspeicherdienst
-
Der Schlüsselspeicherdienst bietet verschiedene Operationen, z. B.
CreateKeyStore
undCreateKey
, mit denen Sie die Voraussetzungen für den hierarchischen Schlüsselbund zusammenstellen und Ihren Branch-Schlüsselspeicher verwalten können.Im folgenden Beispiel wird ein Schlüsselspeicherdienst erstellt. Sie müssen einen DynamoDB-Tabellennamen angeben, der als Name Ihres Branch-Schlüsselspeichers dient, einen logischen Namen für den Branch-Schlüsselspeicher und den KMS-Schlüssel-ARN, der den KMS-Schlüssel identifiziert, der Ihre Branch-Schlüssel schützt.
Der Name des logischen Schlüsselspeichers ist kryptografisch an alle in der Tabelle gespeicherten Daten gebunden, um DynamoDB-Wiederherstellungsvorgänge zu vereinfachen. Der Name des logischen Schlüsselspeichers kann mit Ihrem DynamoDB-Tabellennamen identisch sein, muss es aber nicht. Es wird dringend empfohlen, Ihren DynamoDB-Tabellennamen als logischen Tabellennamen anzugeben, wenn Sie Ihren Schlüsselspeicherdienst zum ersten Mal konfigurieren. Sie müssen immer denselben logischen Tabellennamen angeben. Falls sich der Name Ihres Branch-Schlüsselspeichers nach der Wiederherstellung Ihrer DynamoDB-Tabelle aus einer Sicherung ändert, wird der Name des logischen Schlüsselspeichers dem von Ihnen angegebenen DynamoDB-Tabellennamen zugeordnet, um sicherzustellen, dass der hierarchische Schlüsselbund weiterhin auf Ihren Branch-Schlüsselspeicher zugreifen kann.
- Schritt 2: Rufen
CreateKeyStore
Sie auf, um einen Branch-Schlüsselspeicher zu erstellen -
Mit dem folgenden Vorgang wird der Branch-Schlüsselspeicher erstellt, der Ihre Filialschlüssel dauerhaft schützt.
Der
CreateKeyStore
Vorgang erstellt eine DynamoDB-Tabelle mit dem Tabellennamen, den Sie in Schritt 1 angegeben haben, und den folgenden erforderlichen Werten.Partitionsschlüssel Sortierschlüssel Basistabelle branch-key-id
type
Anmerkung
Sie können die DynamoDB-Tabelle, die als Ihr Branch-Schlüsselspeicher dient, manuell erstellen, anstatt den
CreateKeyStore
Vorgang zu verwenden. Wenn Sie den Branch-Schlüsselspeicher manuell erstellen möchten, müssen Sie die folgenden Zeichenfolgenwerte für die Partitions- und Sortierschlüssel angeben:Partitionsschlüssel:
branch-key-id
Sortierschlüssel:
type
- Schritt 3: Rufen Sie
CreateKey
auf, um einen neuen aktiven Branch-Schlüssel zu erstellen -
Der folgende Vorgang erstellt einen neuen aktiven Verzweigungsschlüssel unter Verwendung des KMS-Schlüssels, den Sie in Schritt 1 angegeben haben, und fügt den aktiven Verzweigungsschlüssel zu der DynamoDB-Tabelle hinzu, die Sie in Schritt 2 erstellt haben.
Wenn Sie aufrufen
CreateKey
, können Sie wählen, ob Sie die folgenden optionalen Werte angeben möchten.-
branchKeyIdentifier
: definiert eine benutzerdefiniertebranch-key-id
.Um einen benutzerdefinierten zu erstellen
branch-key-id
, müssen Sie demencryptionContext
Parameter auch einen zusätzlichen Verschlüsselungskontext hinzufügen. -
encryptionContext
: definiert einen optionalen Satz nicht geheimer Schlüssel-Wert-Paare, der zusätzliche authentifizierte Daten (AAD) in dem Verschlüsselungskontext bereitstellt, der im kms: -Aufruf enthalten ist. GenerateDataKeyWithoutPlaintextDieser zusätzliche Verschlüsselungskontext wird mit dem Präfix angezeigt.
aws-crypto-ec:
Zunächst generiert die
CreateKey
Operation die folgenden Werte.-
Ein Universally Unique Identifier
(UUID) der Version 4 für branch-key-id
(sofern Sie keinen benutzerdefinierten Namen angegeben haben).branch-key-id
-
Eine UUID der Version 4 für die Branch Key-Version
-
A
timestamp
im Datums- und Uhrzeitformat nach ISO 8601in koordinierter Weltzeit (UTC).
Dann ruft der
CreateKey
Vorgang kms: GenerateDataKeyWithoutPlaintext mit der folgenden Anforderung auf.{ "EncryptionContext": { "branch-key-id" : "
branch-key-id
", "type" : "type
", "create-time" : "timestamp
", "logical-key-store-name" : "the logical table name for your branch key store
", "kms-arn" :the KMS key ARN
, "hierarchy-version" : "1", "aws-crypto-ec:contextKey
": "contextValue
" }, "KeyId": "the KMS key ARN you specified in Step 1
", "NumberOfBytes": "32" }Anmerkung
Der
CreateKey
Vorgang erstellt einen aktiven Branch-Schlüssel und einen Beacon-Schlüssel, auch wenn Sie Ihre Datenbank nicht für durchsuchbare Verschlüsselung konfiguriert haben. Beide Schlüssel werden in Ihrem Filialschlüsselspeicher gespeichert. Weitere Informationen finden Sie unter Verwenden des hierarchischen Schlüsselbundes für durchsuchbare Verschlüsselung.Als Nächstes ruft der
CreateKey
Vorgang kms: ReEncrypt auf, um einen aktiven Datensatz für den Branch-Schlüssel zu erstellen, indem der Verschlüsselungskontext aktualisiert wird.Zuletzt ruft der
CreateKey
Vorgang ddb: TransactWriteItems auf, um ein neues Element zu schreiben, das den Verzweigungsschlüssel in der Tabelle, die Sie in Schritt 2 erstellt haben, beibehält. Das Element hat die folgenden Attribute.{ "branch-key-id" :
branch-key-id
, "type" : "branch:ACTIVE", "enc" :the branch key returned by the GenerateDataKeyWithoutPlaintext call
, "version": "branch:version:the branch key version UUID
", "create-time" : "timestamp
", "kms-arn" : "the KMS key ARN you specified in Step 1
", "hierarchy-version" : "1", "aws-crypto-ec:contextKey
": "contextValue
" } -
Erstellen Sie einen hierarchischen Schlüsselbund
Um den hierarchischen Schlüsselbund zu initialisieren, müssen Sie die folgenden Werte angeben:
-
Name eines Zweigschlüsselspeichers
Der Name der DynamoDB-Tabelle, die Sie als Branch-Schlüsselspeicher erstellt haben.
-
Ein Cache-Limit Time to Live (TTL)
Die Zeitspanne in Sekunden, in der ein Eintrag für Branch-Schlüsselmaterialien im lokalen Cache verwendet werden kann, bevor er abläuft. Das Cache-Limit TTL bestimmt, wie oft der Client anruft, AWS KMS um die Verwendung der Branch-Schlüssel zu autorisieren. Dieser Wert muss größer als null sein. Wenn das Cache-Limit TTL abläuft, wird der Eintrag aus dem lokalen Cache entfernt.
-
Eine Schlüssel-ID für den Zweig
Der
branch-key-id
, der den aktiven Filialschlüssel in Ihrem Filialschlüsselspeicher identifiziert.Anmerkung
Um den hierarchischen Schlüsselbund für die Verwendung durch mehrere Mandanten zu initialisieren, müssen Sie anstelle eines einen einen Lieferanten für die Filialschlüssel-ID angeben.
branch-key-id
Weitere Informationen finden Sie unter Verwenden Sie den hierarchischen Schlüsselbund bei Mehrmandantendatenbanken. -
(Optional) Eine Liste von Grant-Tokens
Wenn Sie den Zugriff auf den KMS-Schlüssel in Ihrem hierarchischen Schlüsselbund mit Grants steuern, müssen Sie bei der Initialisierung des Schlüsselbunds alle erforderlichen Grant-Token angeben.
Die folgenden Beispiele zeigen, wie ein hierarchischer Schlüsselbund mit dem AWS Database Encryption SDK für DynamoDB-Client initialisiert wird. Im folgenden Beispiel wird ein Cache-Limit (TTL) von 600 Sekunden angegeben.
Rotieren Sie Ihren aktiven Zweigschlüssel
Für jeden Filialschlüssel kann es jeweils nur eine aktive Version geben. Der hierarchische Schlüsselbund verwendet in der Regel jede aktive Version des Zweigschlüssels, um mehrere Anfragen zu erfüllen. Sie kontrollieren jedoch, in welchem Umfang aktive Zweigschlüssel wiederverwendet werden, und Sie legen fest, wie oft der aktive Zweigschlüssel rotiert wird.
Zweigschlüssel werden nicht zur Verschlüsselung von Klartext-Datenschlüsseln verwendet. Sie werden verwendet, um die eindeutigen Wrapping-Schlüssel abzuleiten, mit denen Klartext-Datenschlüssel verschlüsselt werden. Bei der Ableitung des Wrapping-Schlüssels wird ein einzigartiger 32-Byte-Wrapping-Schlüssel mit 28 Byte Zufälligkeit erzeugt. Das bedeutet, dass aus einem Zweigschlüssel mehr als 79 Oktillionen oder 2.96 einzigartige Wrapping-Schlüssel abgeleitet werden können, bevor es zu einem kryptografischen Verschleiß kommt. Trotz dieses sehr geringen Risikos der Datenerschöpfung müssen Sie Ihre aktiven Filialschlüssel möglicherweise aufgrund von Geschäfts- oder Vertragsbestimmungen oder behördlichen Vorschriften wechseln.
Die aktive Version des Zweigschlüssels bleibt aktiv, bis Sie ihn rotieren. Frühere Versionen des aktiven Zweigschlüssels werden nicht zur Ausführung von Verschlüsselungsvorgängen verwendet und können auch nicht zum Ableiten neuer Umschließungsschlüssel verwendet werden. Sie können jedoch weiterhin abgefragt werden und bieten Umschließungsschlüssel zum Entschlüsseln der Datenschlüssel, die sie verschlüsselt haben, während sie aktiv waren.
Verwenden Sie den SchlüsselspeicherdienstVersionKey
, um Ihren aktiven Filialschlüssel zu rotieren. Wenn Sie den aktiven Zweigschlüssel rotieren, wird ein neuer Zweigschlüssel erstellt, der die vorherige Version ersetzt. Das branch-key-id
ändert sich nicht, wenn Sie den aktiven Abzweigschlüssel drehen. Sie müssen den Schlüssel angebenbranch-key-id
, der den aktuell aktiven Abzweigschlüssel identifiziert, wenn Sie anrufenVersionKey
.
Verwenden Sie den hierarchischen Schlüsselbund bei Mehrmandantendatenbanken
Sie können die Schlüsselhierarchie zwischen aktiven Zweigschlüsseln und ihren abgeleiteten Umschließungsschlüsseln verwenden, um Multitenant-Datenbanken zu unterstützen, indem Sie für jeden Mandanten in Ihrer Datenbank einen Verzweigungsschlüssel erstellen. Der hierarchische Schlüsselbund verschlüsselt und signiert dann alle Daten für einen bestimmten Mandanten mit seinem eindeutigen Zweigschlüssel. Auf diese Weise können Sie mandantenfähige Daten in einer einzigen Datenbank speichern und Mandantendaten anhand des Zweigschlüssels isolieren.
Jeder Mandant hat seinen eigenen Zweigschlüssel, der durch einen eindeutigen branch-key-id
Schlüssel definiert ist. Es kann jeweils nur eine aktive Version von branch-key-id
jeder Version geben.
Lieferant der Filialschlüssel-ID
Bevor Sie Ihren hierarchischen Schlüsselbund für die Verwendung durch mehrere Mandanten initialisieren können, müssen Sie für jeden Mandanten einen Branch-Schlüssel und einen Branch-Schlüssel-ID-Lieferanten erstellen. Der Anbieter der Filialschlüssel-ID verwendet die im Verschlüsselungskontext gespeicherten Felder, um zu ermitteln, welcher Branchschlüssel des Mandanten zum Entschlüsseln eines Datensatzes erforderlich ist. Standardmäßig sind nur die Partitions- und Sortierschlüssel im Verschlüsselungskontext enthalten. Sie können die SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
kryptografische Aktion jedoch verwenden, um zusätzliche Felder in den Verschlüsselungskontext aufzunehmen.
Anmerkung
Um die SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
kryptografische Aktion verwenden zu können, müssen Sie Version 3.3 oder höher des AWS Database Encryption SDK verwenden. Stellen Sie die neue Version für alle Lesegeräte bereit, bevor Sie Ihr Datenmodell so aktualisieren, dass es diese enthältSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT
.
Sie können den Anbieter für die Filialschlüssel-ID verwenden, um einen benutzerfreundlichen Namen für Ihren Mandanten branch-key-ids
zu erstellen, damit Sie den richtigen Namen branch-key-id
für einen Mandanten leicht erkennen können. Mit dem Anzeigenamen können Sie beispielsweise auf einen Filialschlüssel als tenant1
statt auf verweisenb3f61619-4d35-48ad-a275-050f87e15122
.
Für Entschlüsselungsvorgänge können Sie entweder einen einzelnen hierarchischen Schlüsselbund statisch konfigurieren, um die Entschlüsselung auf einen einzelnen Mandanten zu beschränken, oder Sie können den Branch-Schlüssel-ID-Anbieter verwenden, um zu ermitteln, welcher Mandant für die Entschlüsselung eines Datensatzes verantwortlich ist.
Folgen Sie zunächst Schritt 1 und Schritt 2 der Verfahren mit den Voraussetzungen. Verwenden Sie dann die folgenden Verfahren, um einen Zweigschlüssel für jeden Mandanten zu erstellen, einen Anbieter für die Zweigschlüssel-ID zu erstellen und Ihren hierarchischen Schlüsselbund für die Verwendung durch mehrere Mandanten zu initialisieren.
- Schritt 1: Erstellen Sie einen Zweigschlüssel für jeden Mandanten in Ihrer Datenbank
-
Rufen Sie
CreateKey
für jeden Mandanten in Ihrer Datenbank auf.Der folgende Vorgang erstellt zwei Verzweigungsschlüssel unter Verwendung des KMS-Schlüssels, den Sie bei der Erstellung Ihres Schlüsselspeicherdienstes angegeben haben, und fügt die Verzweigungsschlüssel zu der DynamoDB-Tabelle hinzu, die Sie als Branch-Schlüsselspeicher erstellt haben. Derselbe KMS-Schlüssel muss alle Zweigschlüssel schützen.
- Schritt 2: Erstellen Sie einen Lieferanten für die Filialschlüssel-ID
-
Im folgenden Beispiel werden benutzerfreundliche Namen für die beiden in Schritt 1 erstellten Verzweigungsschlüssel erstellt, und es wird aufgerufen
CreateDynamoDbEncryptionBranchKeyIdSupplier
, mit dem AWS Database Encryption SDK für DynamoDB-Client einen Branch-Schlüssel-ID-Lieferanten zu erstellen. - Schritt 3: Initialisieren Sie Ihren hierarchischen Schlüsselbund mit dem Anbieter der Branch-Schlüssel-ID
-
Um den hierarchischen Schlüsselbund zu initialisieren, müssen Sie die folgenden Werte angeben:
-
Name eines Zweigschlüsselspeichers
-
Ein Lieferant für die Schlüssel-ID der Branche
-
(Optional) Ein Cache
Wenn Sie Ihren Cachetyp oder die Anzahl der Einträge für Branch-Schlüsselmaterialien, die im lokalen Cache gespeichert werden können, anpassen möchten, geben Sie den Cachetyp und die Eintragskapazität an, wenn Sie den Schlüsselbund initialisieren.
Der Cachetyp definiert das Threading-Modell. Der hierarchische Schlüsselbund bietet drei Cachetypen, die mehrinstanzenfähige Datenbanken unterstützen: Standard,,. MultiThreaded StormTracking
Wenn Sie keinen Cache angeben, verwendet der hierarchische Schlüsselbund automatisch den Standard-Cachetyp und legt die Eintragskapazität auf 1000 fest.
-
(Optional) Eine Liste von Grant-Tokens
Wenn Sie den Zugriff auf den KMS-Schlüssel in Ihrem hierarchischen Schlüsselbund mit Grants steuern, müssen Sie bei der Initialisierung des Schlüsselbunds alle erforderlichen Grant-Token angeben.
In den folgenden Beispielen wird ein hierarchischer Schlüsselbund mit dem in Schritt 2 erstellten Branch-Schlüssel-ID-Lieferanten, einem Cache-Limit von 600 Sekunden und einer maximalen Cachegröße von 1000 initialisiert. In diesem Beispiel wird ein hierarchischer Schlüsselbund mit dem AWS Database Encryption SDK für den DynamoDB-Client initialisiert.
-
Verwendung des hierarchischen Schlüsselbunds für durchsuchbare Verschlüsselung
Mit der durchsuchbaren Verschlüsselung können Sie verschlüsselte Datensätze durchsuchen, ohne die gesamte Datenbank zu entschlüsseln. Dies wird erreicht, indem der Klartextwert eines verschlüsselten Felds mit einem Beacon indexiert wird. Um eine durchsuchbare Verschlüsselung zu implementieren, müssen Sie einen hierarchischen Schlüsselbund verwenden.
Der CreateKey
Schlüsselspeichervorgang generiert sowohl einen Zweigschlüssel als auch einen Beacon-Schlüssel. Der Zweigschlüssel wird bei der Verschlüsselung und Entschlüsselung von Datensätzen verwendet. Der Beacon-Schlüssel wird zur Generierung von Beacons verwendet.
Der Branch-Schlüssel und der Beacon-Schlüssel sind durch dasselbe geschützt AWS KMS key , das Sie bei der Erstellung Ihres Schlüsselspeicherdienstes angegeben haben. Nachdem der CreateKey
Vorgang AWS KMS zur Generierung des Branch-Schlüssels aufgerufen hat, ruft er kms: GenerateDataKeyWithoutPlaintext ein zweites Mal auf, um den Beacon-Schlüssel mithilfe der folgenden Anforderung zu generieren.
{ "EncryptionContext": { "branch-key-id" : "
branch-key-id
", "type" :type
, "create-time" : "timestamp
", "logical-key-store-name" : "the logical table name for your branch key store
", "kms-arn" :the KMS key ARN
, "hierarchy-version" : 1 }, "KeyId": "the KMS key ARN
", "NumberOfBytes": "32" }
Nachdem beide Schlüssel generiert wurden, ruft die CreateKey
Operation ddb: TransactWriteItems auf, um zwei neue Elemente zu schreiben, die den Branch-Schlüssel und den Beacon-Schlüssel in Ihrem Branch-Schlüsselspeicher speichern.
Wenn Sie ein Standard-Beacon konfigurieren, fragt das AWS Database Encryption SDK den Branch-Schlüsselspeicher nach dem Beacon-Schlüssel ab. Anschließend verwendet es eine HMAC-basierte extract-and-expand Schlüsselableitungsfunktion (HKDF
Im Gegensatz zu Zweigschlüsseln gibt es in einem Branch-Schlüsselspeicher jeweils nur eine Beacon-Schlüsselversion. branch-key-id
Der Beacon-Schlüssel wird niemals gedreht.
Definieren Sie Ihre Beacon-Schlüsselquelle
Wenn Sie die Beacon-Version für Ihre Standard- und Verbund-Beacons definieren, müssen Sie den Beacon-Schlüssel identifizieren und ein Cache-Limit für die Gültigkeitsdauer (Time to Live, TTL) für die Beacon-Schlüsselmaterialien definieren. Beacon-Schlüsselmaterialien werden in einem von den Branch-Schlüsseln getrennten lokalen Cache gespeichert. Der folgende Ausschnitt zeigt, wie die keySource
für eine Single-Tenant-Datenbank definiert wird. Identifizieren Sie Ihren Beacon-Schlüssel anhand dessen, mit dem branch-key-id
er verknüpft ist.
- Definition der Beacon-Quelle in einer mandantenfähigen Datenbank
-
Wenn Sie über eine Multitenant-Datenbank verfügen, müssen Sie bei der Konfiguration der die folgenden Werte angeben.
keySource
-
keyFieldName
Definiert den Namen des Felds, in dem der dem Beacon
branch-key-id
zugeordnete Schlüssel gespeichert wird, der zur Generierung von Beacons für einen bestimmten Mandanten verwendet wurde. DabeikeyFieldName
kann es sich um eine beliebige Zeichenfolge handeln, sie muss jedoch für alle anderen Felder in Ihrer Datenbank eindeutig sein. Wenn Sie neue Datensätze in Ihre Datenbank schreiben, wird der Beacon-Schlüsselbranch-key-id
, der zur Generierung von Beacons für diesen Datensatz verwendet wurde, in diesem Feld gespeichert. Sie müssen dieses Feld in Ihre Beacon-Abfragen aufnehmen und die entsprechenden Beacon-Schlüsselmaterialien identifizieren, die für die Neuberechnung des Beacons erforderlich sind. Weitere Informationen finden Sie unter Abfragen von Beacons in einer mandantenfähigen Datenbank. -
CacheTTL
Der Zeitraum in Sekunden, in dem ein Eintrag für Beacon-Schlüsselmaterialien im lokalen Beacon-Cache verwendet werden kann, bevor er abläuft. Dieser Wert muss größer als null sein. Wenn das Cache-Limit TTL abläuft, wird der Eintrag aus dem lokalen Cache entfernt.
-
(Optional) Ein Cache
Wenn Sie Ihren Cachetyp oder die Anzahl der Einträge für Branch-Schlüsselmaterialien, die im lokalen Cache gespeichert werden können, anpassen möchten, geben Sie den Cachetyp und die Eintragskapazität an, wenn Sie den Schlüsselbund initialisieren.
Der Cachetyp definiert das Threading-Modell. Der hierarchische Schlüsselbund bietet drei Cachetypen, die mehrinstanzenfähige Datenbanken unterstützen: Standard,,. MultiThreaded StormTracking
Wenn Sie keinen Cache angeben, verwendet der hierarchische Schlüsselbund automatisch den Standard-Cachetyp und legt die Eintragskapazität auf 1000 fest.
Im folgenden Beispiel wird ein hierarchischer Schlüsselbund mit dem in Schritt 2 erstellten Branch-Schlüssel-ID-Lieferanten, einem Cache-Limit von 600 Sekunden und einer Eingabekapazität von 1000 initialisiert.
-