Beispielcode für den DynamoDB Encryption Client für Python - 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.

Beispielcode für den DynamoDB Encryption Client für Python

Anmerkung

Unsere clientseitige Verschlüsselungsbibliothek wurde in Database Encryption SDK umbenannt. AWS Das folgende Thema enthält Informationen zu 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 AWS Database Encryption SDK für DynamoDB-Versionsunterstützung.

Die folgenden Beispiele zeigen Ihnen, wie Sie den DynamoDB Encryption Client für Python verwenden, um DynamoDB-Daten in Ihrer Anwendung zu schützen. Weitere Beispiele (und eigene Beispiele) finden Sie im Beispielverzeichnis des Repositorys unter. aws-dynamodb-encryption-python GitHub

Verwenden Sie die EncryptedTable Client-Helper-Klasse

Das folgende Beispiel zeigt Ihnen, wie Sie den Direct KMS Provider mit der EncryptedTable-Client-Helferklasse verwenden. Dieses Beispiel verwendet denselben Anbieter von Verschlüsselungsdaten wie das nachfolgende Beispiel Verwendung des Elementverschlüsslers. Es verwendet jedoch die Klasse EncryptedTable, statt direkt mit dem untergeordneten Elementverschlüssler zusammenzuarbeiten.

Durch den Vergleich dieser Beispiele erkennen Sie, was die Client-Helferklasse für Sie erledigt. Dazu gehört die Erstellung des DynamoDB-Verschlüsselungskontextes und die Sicherstellung, dass die Primärschlüsselattribute immer signiert, aber niemals verschlüsselt sind. Um den Verschlüsselungskontext zu erstellen und den Primärschlüssel zu ermitteln, rufen die Client-Hilfsklassen den DynamoDB-Vorgang DescribeTableauf. Um diesen Code ausführen zu können, müssen Sie die Berechtigung haben, diese Operation aufzurufen.

Das vollständige Codebeispiel finden Sie unter: aws_kms_encrypted_table.py

Schritt 1: Erstellen der Tabelle

Erstellen Sie zunächst eine Instanz einer DynamoDB-Standardtabelle mit dem Tabellennamen.

table_name='test-table' table = boto3.resource('dynamodb').Table(table_name)
Schritt 2: Erstellen Sie einen Anbieter für Verschlüsselungsdaten

Erstellen Sie eine Instance des Anbieters für Verschlüsselungsdaten (CMP, Cryptographic Materials Provider), den Sie ausgewählt haben.

Dieses Beispiel verwendet den Direct KMS Provider, Sie können aber jeden beliebigen kompatiblen CMP verwenden. Um einen Direct KMS-Anbieter zu erstellen, geben Sie einen an. AWS KMS key In diesem Beispiel wird der Amazon-Ressourcenname (ARN) von verwendet AWS KMS key, Sie können jedoch jeden gültigen Schlüsselbezeichner verwenden.

kms_key_id='arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id)
Schritt 3: Erstellen Sie das Attribut-Aktionen-Objekt

Attribut-Aktionen teilen dem Elementverschlüsseler mit, welche Aktionen er auf jedes Attribut des Elements anwenden soll. Das AttributeActions-Objekt in diesem Beispiel verschlüsselt und signiert alle Elemente außer dem Attribut test, das ignoriert wird.

Geben Sie keine Attribut-Aktionen für die Primärschlüsselattribute an, wenn Sie eine Client-Helferklasse verwenden. Die EncryptedTable-Klassen signiert die Primärschlüsselattribute, verschlüsselt sie aber nie.

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, attribute_actions={'test': CryptoAction.DO_NOTHING} )
Schritt 4: Erstellen Sie die verschlüsselte Tabelle

Legen Sie die verschlüsselte Tabelle mit der Standardtabelle, dem Direct KMS Provider und den Attribut-Aktionen an. Dieser Schritt schließt die Konfiguration ab.

encrypted_table = EncryptedTable( table=table, materials_provider=kms_cmp, attribute_actions=actions )
Schritt 5: Legen Sie das Klartext-Element in der Tabelle ab

Wenn Sie die put_item Methode für aufrufenencrypted_table, werden Ihre Tabellenelemente transparent verschlüsselt, signiert und zu Ihrer DynamoDB-Tabelle hinzugefügt.

Definieren Sie zunächst das Tabellenelement.

