Direct KMS Materials Provider - 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.

Direct KMS Materials Provider

Anmerkung

Unsere clientseitige Verschlüsselungsbibliothek wurde in AWS Database Encryption SDK umbenannt. Das folgende Thema enthält Informationen zu den Versionen 1. x —2. x des DynamoDB Encryption Client für Java und Versionen 1. x —3. x des DynamoDB Encryption Client für Python. Weitere Informationen finden Sie unter AWSDatabase Encryption SDK für DynamoDB-Versionsunterstützung.

Der Direct KMS Materials Provider (Direct KMS Provider) schützt Ihre Tabellenelemente unter einem AWS KMS key, der niemals unverschlüsselt AWS Key Management Service(AWS KMS) verlässt. Dieser Anbieter kryptographischer Materialien (Cryptographic Materials Provider) gibt einen eindeutigen Verschlüsselungsschlüssel und einen Signierschlüssel für jedes Tabellenelement zurück. Dazu ruft er AWS KMS jedes Mal auf, wenn Sie ein Element verschlüsseln oder entschlüsseln.

Wenn Sie DynamoDB-Elemente mit hoher Frequenz und großem Umfang verarbeiten, überschreiten Sie möglicherweise die AWS KMS requests-per-secondGrenzwerte, was zu Verarbeitungsverzögerungen führt. Wenn Sie ein Limit überschreiten müssen, erstellen Sie einen Fall in der AWS SupportMitte. Sie könnten auch erwägen, einen Anbieter für kryptografisches Material mit begrenzter Wiederverwendung von Schlüsseln zu verwenden, z. B. den Most Recent Provider.

Um den Direct KMS Provider verwenden zu können, muss der Aufrufer über mindestens eine AWS-Konto AWS KMS key und die Berechtigung zum Aufrufen der GenerateDataKeyund Entschlüsselung der Operationen auf dem verfügen. AWS KMS key Der AWS KMS key muss ein symmetrischer Verschlüsselungsschlüssel sein. Der DynamoDB Encryption Client unterstützt keine asymmetrische Verschlüsselung. Wenn Sie eine globale DynamoDB-Tabelle verwenden, möchten Sie möglicherweise einen Schlüssel mit AWS KMSmehreren Regionen angeben. Details hierzu finden Sie unter Verwendung.

Anmerkung

Wenn Sie den Direct KMS Provider verwenden, werden die Namen und Werte Ihrer Primärschlüsselattribute im AWS KMSVerschlüsselungskontext und in den AWS CloudTrail Protokollen verwandter Vorgänge im Klartext angezeigt. AWS KMS Der DynamoDB Encryption Client macht jedoch niemals den Klartext verschlüsselter Attributwerte verfügbar.

Der Direct KMS Provider ist einer von mehreren Anbietern von kryptografischen Materialien (CMPs), die der DynamoDB Encryption Client unterstützt. Weitere Information zu den anderen CMPs finden Sie unter Anbieter von kryptografischen Materialien.

Beispielcode finden Sie unter:

Verwendung

Um einen direkten KMS-Anbieter zu erstellen, verwenden Sie den Schlüssel-ID-Parameter, um einen KMS-Schlüssel mit symmetrischer Verschlüsselung in Ihrem Konto anzugeben. Der Wert des Schlüssel-ID-Parameters kann die Schlüssel-ID, der Schlüssel-ARN, der Aliasname oder der Alias-ARN von seinAWS KMS key. Einzelheiten zu den Schlüsselkennungen finden Sie unter Schlüsselkennungen im AWS Key Management ServiceEntwicklerhandbuch.

Der Direct KMS Provider benötigt einen KMS-Schlüssel mit symmetrischer Verschlüsselung. Sie können keinen asymmetrischen KMS-Schlüssel verwenden. Sie können jedoch einen KMS-Schlüssel mit mehreren Regionen, einen KMS-Schlüssel mit importiertem Schlüsselmaterial oder einen KMS-Schlüssel in einem benutzerdefinierten Schlüsselspeicher verwenden. Sie müssen über die Berechtigungen kms: GenerateDataKey und kms:DECRYPT für den KMS-Schlüssel verfügen. Daher müssen Sie einen vom Kunden verwalteten Schlüssel verwenden, keinen AWS verwalteten oder AWS eigenen KMS-Schlüssel.

