AWS KMS Hierarchische Schlüsselanhänger - AWS Datenbankverschlüsselung SDK

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

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.

  1. 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.

  2. 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.

    1. 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

    2. Der Zweigschlüsselspeicher gibt den Klartext-Zweigschlüssel und Daten, die ihn identifizieren, wie z. B. die Version des Zweigschlüssels, zurück.

  3. 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.

  4. 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.

  1. Die Entschlüsselungsmethode identifiziert den verschlüsselten Datenschlüssel aus dem Materialbeschreibungsfeld des verschlüsselten Datensatzes und übergibt ihn an den hierarchischen Schlüsselbund.

  2. 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.

  3. 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.

  4. 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.

    1. 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

    2. Der Zweigschlüsselspeicher gibt den Klartext-Zweigschlüssel und Daten, die ihn identifizieren, wie z. B. die Version des Zweigschlüssels, zurück.

  5. 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.

  6. 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.

  7. 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.

Java
final KeyStore keystore = KeyStore.builder().KeyStoreConfig( KeyStoreConfig.builder() .ddbClient(DynamoDbClient.create()) .ddbTableName(keyStoreName) .logicalKeyStoreName(logicalKeyStoreName) .kmsClient(KmsClient.create()) .kmsConfiguration(KMSConfiguration.builder() .kmsKeyArn(kmsKeyArn) .build()) .build()).build();
C# / .NET
var kmsConfig = new KMSConfiguration { KmsKeyArn = kmsKeyArn }; var keystoreConfig = new KeyStoreConfig { KmsClient = new AmazonKeyManagementServiceClient(), KmsConfiguration = kmsConfig, DdbTableName = keyStoreName, DdbClient = new AmazonDynamoDBClient(), LogicalKeyStoreName = logicalKeyStoreName }; var keystore = new KeyStore(keystoreConfig);
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.

Java
keystore.CreateKeyStore(CreateKeyStoreInput.builder().build());
C# / .NET
var createKeyStoreOutput = keystore.CreateKeyStore(new CreateKeyStoreInput());

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 aufrufenCreateKey, können Sie wählen, ob Sie die folgenden optionalen Werte angeben möchten.

  • branchKeyIdentifier: definiert eine benutzerdefiniertebranch-key-id.

    Um einen benutzerdefinierten zu erstellenbranch-key-id, müssen Sie dem encryptionContext 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. GenerateDataKeyWithoutPlaintext

    Dieser zusätzliche Verschlüsselungskontext wird mit dem Präfix angezeigt. aws-crypto-ec:

Java
final Map<String, String> additionalEncryptionContext = Collections.singletonMap("Additional Encryption Context for", "custom branch key id"); final String BranchKey = keystore.CreateKey( CreateKeyInput.builder() .branchKeyIdentifier(custom-branch-key-id) //OPTIONAL .encryptionContext(additionalEncryptionContext) //OPTIONAL .build()).branchKeyIdentifier();
C# / .NET
var additionalEncryptionContext = new Dictionary<string, string>(); additionalEncryptionContext.Add("Additional Encryption Context for", "custom branch key id"); var branchKeyId = keystore.CreateKey(new CreateKeyInput { BranchKeyIdentifier = "custom-branch-key-id", // OPTIONAL EncryptionContext = additionalEncryptionContext // OPTIONAL });

Zunächst generiert die CreateKey Operation die folgenden Werte.

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

    Derbranch-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.

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsHierarchicalKeyringInput keyringInput = CreateAwsKmsHierarchicalKeyringInput.builder() .keyStore(branchKeyStoreName) .branchKeyId(branch-key-id) .ttlSeconds(600) .build(); final Keyring hierarchicalKeyring = matProv.CreateAwsKmsHierarchicalKeyring(keyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var keyringInput = new CreateAwsKmsHierarchicalKeyringInput { KeyStore = keystore, BranchKeyIdSupplier = branchKeyIdSupplier, TtlSeconds = 600 }; var hierarchicalKeyring = matProv.CreateAwsKmsHierarchicalKeyring(keyringInput);

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.

Java
keystore.VersionKey( VersionKeyInput.builder() .branchKeyIdentifier("branch-key-id") .build() );
C# / .NET
keystore.VersionKey(new VersionKeyInput{BranchKeyIdentifier = branchKeyId});

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.

Java
CreateKeyOutput branchKeyId1 = keystore.CreateKey(CreateKeyInput.builder().build()); CreateKeyOutput branchKeyId2 = keystore.CreateKey(CreateKeyInput.builder().build());
C# / .NET
var branchKeyId1 = keystore.CreateKey(new CreateKeyInput()); var branchKeyId2 = keystore.CreateKey(new CreateKeyInput());
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 aufgerufenCreateDynamoDbEncryptionBranchKeyIdSupplier, mit dem AWS Database Encryption SDK für DynamoDB-Client einen Branch-Schlüssel-ID-Lieferanten zu erstellen.

Java
// Create friendly names for each branch-key-id class ExampleBranchKeyIdSupplier implements IDynamoDbKeyBranchKeyIdSupplier { private static String branchKeyIdForTenant1; private static String branchKeyIdForTenant2; public ExampleBranchKeyIdSupplier(String tenant1Id, String tenant2Id) { this.branchKeyIdForTenant1 = tenant1Id; this.branchKeyIdForTenant2 = tenant2Id; } // Create the branch key ID supplier final DynamoDbEncryption ddbEnc = DynamoDbEncryption.builder() .DynamoDbEncryptionConfig(DynamoDbEncryptionConfig.builder().build()) .build(); final BranchKeyIdSupplier branchKeyIdSupplier = ddbEnc.CreateDynamoDbEncryptionBranchKeyIdSupplier( CreateDynamoDbEncryptionBranchKeyIdSupplierInput.builder() .ddbKeyBranchKeyIdSupplier(new ExampleBranchKeyIdSupplier(branch-key-ID-tenant1, branch-key-ID-tenant2)) .build()).branchKeyIdSupplier();
C# / .NET
// Create friendly names for each branch-key-id class ExampleBranchKeyIdSupplier : DynamoDbKeyBranchKeyIdSupplierBase { private String _branchKeyIdForTenant1; private String _branchKeyIdForTenant2; public ExampleBranchKeyIdSupplier(String tenant1Id, String tenant2Id) { this._branchKeyIdForTenant1 = tenant1Id; this._branchKeyIdForTenant2 = tenant2Id; } // Create the branch key ID supplier var ddbEnc = new DynamoDbEncryption(new DynamoDbEncryptionConfig()); var branchKeyIdSupplier = ddbEnc.CreateDynamoDbEncryptionBranchKeyIdSupplier( new CreateDynamoDbEncryptionBranchKeyIdSupplierInput { DdbKeyBranchKeyIdSupplier = new ExampleBranchKeyIdSupplier(branch-key-ID-tenant1, branch-key-ID-tenant2) }).BranchKeyIdSupplier;
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 Cache-Limit Time to Live (TTL)

  • 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.

    Default (Recommended)

    Für die meisten Benutzer erfüllt der Standard-Cache ihre Threading-Anforderungen. Der Standard-Cache ist so konzipiert, dass er Umgebungen mit hohem Multithreading-Anteil unterstützt. Wenn ein Eintrag für Branch-Schlüssel-Materialien abläuft, verhindert der Standard-Cache den Aufruf mehrerer Threads, AWS KMS indem ein Thread 10 Sekunden im Voraus darüber informiert wird, dass der Eintrag für Branch-Schlüssel-Materialien abläuft. Dadurch wird sichergestellt, dass nur ein Thread eine Anfrage AWS KMS zur Aktualisierung des Caches sendet.

    Um Ihren hierarchischen Schlüsselbund mit einem Standard-Cache zu initialisieren, geben Sie den folgenden Wert an:

    • Eintragskapazität: Schränkt die Anzahl der Einträge für Branch-Schlüsselmaterialien ein, die im lokalen Cache gespeichert werden können.

    Java
    .cache(CacheType.builder() .Default(DefaultCache.builder() .entryCapacity(100) .build())
    C#/.NET
    CacheType defaultCache = new CacheType { Default = new DefaultCache{EntryCapacity = 100} };

    Default und StormTracking Caches unterstützen dasselbe Threading-Modell, aber Sie müssen nur die Eingabekapazität angeben, um den hierarchischen Schlüsselbund mit dem Standard-Cache zu initialisieren. Für detailliertere Cache-Anpassungen verwenden Sie den Cache. StormTracking

    MultiThreaded

    Der MultiThreaded Cache kann sicher in Multithread-Umgebungen verwendet werden, bietet jedoch keine Funktionen zur Minimierung AWS KMS von Amazon DynamoDB DynamoDB-Aufrufen. Daher werden alle Threads gleichzeitig benachrichtigt, wenn ein Eintrag für wichtige Materialien in einer Branche abläuft. Dies kann zu mehreren AWS KMS Aufrufen führen, um den Cache zu aktualisieren.

    Um Ihren hierarchischen Schlüsselbund mit einem MultiThreaded Cache zu initialisieren, geben Sie die folgenden Werte an:

    • Eintragskapazität: Schränkt die Anzahl der Einträge für Branch-Schlüsselmaterialien ein, die im lokalen Cache gespeichert werden können.

    • Größe des Endstücks des Eintrags: Definiert die Anzahl der Einträge, die beschnitten werden müssen, wenn die Eingangskapazität erreicht ist.

    Java
    .cache(CacheType.builder() .MultiThreaded(MultiThreadedCache.builder() .entryCapacity(100) .entryPruningTailSize(1) .build())
    C#/.NET
    CacheType multithreadedCache = new CacheType { MultiThreaded = new MultiThreadedCache { EntryCapacity = 100, EntryPruningTailSize = 1 } };
    StormTracking

    Der StormTracking Cache ist so konzipiert, dass er Umgebungen mit hohem Multithreading-Anteil unterstützt. Wenn ein Eintrag für Branch-Schlüssel-Materialien abläuft, verhindert der StormTracking Cache den Aufruf mehrerer Threads, AWS KMS indem ein Thread im Voraus darüber informiert wird, dass der Eintrag für Branch-Schlüssel-Materialien abläuft. Dadurch wird sichergestellt, dass nur ein Thread eine Anfrage AWS KMS zur Aktualisierung des Caches sendet.

    Um Ihren hierarchischen Schlüsselbund mit einem StormTracking Cache zu initialisieren, geben Sie die folgenden Werte an:

    • Eintragskapazität: Schränkt die Anzahl der Einträge für Branch-Schlüsselmaterialien ein, die im lokalen Cache gespeichert werden können.

    • Größe des Endstücks des Eintrags: Definiert die Anzahl der Einträge für das Schlüsselmaterial der Branche, die gleichzeitig beschnitten werden sollen.

      Standardwert: 1 Eintrag

    • Übergangszeit: Definiert die Anzahl der Sekunden vor Ablauf, nach der versucht wird, die wichtigsten Materialien der Branche zu aktualisieren.

      Standardwert: 10 Sekunden

    • Verlängerungsintervall: Definiert die Anzahl der Sekunden zwischen Versuchen, die Schlüsselmaterialien der Filiale zu aktualisieren.

      Standardwert: 1 Sekunde

    • Fan-out: Definiert die Anzahl der gleichzeitigen Versuche, die wichtigsten Materialien der Filiale zu aktualisieren.

      Standardwert: 20 Versuche

    • In Flight Time to Live (TTL): Definiert die Anzahl der Sekunden, bis beim Versuch, die Schlüsselmaterialien der Filiale zu aktualisieren, eine Zeitüberschreitung eintritt. Jedes Mal, wenn der Cache als Antwort auf eine zurückkehrt NoSuchEntryGetCacheEntry, gilt dieser Verzweigungsschlüssel als aktiv, bis derselbe Schlüssel zusammen mit einem PutCache Eintrag geschrieben wird.

      Standardwert: 20 Sekunden

    • Ruhezustand: Definiert die Anzahl der Sekunden, die ein Thread in den Ruhezustand versetzen soll, wenn der Wert überschritten fanOut wird.

      Standardwert: 20 Millisekunden

    Java
    .cache(CacheType.builder() .StormTracking(StormTrackingCache.builder() .entryCapacity(100) .entryPruningTailSize(1) .gracePeriod(10) .graceInterval(1) .fanOut(20) .inFlightTTL(20) .sleepMilli(20) .build())
    C #/.NET
    CacheType stormTrackingCache = new CacheType { StormTracking = new StormTrackingCache { EntryCapacity = 100, EntryPruningTailSize = 1, FanOut = 20, GraceInterval = 1, GracePeriod = 10, InFlightTTL = 20, SleepMilli = 20 } };
  • (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.

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsHierarchicalKeyringInput keyringInput = CreateAwsKmsHierarchicalKeyringInput.builder() .keyStore(keystore) .branchKeyIdSupplier(branchKeyIdSupplier) .ttlSeconds(600) .cache(CacheType.builder() //OPTIONAL .Default(DefaultCache.builder() .entryCapacity(100) .build()) .build(); final Keyring hierarchicalKeyring = matProv.CreateAwsKmsHierarchicalKeyring(keyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var keyringInput = new CreateAwsKmsHierarchicalKeyringInput { KeyStore = keystore, BranchKeyIdSupplier = branchKeyIdSupplier, TtlSeconds = 600, Cache = new CacheType { Default = new DefaultCache { EntryCapacity = 100 } } }; var hierarchicalKeyring = matProv.CreateAwsKmsHierarchicalKeyring(keyringInput);

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), um den Beacon-Schlüssel mit dem Namen des Standard-Beacons zu kombinieren, um den HMAC-Schlüssel für einen bestimmten Beacon zu erstellen.

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.

Java
keySource(BeaconKeySource.builder() .single(SingleKeyStore.builder() .keyId(branch-key-id) .cacheTTL(6000) .build()) .build())
C# / .NET
KeySource = new BeaconKeySource { Single = new SingleKeyStore { KeyId = branch-key-id, CacheTTL = 6000 } }
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. Dabei keyFieldName 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.

    Default (Recommended)

    Für die meisten Benutzer erfüllt der Standard-Cache ihre Threading-Anforderungen. Der Standard-Cache ist so konzipiert, dass er Umgebungen mit hohem Multithreading-Anteil unterstützt. Wenn ein Eintrag für Branch-Schlüssel-Materialien abläuft, verhindert der Standard-Cache den Aufruf mehrerer Threads, AWS KMS indem ein Thread 10 Sekunden im Voraus darüber informiert wird, dass der Eintrag für Branch-Schlüssel-Materialien abläuft. Dadurch wird sichergestellt, dass nur ein Thread eine Anfrage AWS KMS zur Aktualisierung des Caches sendet.

    Um Ihren hierarchischen Schlüsselbund mit einem Standard-Cache zu initialisieren, geben Sie den folgenden Wert an:

    • Eintragskapazität: Schränkt die Anzahl der Einträge für Branch-Schlüsselmaterialien ein, die im lokalen Cache gespeichert werden können.

    Java
    .cache(CacheType.builder() .Default(DefaultCache.builder() .entryCapacity(100) .build())
    C#/.NET
    CacheType defaultCache = new CacheType { Default = new DefaultCache{EntryCapacity = 100} };

    Default und StormTracking Caches unterstützen dasselbe Threading-Modell, aber Sie müssen nur die Eingabekapazität angeben, um den hierarchischen Schlüsselbund mit dem Standard-Cache zu initialisieren. Für detailliertere Cache-Anpassungen verwenden Sie den Cache. StormTracking

    MultiThreaded

    Der MultiThreaded Cache kann sicher in Multithread-Umgebungen verwendet werden, bietet jedoch keine Funktionen zur Minimierung AWS KMS von Amazon DynamoDB DynamoDB-Aufrufen. Daher werden alle Threads gleichzeitig benachrichtigt, wenn ein Eintrag für wichtige Materialien in einer Branche abläuft. Dies kann zu mehreren AWS KMS Aufrufen führen, um den Cache zu aktualisieren.

    Um Ihren hierarchischen Schlüsselbund mit einem MultiThreaded Cache zu initialisieren, geben Sie die folgenden Werte an:

    • Eintragskapazität: Schränkt die Anzahl der Einträge für Branch-Schlüsselmaterialien ein, die im lokalen Cache gespeichert werden können.

    • Größe des Endstücks des Eintrags: Definiert die Anzahl der Einträge, die beschnitten werden müssen, wenn die Eingangskapazität erreicht ist.

    Java
    .cache(CacheType.builder() .MultiThreaded(MultiThreadedCache.builder() .entryCapacity(100) .entryPruningTailSize(1) .build())
    C#/.NET
    CacheType multithreadedCache = new CacheType { MultiThreaded = new MultiThreadedCache { EntryCapacity = 100, EntryPruningTailSize = 1 } };
    StormTracking

    Der StormTracking Cache ist so konzipiert, dass er Umgebungen mit hohem Multithreading-Anteil unterstützt. Wenn ein Eintrag für Branch-Schlüssel-Materialien abläuft, verhindert der StormTracking Cache den Aufruf mehrerer Threads, AWS KMS indem ein Thread im Voraus darüber informiert wird, dass der Eintrag für Branch-Schlüssel-Materialien abläuft. Dadurch wird sichergestellt, dass nur ein Thread eine Anfrage AWS KMS zur Aktualisierung des Caches sendet.

    Um Ihren hierarchischen Schlüsselbund mit einem StormTracking Cache zu initialisieren, geben Sie die folgenden Werte an:

    • Eintragskapazität: Schränkt die Anzahl der Einträge für Branch-Schlüsselmaterialien ein, die im lokalen Cache gespeichert werden können.

    • Größe des Endstücks des Eintrags: Definiert die Anzahl der Einträge für das Schlüsselmaterial der Branche, die gleichzeitig beschnitten werden sollen.

      Standardwert: 1 Eintrag

    • Übergangszeit: Definiert die Anzahl der Sekunden vor Ablauf, nach der versucht wird, die wichtigsten Materialien der Branche zu aktualisieren.

      Standardwert: 10 Sekunden

    • Verlängerungsintervall: Definiert die Anzahl der Sekunden zwischen Versuchen, die Schlüsselmaterialien der Filiale zu aktualisieren.

      Standardwert: 1 Sekunde

    • Fan-out: Definiert die Anzahl der gleichzeitigen Versuche, die wichtigsten Materialien der Filiale zu aktualisieren.

      Standardwert: 20 Versuche

    • In Flight Time to Live (TTL): Definiert die Anzahl der Sekunden, bis beim Versuch, die Schlüsselmaterialien der Filiale zu aktualisieren, eine Zeitüberschreitung eintritt. Jedes Mal, wenn der Cache als Antwort auf eine zurückkehrt NoSuchEntryGetCacheEntry, gilt dieser Verzweigungsschlüssel als aktiv, bis derselbe Schlüssel zusammen mit einem PutCache Eintrag geschrieben wird.

      Standardwert: 20 Sekunden

    • Ruhezustand: Definiert die Anzahl der Sekunden, die ein Thread in den Ruhezustand versetzen soll, wenn der Wert überschritten fanOut wird.

      Standardwert: 20 Millisekunden

    Java
    .cache(CacheType.builder() .StormTracking(StormTrackingCache.builder() .entryCapacity(100) .entryPruningTailSize(1) .gracePeriod(10) .graceInterval(1) .fanOut(20) .inFlightTTL(20) .sleepMilli(20) .build())
    C #/.NET
    CacheType stormTrackingCache = new CacheType { StormTracking = new StormTrackingCache { EntryCapacity = 100, EntryPruningTailSize = 1, FanOut = 20, GraceInterval = 1, GracePeriod = 10, InFlightTTL = 20, SleepMilli = 20 } };

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.

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsHierarchicalKeyringInput keyringInput = CreateAwsKmsHierarchicalKeyringInput.builder() .keyStore(branchKeyStoreName) .branchKeyIdSupplier(branchKeyIdSupplier) .ttlSeconds(600) .cache(CacheType.builder() //OPTIONAL .Default(DefaultCache.builder() .entryCapacity(1000) .build()) .build(); final IKeyring hierarchicalKeyring = matProv.CreateAwsKmsHierarchicalKeyring(keyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var keyringInput = new CreateAwsKmsHierarchicalKeyringInput { KeyStore = keystore, BranchKeyIdSupplier = branchKeyIdSupplier, TtlSeconds = 600, Cache = new CacheType { Default = new DefaultCache { EntryCapacity = 1000 } } }; var hierarchicalKeyring = matProv.CreateAwsKmsHierarchicalKeyring(keyringInput);