plaintext_item = { 'partition_attribute': 'value1', 'sort_attribute': 55 'example': 'data', 'numbers': 99, 'binary': Binary(b'\x00\x01\x02'), 'test': 'test-value' }

Anschließend legen Sie es in der Tabelle ab.

encrypted_table.put_item(Item=plaintext_item)

Um das Element in verschlüsselter Form aus der DynamoDB-Tabelle abzurufen, rufen Sie die get_item Methode für das Objekt auf. table Um das verschlüsselte Element abzurufen, rufen Sie die Methode get_item für das Objekt encrypted_table auf.

Verwendung des Elementverschlüsslers

Dieses Beispiel zeigt Ihnen, wie Sie beim Verschlüsseln von Tabellenelementen direkt mit dem Elementverschlüsseler im DynamoDB Encryption Client interagieren können, anstatt die Client-Hilfsklassen zu verwenden, die für Sie mit dem Elementverschlüsseler interagieren.

Wenn Sie diese Technik verwenden, erstellen Sie den DynamoDB-Verschlüsselungskontext und das Konfigurationsobjekt (CryptoConfig) manuell. Außerdem verschlüsseln Sie die Elemente in einem Aufruf und fügen sie in einem separaten Aufruf in Ihre DynamoDB-Tabelle ein. Auf diese Weise können Sie Ihre put_item Aufrufe anpassen und den DynamoDB Encryption Client verwenden, um strukturierte Daten zu verschlüsseln und zu signieren, die niemals an DynamoDB gesendet werden.

Dieses Beispiel verwendet den Direct KMS Provider, Sie können aber jeden beliebigen kompatiblen CMP verwenden.

Das vollständige Codebeispiel finden Sie unter: aws_kms_encrypted_item.py

Schritt 1: Erstellen der Tabelle

Erstellen Sie zunächst eine Instanz einer standardmäßigen DynamoDB-Tabellenressource mit dem Tabellennamen.

table_name='test-table' table = boto3.resource('dynamodb').Table(table_name)
Schritt 2: Erstellen Sie einen Anbieter für Verschlüsselungsdaten

Erstellen Sie eine Instance des Anbieters für Verschlüsselungsdaten (CMP, Cryptographic Materials Provider), den Sie ausgewählt haben.

Dieses Beispiel verwendet den Direct KMS Provider, Sie können aber jeden beliebigen kompatiblen CMP verwenden. Um einen Direct KMS-Anbieter zu erstellen, geben Sie einen an. AWS KMS key In diesem Beispiel wird der Amazon-Ressourcenname (ARN) von verwendet AWS KMS key, Sie können jedoch jeden gültigen Schlüsselbezeichner verwenden.

kms_key_id='arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab' kms_cmp = AwsKmsCryptographicMaterialsProvider(key_id=kms_key_id)
Schritt 3: Verwenden Sie die TableInfo Helper-Klasse

Um Informationen über die Tabelle von DynamoDB zu erhalten, erstellen Sie eine Instanz der TableInfoHelper-Klasse. Wenn Sie direkt mit dem Elementverschlüssler arbeiten, müssen Sie eine TableInfo-Instance erstellen und deren Methoden aufrufen. Dies erledigt die Client-Helferklasse für Sie.

Die refresh_indexed_attributes Methode von TableInfo verwendet den DescribeTableDynamoDB-Vorgang, um in Echtzeit genaue Informationen über die Tabelle abzurufen. Dazu gehören ihre Primärschlüssel und ihre lokalen und globalen Sekundärindizes. Der Aufrufer benötigt die Berechtigung, DescribeTable aufzurufen.

table_info = TableInfo(name=table_name) table_info.refresh_indexed_attributes(table.meta.client)
Schritt 4: DynamoDB-Verschlüsselungskontext erstellen

Der DynamoDB-Verschlüsselungskontext enthält Informationen über die Tabellenstruktur und wie sie verschlüsselt und signiert ist. In diesem Beispiel wird explizit ein DynamoDB-Verschlüsselungskontext erstellt, da er mit dem Elementverschlüsseler interagiert. Die Client-Hilfsklassen erstellen den DynamoDB-Verschlüsselungskontext für Sie.

Um den Partitionsschlüssel und den Sortierschlüssel abzurufen, können Sie die Eigenschaften der TableInfoHilfsklasse verwenden.