Der DynamoDB Encryption Client für Python bestimmt die Region, die AWS KMS aus der Region aufgerufen werden soll, im Wert des Schlüssel-ID-Parameters, sofern dieser einen enthält. Andernfalls verwendet es die Region im AWS KMS Client, sofern Sie eine angeben, oder die Region, die Sie im Client konfigurierenAWS SDK for Python (Boto3). Informationen zur Regionsauswahl in Python finden Sie unter Konfiguration in der AWS SDK for Python (Boto3) API-Referenz.

Der DynamoDB Encryption Client für Java bestimmt die Region für Anrufe AWS KMS aus der Region im AWS KMS Client, falls der von Ihnen angegebene Client eine Region enthält. Andernfalls verwendet es die Region, die Sie in der konfigurierenAWS SDK for Java. Informationen zur Regionsauswahl in der AWS SDK for Java finden Sie unter AWS-RegionAuswahl im AWS SDK for Java Developer Guide.

Java
// Replace the example key ARN and Region with valid values for your application final String keyArn = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' final String region = 'us-west-2' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, keyArn);
Python

Im folgenden Beispiel wird der Schlüssel ARN verwendet, um das anzugebenAWS KMS key. Wenn Ihre Schlüssel-ID keine enthältAWS-Region, ruft der DynamoDB Encryption Client die Region aus der konfigurierten Botocore-Sitzung, falls vorhanden, oder aus den Boto-Standardeinstellungen ab.

# Replace the example key ID with a valid value kms_key = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key)

Wenn Sie globale Tabellen von Amazon DynamoDB verwenden, empfehlen wir, Ihre Daten mit einem AWS KMS Schlüssel für mehrere Regionen zu verschlüsseln. Schlüssel mit mehreren Regionen sind AWS KMS keys unterschiedlich und können synonym verwendet werdenAWS-Regionen, da sie dieselbe Schlüssel-ID und dasselbe Schlüsselmaterial haben. Einzelheiten finden Sie unter Verwenden von Schlüsseln für mehrere Regionen im AWS Key Management ServiceEntwicklerhandbuch.

Anmerkung

Wenn Sie die Version 2017.11.29 für globale Tabellen verwenden, müssen Sie Attributaktionen so einrichten, dass die reservierten Replikationsfelder nicht verschlüsselt oder signiert werden. Details hierzu finden Sie unter Probleme mit globalen Tabellen älterer Versionen.

Um einen Schlüssel mit mehreren Regionen mit dem DynamoDB Encryption Client zu verwenden, erstellen Sie einen Schlüssel mit mehreren Regionen und replizieren Sie ihn in die Regionen, in denen Ihre Anwendung ausgeführt wird. Konfigurieren Sie dann den Direct KMS Provider so, dass er den Schlüssel für mehrere Regionen in der Region verwendet, in der der DynamoDB Encryption Client anruft. AWS KMS

Im folgenden Beispiel wird der DynamoDB Encryption Client so konfiguriert, dass er Daten in der Region USA Ost (Nord-Virginia) (us-east-1) verschlüsselt und sie in der Region USA West (Oregon) (us-west-2) mithilfe eines Schlüssels mit mehreren Regionen entschlüsselt.

Java

In diesem Beispiel ruft der DynamoDB Encryption Client die Region für Anrufe AWS KMS aus der Region im AWS KMS Client ab. Der keyArn Wert identifiziert einen Schlüssel mit mehreren Regionen in derselben Region.

// Encrypt in us-east-1 // Replace the example key ARN and Region with valid values for your application final String usEastKey = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' final String region = 'us-east-1' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usEastKey);
// Decrypt in us-west-2 // Replace the example key ARN and Region with valid values for your application final String usWestKey = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' final String region = 'us-west-2' final AWSKMS kms = AWSKMSClientBuilder.standard().withRegion(region).build(); final DirectKmsMaterialProvider cmp = new DirectKmsMaterialProvider(kms, usWestKey);
Python

In diesem Beispiel ruft der DynamoDB Encryption Client die Region für Anrufe AWS KMS aus der Region im Schlüssel-ARN ab.

# Encrypt in us-east-1 # Replace the example key ID with a valid value us_east_key = 'arn:aws:kms:us-east-1:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_east_key)
# Decrypt in us-west-2 # Replace the example key ID with a valid value us_west_key = 'arn:aws:kms:us-west-2:111122223333:key/mrk-1234abcd12ab34cd56ef1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=us_west_key)

Funktionsweise

Der direkte KMS-Anbieter gibt Verschlüsselungs- und Signaturschlüssel zurück, die durch einen AWS KMS key von Ihnen angegebenen Schlüssel geschützt sind, wie in der folgenden Abbildung dargestellt.

Die Eingabe, Verarbeitung und Ausgabe des Direct KMS Providers im DynamoDB Encryption Client
  • Um Verschlüsselungsmaterialien zu generieren, fordert der Direct KMS Provider auf, für jedes Element einen eindeutigen Datenschlüssel AWS KMS zu generieren, wobei ein AWS KMS key von Ihnen spezifizierter Datenschlüssel verwendet wird. Er leitet Verschlüsselungs- und Signierschlüssel für das Element aus der Klartextkopie des Datenschlüssels ab und gibt dann die Verschlüsselungs- und Signierschlüssel zusammen mit dem verschlüsselten Datenschlüssel zurück, der im Materialbeschreibungsattribut des Elements gespeichert wird.

    Der Elementverschlüssler verwendet die Verschlüsselungs- und Signierschlüssel und entfernt sie so schnell wie möglich aus dem Speicher. Nur die verschlüsselte Kopie des Datenschlüssels, von dem sie abgeleitet wurden, wird im verschlüsselten Element gespeichert.

  • Um Entschlüsselungsmaterialien zu generieren, fordert der Direct KMS Provider AWS KMS auf, den verschlüsselten Datenschlüssel zu entschlüsseln. Dann leitet es aus dem Klartextdatenschlüssel Verifizierungs- und Signierschlüssel ab und gibt sie an den Elementverschlüssler zurück.

    Der Elementverschlüssler verifiziert das Element und entschlüsselt bei erfolgreicher Verifikation die verschlüsselten Werte. Anschließend entfernt er die Schlüssel so schnell wie möglich aus dem Speicher.

Verschlüsselungsmaterialien abrufen

Dieser Abschnitt beschreibt detailliert die Ein- und Ausgänge und die Verarbeitung des Direct KMS Providers, wenn er eine Anfrage für Verschlüsselungsmaterialien vom Elementverschlüssler erhält.

Eingabe (von der Anwendung)

  • Die Schlüssel-ID einesAWS KMS key.

Eingabe (vom Elementverschlüssler)

Ausgabe (an den Elementverschlüssler)

  • Verschlüsselungsschlüssel (Klartext)

  • Signierschlüssel

  • In der tatsächlichen Materialbeschreibung: Diese Werte werden im Materialbeschreibungsattribut gespeichert, das der Client dem Element hinzufügt.

    • amzn-ddb-env-key: Base64-codierter Datenschlüssel, verschlüsselt durch die AWS KMS key

    • amzn-ddb-env-alg: Verschlüsselungsalgorithmus, standardmäßig AES/256

    • amzn-ddb-sig-alg: Signaturalgorithmus, standardmäßig, hmacSHA256/256

    • amzn-ddb-wrap-alg: km

Verarbeitung

  1. Der direkte KMS-Anbieter sendet AWS KMS eine Anfrage, um anhand der angegebenen Daten einen eindeutigen Datenschlüssel für das Element AWS KMS key zu generieren. Die Operation gibt einen Klartextschlüssel und eine Kopie zurück, die unter dem AWS KMS key verschlüsselt ist. Dies wird als anfängliches Schlüsselmaterial bezeichnet.

    Die Anforderung enthält die folgenden Werte im Klartext im AWS KMS-Verschlüsselungskontext. Diese nicht geheimen Werte sind kryptographisch an das verschlüsselte Objekt gebunden, sodass beim Entschlüsseln der gleiche Verschlüsselungskontext benötigt wird. Sie können diese Werte verwenden, um den Aufruf von AWS KMS in AWS CloudTrail-Protokollen zu identifizieren.

    • amzn-ddb-env-alg— Verschlüsselungsalgorithmus, standardmäßig AES/256

    • amzn-ddb-sig-alg— Signaturalgorithmus, standardmäßig hmacSHA256/256

    • (Optional) aws-kms-table — Tabellenname

    • (Optionaler) Name des PartitionsschlüsselsWert des Partitionsschlüssels (Binärwerte sind Base64-codiert)

    • (Optional) Name des SortierschlüsselsWert des Sortierschlüssels (Binärwerte sind Base64-kodiert)

    Der Direct KMS Provider ruft die Werte für den AWS KMS Verschlüsselungskontext aus dem DynamoDB-Verschlüsselungskontext für das Element ab. Wenn der DynamoDB-Verschlüsselungskontext keinen Wert enthält, z. B. den Tabellennamen, wird dieses Name-Wert-Paar im Verschlüsselungskontext weggelassen. AWS KMS

  2. Der Direct KMS Provider leitet aus dem Datenschlüssel einen symmetrischen Verschlüsselungsschlüssel und einen Signierschlüssel ab. Standardmäßig verwendet er Secure Hash Algorithm (SHA) 256 und RFC5869 HMAC-based Key Derivation Function, um einen symmetrischen 256-Bit-AES-Verschlüsselungsschlüssel und einen 256-Bit-HMAC-SHA-256-Signierschlüssel abzuleiten.

  3. Der Direct KMS Provider gibt die Ausgabe an den Elementverschlüssler zurück.

  4. Der Elementverschlüssler verwendet den Verschlüsselungsschlüssel, um die angegebenen Attribute zu verschlüsseln, und den Signierschlüssel, um sie mit den in der tatsächlichen Materialbeschreibung angegebenen Algorithmen zu signieren. Er entfernt die Klartextschlüssel so schnell wie möglich aus dem Speicher.