index_key = { 'partition_attribute': 'value1', 'sort_attribute': 55 } encryption_context = EncryptionContext( table_name=table_name, partition_key_name=table_info.primary_index.partition, sort_key_name=table_info.primary_index.sort, attributes=dict_to_ddb(index_key) )
Schritt 5: Erstellen Sie das Attribut-Aktionen-Objekt

Attribut-Aktionen teilen dem Elementverschlüsseler mit, welche Aktionen er auf jedes Attribut des Elements anwenden soll. Das AttributeActions-Objekt in diesem Beispiel verschlüsselt und signiert alle Elemente mit Ausnahme der Primärschlüsselattribute, die signiert, aber nicht verschlüsselt sind, und des Attributs test, das ignoriert wird.

Wenn Sie direkt mit dem Elementverschlüsseler interagieren und Ihre Standardaktion ENCRYPT_AND_SIGN ist, müssen Sie eine alternative Aktion für den Primärschlüssel angeben. Sie können die set_index_keys-Methode verwenden, die SIGN_ONLY für den Primärschlüssel verwendet, oder DO_NOTHING, wenn es die Standardaktion ist.

Um den Primärschlüssel anzugeben, verwendet dieses Beispiel die Indexschlüssel im TableInfoObjekt, das durch einen Aufruf von DynamoDB aufgefüllt wird. Diese Technik ist sicherer als die Verwendung fest codierter Primärschlüsselnamen.

actions = AttributeActions( default_action=CryptoAction.ENCRYPT_AND_SIGN, attribute_actions={'test': CryptoAction.DO_NOTHING} ) actions.set_index_keys(*table_info.protected_index_keys())
Schritt 6: Erstellen Sie die Konfiguration für das Element

Um den DynamoDB Encryption Client zu konfigurieren, verwenden Sie die Objekte, die Sie gerade in einer CryptoConfigKonfiguration für das Tabellenelement erstellt haben. Die Client-Hilfsklassen erstellen das CryptoConfig für Sie.

crypto_config = CryptoConfig( materials_provider=kms_cmp, encryption_context=encryption_context, attribute_actions=actions )
Schritt 7: Verschlüsseln Sie das Element

In diesem Schritt wird das Element verschlüsselt und signiert, es wird jedoch nicht in die DynamoDB-Tabelle aufgenommen.

Wenn Sie eine Client-Hilfsklasse verwenden, werden Ihre Elemente transparent verschlüsselt und signiert und dann zu Ihrer DynamoDB-Tabelle hinzugefügt, wenn Sie die put_item Methode der Hilfsklasse aufrufen. Wenn Sie den Elementverschlüsseler direkt verwenden, sind die Verschlüsselungs- und Put-Aktionen voneinander unabhängig.

Erstellen Sie zunächst ein Klartext-Element.

plaintext_item = { 'partition_attribute': 'value1', 'sort_key': 55, 'example': 'data', 'numbers': 99, 'binary': Binary(b'\x00\x01\x02'), 'test': 'test-value' }

Anschließend verschlüsseln und signieren Sie es. Für die encrypt_python_item-Methode ist das CryptoConfig-Konfigurationsobjekt erforderlich.

encrypted_item = encrypt_python_item(plaintext_item, crypto_config)
Schritt 8: Legen Sie das Element in der Tabelle ab

In diesem Schritt wird das verschlüsselte und signierte Element in die DynamoDB-Tabelle eingefügt.

table.put_item(Item=encrypted_item)

Um das verschlüsselte Element anzuzeigen, rufen Sie die get_item-Methode für das ursprünglichen table-Objekt statt für das encrypted_table-Objekt auf. Sie ruft das Element aus der DynamoDB-Tabelle ab, ohne es zu verifizieren und zu entschlüsseln.

encrypted_item = table.get_item(Key=partition_key)['Item']

Das folgende Bild zeigt einen Teil eines verschlüsselten und signierten Beispiel-Tabellenelements.

Die verschlüsselten Attributwerte sind Binärdaten. Die Namen und Werte der Primärschlüsselattribute (partition_attribute und sort_attribute) und das test-Attribut verbleiben im Klartext. Die Ausgabe zeigt auch das Attribut, das die Signatur (*amzn-ddb-map-sig*) und das Materialbeschreibungsattribut (*amzn-ddb-map-desc*) enthält.

Auszug aus einem verschlüsselten und signierten Element