Entschlüsselungsmaterialien abrufen

Dieser Abschnitt beschreibt detailliert die Ein- und Ausgänge und die Verarbeitung des Direct KMS Providers, wenn er eine Anfrage für Entschlüsselungsmaterialien vom Elementverschlüssler erhält.

Eingabe (von der Anwendung)

  • Die Schlüssel-ID einesAWS KMS key.

    Der Wert der Schlüssel-ID kann die Schlüssel-ID, der Schlüssel-ARN, der Aliasname oder der Alias-ARN von seinAWS KMS key. Alle Werte, die nicht in der Schlüssel-ID enthalten sind, wie z. B. die Region, müssen im AWSbenannten Profil verfügbar sein. Der Schlüssel ARN bietet alle Werte, die AWS KMS benötigt werden.

Eingabe (vom Elementverschlüssler)

Ausgabe (an den Elementverschlüssler)

  • Verschlüsselungsschlüssel (Klartext)

  • Signierschlüssel

Verarbeitung

  1. Der direkte KMS-Anbieter erhält den verschlüsselten Datenschlüssel aus dem Materialbeschreibungsattribut im verschlüsselten Element.

  2. Er fordert AWS KMS auf, den angegebenen AWS KMS key zu verwenden, um den verschlüsselten Datenschlüssel zu entschlüsseln. Die Operation gibt einen Klartextschlüssel zurück.

    Diese Anforderung muss denselben AWS KMS-Verschlüsselungskontext verwenden, in dem der Datenschlüssel generiert und verschlüsselt wurde.

    • aws-kms-table— Tabellenname

    • Name des PartitionsschlüsselsWert des Partitionsschlüssels (Binärwerte sind Base64-kodiert)

    • (Optional) Name des SortierschlüsselsWert des Sortierschlüssels (Binärwerte sind Base64-kodiert)

    • amzn-ddb-env-alg— Verschlüsselungsalgorithmus, standardmäßig AES/256

    • amzn-ddb-sig-alg— Signaturalgorithmus, standardmäßig hmacSHA256/256

  3. Der Direct KMS Provider verwendet Secure Hash Algorithm (SHA) 256 und RFC5869 HMAC-based Key Derivation Function, um einen symmetrischen 256-Bit-AES-Verschlüsselungsschlüssel und einen 256-Bit-HMAC-SHA-256-Signierschlüssel aus dem Datenschlüssel abzuleiten.

  4. Der Direct KMS Provider gibt die Ausgabe an den Elementverschlüssler zurück.

  5. Der Elementverschlüssler verwendet den Signierschlüssel, um das Element zu verifizieren. Wenn er erfolgreich ist, verwendet er den symmetrischen Verschlüsselungsschlüssel, um die verschlüsselten Attributwerte zu entschlüsseln. Diese Operationen verwenden die in der tatsächlichen Materialbeschreibung angegebenen Verschlüsselungs- und Signieralgorithmen. Der Elementverschlüssler entfernt die Klartextschlüssel so schnell wie möglich aus dem Speicher.