

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.

# .NET
<a name="ddb-net"></a>

In diesem Thema wird erklärt, wie Version 3 installiert und verwendet wird. *x* der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB. Einzelheiten zur Programmierung mit dem AWS Database Encryption SDK für DynamoDB finden Sie in [den.NET-Beispielen](https://github.com/aws/aws-database-encryption-sdk-dynamodb/tree/main/Examples/runtimes/net/src/) im aws-database-encryption-sdk -dynamodb-Repository unter. GitHub

Die clientseitige .NET-Verschlüsselungsbibliothek für DynamoDB richtet sich an Entwickler, die Anwendungen in C\$1 und anderen .NET-Programmiersprachen schreiben. Sie wird unter Windows, macOS und Linux unterstützt.

Alle [Programmiersprachenimplementierungen](ddb-programming-languages.md) des AWS Database Encryption SDK für DynamoDB sind interoperabel. Leere Werte für Listen- oder Zuordnungsdatentypen werden jedoch SDK für .NET nicht unterstützt. Das heißt, wenn Sie die clientseitige Java-Verschlüsselungsbibliothek für DynamoDB verwenden, um ein Element zu schreiben, das leere Werte für einen Listen- oder Zuordnungsdatentyp enthält, können Sie dieses Element nicht mit der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB entschlüsseln und lesen.

**Topics**
+ [Installation](#ddb-net-install)
+ [Debuggen](#ddb-net-debugging)
+ [Verwenden des .NET-Clients](ddb-net-using.md)
+ [.NET-Beispiele](ddb-net-examples.md)
+ [Fügen Sie Version 3.x zu einer vorhandenen Tabelle hinzu](ddb-net-config-existing-table.md)

## Installation der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB
<a name="ddb-net-install"></a>

[Die.NET-clientseitige Verschlüsselungsbibliothek für DynamoDB ist als AWS.Cryptography verfügbar. DbEncryptionSDK. DynamoDb](https://www.nuget.org/packages/AWS.Cryptography.DbEncryptionSDK.DynamoDb/)verpacken in NuGet. Einzelheiten zur Installation und Erstellung der Bibliothek finden Sie in [der.NET-README.md-Datei](https://github.com/aws/aws-database-encryption-sdk-dynamodb/blob/main/DynamoDbEncryption/runtimes/net/README.md) im -dynamodb-Repository. aws-database-encryption-sdk Die.NET-clientseitige Verschlüsselungsbibliothek für DynamoDB erfordert die Schlüssel, SDK für .NET auch wenn Sie keine () verwenden AWS Key Management Service .AWS KMS Die SDK für .NET wird mit dem Paket installiert. NuGet 

Version 3. *x* der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB unterstützt .NET 6.0 und .NET Framework net48 und höher.

## Debuggen mit.NET
<a name="ddb-net-debugging"></a>

Die.NET-clientseitige Verschlüsselungsbibliothek für DynamoDB generiert keine Protokolle. Ausnahmen in der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB generieren eine Ausnahmemeldung, aber keine Stack-Traces.

Um Ihnen beim Debuggen zu helfen, stellen Sie sicher, dass Sie die Anmeldung bei aktivieren. SDK für .NET Mithilfe der Protokolle und Fehlermeldungen von SDK für .NET können Sie Fehler, die in der auftreten, SDK für .NET von denen in der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB unterscheiden. *Hilfe zur SDK für .NET Protokollierung finden Sie [AWSLogging](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-config-other.html#config-setting-awslogging)im Entwicklerhandbuch.AWS SDK für .NET * (Um das Thema zu lesen, erweitern Sie den Abschnitt **Öffnen, um .NET Framework-Inhalte anzuzeigen**.)

# Verwenden der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB
<a name="ddb-net-using"></a>

In diesem Thema werden einige der Funktionen und Hilfsklassen in Version 3 erklärt. *x* der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB. 

Einzelheiten zur Programmierung mit der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB finden Sie in [den.NET-Beispielen](https://github.com/aws/aws-database-encryption-sdk-dynamodb/tree/main/Examples/runtimes/net/src/) im -dynamodb-Repository unter. aws-database-encryption-sdk GitHub

**Topics**
+ [Elementverschlüssler](#ddb-net-item-encryptors)
+ [Attributaktionen](#ddb-net-attribute-actions)
+ [Verschlüsselungskonfiguration](#ddb-net-config-encrypt)
+ [Artikel werden aktualisiert](#ddb-net-update-items)

## Elementverschlüssler
<a name="ddb-net-item-encryptors"></a>

Im Kern ist das AWS Database Encryption SDK für DynamoDB ein Elementverschlüsseler. Sie können Version 3 verwenden. *x* der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB, um Ihre DynamoDB-Tabellenelemente auf folgende Weise zu verschlüsseln, zu signieren, zu verifizieren und zu entschlüsseln.

**Das AWS Low-Level-Datenbankverschlüsselungs-SDK für die DynamoDB-API**  
Sie können Ihre [Tabellenverschlüsselungskonfiguration](#ddb-net-config-encrypt) verwenden, um einen DynamoDB-Client zu erstellen, der Elemente automatisch clientseitig mit Ihren DynamoDB-Anfragen verschlüsselt und signiert. `PutItem` [https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/dynamodb-intro.html#dynamodb-intro-apis-document](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/dynamodb-intro.html#dynamodb-intro-apis-document)  
[Sie müssen das AWS Low-Level-Datenbankverschlüsselungs-SDK für DynamoDB-API verwenden, um durchsuchbare Verschlüsselung verwenden zu können.](searchable-encryption.md)

**Die untergeordnete Ebene `DynamoDbItemEncryptor`**  
Die untergeordnete Ebene verschlüsselt und signiert oder entschlüsselt und verifiziert Ihre Tabellenelemente `DynamoDbItemEncryptor` direkt, ohne DynamoDB aufzurufen. Es stellt keine DynamoDB `PutItem` oder `GetItem` Anfragen. Sie können beispielsweise die untergeordnete Ebene verwenden, `DynamoDbItemEncryptor` um ein DynamoDB-Element, das Sie bereits abgerufen haben, direkt zu entschlüsseln und zu verifizieren. Wenn Sie die untergeordnete Ebene verwenden`DynamoDbItemEncryptor`, empfehlen wir die Verwendung des [Low-Level-Programmiermodells](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/dynamodb-intro.html#dynamodb-intro-apis-low-level), das für die Kommunikation mit SDK für .NET DynamoDB vorgesehen ist.  
[Die untergeordnete Ebene unterstützt keine durchsuchbare Verschlüsselung`DynamoDbItemEncryptor`.](searchable-encryption.md)

## Attributaktionen im AWS Database Encryption SDK für DynamoDB
<a name="ddb-net-attribute-actions"></a>

[Attributaktionen](concepts.md#crypt-actions) bestimmen, welche Attributwerte verschlüsselt und signiert werden, welche nur signiert sind, welche signiert und in den Verschlüsselungskontext aufgenommen werden und welche ignoriert werden.

Um Attributaktionen mit dem .NET-Client anzugeben, definieren Sie Attributaktionen manuell mithilfe eines Objektmodells. Geben Sie Ihre Attributaktionen an, indem Sie ein `Dictionary` Objekt erstellen, in dem die Name-Wert-Paare für Attributnamen und die angegebenen Aktionen stehen.

Geben Sie `ENCRYPT_AND_SIGN` an, dass ein Attribut verschlüsselt und signiert werden soll. Geben Sie `SIGN_ONLY` an, dass ein Attribut signiert, aber nicht verschlüsselt werden soll. Geben Sie `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` an, dass ein Attribut signiert und in den Verschlüsselungskontext aufgenommen werden soll. Sie können ein Attribut nicht verschlüsseln, ohne es auch zu signieren. Geben Sie `DO_NOTHING` an, ob ein Attribut ignoriert werden soll.

Die Partitions- und Sortierattribute müssen entweder `SIGN_ONLY` oder lauten`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. Wenn Sie Attribute als definieren`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`, müssen dies auch die Partitions- und Sortierattribute sein`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

**Anmerkung**  
Nachdem Sie Ihre Attributaktionen definiert haben, müssen Sie definieren, welche Attribute von den Signaturen ausgeschlossen werden. Um das future Hinzufügen neuer Attribute ohne Vorzeichen zu vereinfachen, empfehlen wir, ein eindeutiges Präfix (wie "`:`„) zu wählen, um Ihre vorzeichenlosen Attribute zu identifizieren. Nehmen Sie dieses Präfix in den Attributnamen für alle Attribute auf, die Sie bei der Definition Ihres DynamoDB-Schemas und Ihrer Attributaktionen markiert `DO_NOTHING` haben.

Das folgende Objektmodell veranschaulicht, wie Sie`ENCRYPT_AND_SIGN`, `SIGN_ONLY``SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`, und `DO_NOTHING` Attributaktionen mit dem .NET-Client angeben. In diesem Beispiel wird das Präfix "`:`" verwendet, um `DO_NOTHING` Attribute zu identifizieren.

**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 Leser bereit, bevor [Sie Ihr Datenmodell so aktualisieren](ddb-update-data-model.md), dass es diese enthält`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

```
var attributeActionsOnEncrypt = new Dictionary<string, CryptoAction>
{
    ["partition_key"] = CryptoAction.SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT, // The partition attribute must be signed
    ["sort_key"] = CryptoAction.SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT, // The sort attribute must be signed
    ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN,
    ["attribute2"] = CryptoAction.SIGN_ONLY,
    ["attribute3"] = CryptoAction.SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT,
    [":attribute4"] = CryptoAction.DO_NOTHING
};
```

## Verschlüsselungskonfiguration im AWS Database Encryption SDK für DynamoDB
<a name="ddb-net-config-encrypt"></a>

Wenn Sie das AWS Database Encryption SDK verwenden, müssen Sie explizit eine Verschlüsselungskonfiguration für Ihre DynamoDB-Tabelle definieren. Die in Ihrer Verschlüsselungskonfiguration erforderlichen Werte hängen davon ab, ob Sie Ihre Attributaktionen manuell oder mit einer annotierten Datenklasse definiert haben.

Der folgende Ausschnitt definiert eine DynamoDB-Tabellenverschlüsselungskonfiguration unter Verwendung des AWS Low-Level-Datenbankverschlüsselungs-SDK für DynamoDB-API und zulässige unsignierte Attribute, die durch ein eindeutiges Präfix definiert sind.

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix,
    // Optional: SearchConfig only required if you use beacons
    Search = new SearchConfig
    {
        WriteVersion = 1, // MUST be 1
        Versions = beaconVersions
    }    
};
tableConfigs.Add(ddbTableName, config);
```

**Logischer Tabellenname**  
Ein logischer Tabellenname für Ihre DynamoDB-Tabelle.  
Der logische Tabellenname ist kryptografisch an alle in der Tabelle gespeicherten Daten gebunden, um DynamoDB-Wiederherstellungsvorgänge zu vereinfachen. Es wird dringend empfohlen, Ihren DynamoDB-Tabellennamen als logischen Tabellennamen anzugeben, wenn Sie Ihre Verschlüsselungskonfiguration zum ersten Mal definieren. Sie müssen immer denselben logischen Tabellennamen angeben. Damit die Entschlüsselung erfolgreich ist, muss der Name der logischen Tabelle mit dem Namen übereinstimmen, der bei der Verschlüsselung angegeben wurde. Falls sich Ihr DynamoDB-Tabellenname nach dem [Wiederherstellen Ihrer DynamoDB-Tabelle aus einer Sicherung](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Restore.Tutorial.html) ändert, stellt der logische Tabellenname sicher, dass der Entschlüsselungsvorgang die Tabelle weiterhin erkennt.

**Zulässige Attribute ohne Vorzeichen**  
Die `DO_NOTHING` in Ihren Attributaktionen markierten Attribute.  
Die zulässigen Attribute ohne Vorzeichen teilen dem Client mit, welche Attribute von den Signaturen ausgeschlossen sind. Der Client geht davon aus, dass alle anderen Attribute in der Signatur enthalten sind. Beim Entschlüsseln eines Datensatzes bestimmt der Client dann anhand der von Ihnen angegebenen zulässigen Attribute ohne Vorzeichen, welche er überprüfen muss und welche ignoriert werden sollen. Sie können kein Attribut aus Ihren zulässigen Attributen ohne Vorzeichen entfernen.  
Sie können die zulässigen Attribute ohne Vorzeichen explizit definieren, indem Sie ein Array erstellen, das alle Ihre `DO_NOTHING` Attribute auflistet. Sie können bei der Benennung Ihrer `DO_NOTHING` Attribute auch ein eindeutiges Präfix angeben und das Präfix verwenden, um dem Client mitzuteilen, welche Attribute vorzeichenlos sind. Wir empfehlen dringend, ein eindeutiges Präfix anzugeben, da dies das Hinzufügen eines neuen `DO_NOTHING` Attributs in der future vereinfacht. Weitere Informationen finden Sie unter [Aktualisierung Ihres Datenmodells](ddb-update-data-model.md).  
Wenn Sie kein Präfix für alle `DO_NOTHING` Attribute angeben, können Sie ein `allowedUnsignedAttributes` Array konfigurieren, das explizit alle Attribute auflistet, von denen der Client erwarten sollte, dass sie nicht signiert sind, wenn er sie bei der Entschlüsselung findet. Sie sollten Ihre erlaubten vorzeichenlosen Attribute nur dann explizit definieren, wenn dies unbedingt erforderlich ist.

**Suchkonfiguration (optional)**  
Das `SearchConfig` definiert die [Beacon-Version](using-beacons.md#beacon-version).  
Der `SearchConfig` muss angegeben werden, um [durchsuchbare Verschlüsselung](searchable-encryption.md) oder [signierte](configure.md#signed-beacons) Beacons verwenden zu können.

**Algorithm Suite (optional)**  
Die `algorithmSuiteId` definiert, welche Algorithmus-Suite das AWS Database Encryption SDK verwendet.  
Sofern Sie nicht explizit eine alternative Algorithmussuite angeben, verwendet das AWS Database Encryption SDK die [Standard-Algorithmussuite](supported-algorithms.md#recommended-algorithms). [Die Standard-Algorithmussuite verwendet den AES-GCM-Algorithmus mit Schlüsselableitung, [digitalen Signaturen](concepts.md#digital-sigs) und Schlüsselzusage.](concepts.md#key-commitment) Obwohl die Standard-Algorithmus-Suite wahrscheinlich für die meisten Anwendungen geeignet ist, können Sie auch eine alternative Algorithmussuite wählen. Einige Vertrauensmodelle würden beispielsweise durch eine Algorithmus-Suite ohne digitale Signaturen erfüllt. Hinweise zu den Algorithmus-Suites, die das AWS Database Encryption SDK unterstützt, finden Sie unter[Unterstützte Algorithmus-Suiten im AWS Database Encryption SDK](supported-algorithms.md).  
Um die [AES-GCM-Algorithmussuite ohne digitale ECDSA-Signaturen](supported-algorithms.md#other-algorithms) auszuwählen, nehmen Sie den folgenden Ausschnitt in Ihre Tabellenverschlüsselungskonfiguration auf.  

```
AlgorithmSuiteId = DBEAlgorithmSuiteId.ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY_SYMSIG_HMAC_SHA384
```

## Elemente mit dem Database Encryption SDK aktualisieren AWS
<a name="ddb-net-update-items"></a>

Das AWS Database Encryption SDK unterstützt [ddb:](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html) nicht UpdateItem für Elemente, die verschlüsselte oder signierte Attribute enthalten. Um ein verschlüsseltes oder signiertes Attribut zu aktualisieren, müssen Sie [ddb](https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_PutItem.html): verwenden. PutItem Wenn Sie in Ihrer `PutItem` Anfrage denselben Primärschlüssel wie ein vorhandenes Element angeben, ersetzt das neue Element das vorhandene Element vollständig. Sie können [CLOBBER](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapperConfig.SaveBehavior.html#CLOBBER) auch verwenden, um alle Attribute beim Speichern zu löschen und zu ersetzen, nachdem Sie Ihre Artikel aktualisiert haben.

# .NET-Beispiele
<a name="ddb-net-examples"></a>

Die folgenden Beispiele zeigen, wie Sie die clientseitige .NET-Verschlüsselungsbibliothek für DynamoDB verwenden, um die Tabellenelemente in Ihrer Anwendung zu schützen. Weitere Beispiele (und eigene Beispiele) finden Sie in den [.NET-Beispielen](https://github.com/aws/aws-database-encryption-sdk-dynamodb//tree/main/Examples/runtimes/net/src) im -dynamodb-Repository unter. aws-database-encryption-sdk GitHub

Die folgenden Beispiele zeigen, wie die clientseitige .NET-Verschlüsselungsbibliothek für DynamoDB in einer neuen, nicht aufgefüllten Amazon DynamoDB-Tabelle konfiguriert wird. Wenn Sie Ihre vorhandenen Amazon DynamoDB-Tabellen für die clientseitige Verschlüsselung konfigurieren möchten, finden Sie weitere Informationen unter. [Fügen Sie Version 3.x zu einer vorhandenen Tabelle hinzu](ddb-net-config-existing-table.md)

**Topics**
+ [Verwenden des AWS Low-Level-Datenbankverschlüsselungs-SDK für DynamoDB-API](#ddb-net-lowlevel-API-example)
+ [Verwenden Sie die untergeordnete Ebene `DynamoDbItemEncryptor`](#ddb-net-itemencryptor)

## Verwenden des AWS Low-Level-Datenbankverschlüsselungs-SDK für DynamoDB-API
<a name="ddb-net-lowlevel-API-example"></a>

Das folgende Beispiel zeigt, wie Sie das AWS Low-Level-Datenbankverschlüsselungs-SDK für die DynamoDB-API mit einem [AWS KMS Schlüsselbund](use-kms-keyring.md) verwenden, um Elemente automatisch clientseitig mit Ihren DynamoDB-Anfragen zu verschlüsseln und zu signieren. `PutItem`

Sie können jeden unterstützten [Schlüsselbund verwenden, wir empfehlen jedoch, wann immer möglich, einen der Schlüsselringe](keyrings.md) zu verwenden. AWS KMS 

**Sehen Sie sich das vollständige Codebeispiel** [an: .cs BasicPutGetExample](https://github.com/aws/aws-database-encryption-sdk-dynamodb/tree/main/Examples/runtimes/net/src/BasicPutGetExample.cs)

**Schritt 1: Erstellen Sie den Schlüsselbund AWS KMS **  
Das folgende Beispiel verwendet`CreateAwsKmsMrkMultiKeyring`, um einen AWS KMS Schlüsselbund mit einem symmetrischen Verschlüsselungs-KMS-Schlüssel zu erstellen. Die `CreateAwsKmsMrkMultiKeyring` Methode stellt sicher, dass der Schlüsselbund sowohl Schlüssel mit einer Region als auch Schlüssel mit mehreren Regionen korrekt verarbeitet.  

```
var matProv = new MaterialProviders(new MaterialProvidersConfig());
var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId };
var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
```

**Schritt 2: Konfigurieren Sie Ihre Attributaktionen**  
Das folgende Beispiel definiert ein `attributeActionsOnEncrypt` Wörterbuch, das Beispiele für [Attributaktionen](concepts.md#crypt-actions) für ein Tabellenelement darstellt.  
Das folgende Beispiel definiert keine Attribute als`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. Wenn Sie `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Attribute angeben, müssen auch die Partitions- und Sortierattribute angegeben werden`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

```
var attributeActionsOnEncrypt = new Dictionary<string, CryptoAction>
{
    ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY
    ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY
    ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN,
    ["attribute2"] = CryptoAction.SIGN_ONLY,
    [":attribute3"] = CryptoAction.DO_NOTHING
};
```

**Schritt 3: Definieren Sie, welche Attribute von den Signaturen ausgeschlossen werden**  
Im folgenden Beispiel wird davon ausgegangen, dass alle `DO_NOTHING` Attribute das eindeutige Präfix "`:`" haben, und verwendet dieses Präfix, um die zulässigen Attribute ohne Vorzeichen zu definieren. Der Client geht davon aus, dass alle Attributnamen mit dem Präfix "`:`" von den Signaturen ausgeschlossen sind. Weitere Informationen finden Sie unter [Allowed unsigned attributes](ddb-net-using.md#net-allowed-unauth).  

```
const String unsignAttrPrefix = ":";
```

**Schritt 4: Definieren Sie die Konfiguration der DynamoDB-Tabellenverschlüsselung**  
Das folgende Beispiel definiert eine `tableConfigs` Map, die die Verschlüsselungskonfiguration für diese DynamoDB-Tabelle darstellt.  
In diesem Beispiel wird der DynamoDB-Tabellenname als [logischer Tabellenname](ddb-net-using.md#net-logical-table-name) angegeben. Es wird dringend empfohlen, Ihren DynamoDB-Tabellennamen als logischen Tabellennamen anzugeben, wenn Sie Ihre Verschlüsselungskonfiguration zum ersten Mal definieren. Weitere Informationen finden Sie unter [Verschlüsselungskonfiguration im AWS Database Encryption SDK für DynamoDB](ddb-net-using.md#ddb-net-config-encrypt).  
Um [durchsuchbare Verschlüsselung](searchable-encryption.md) oder [signierte Beacons](configure.md#signed-beacons) zu verwenden, müssen Sie die auch [`SearchConfig`](ddb-java-using.md#ddb-search-config)in Ihre Verschlüsselungskonfiguration aufnehmen.

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix
};
tableConfigs.Add(ddbTableName, config);
```

**Schritt 5: Einen neuen AWS SDK-DynamoDB-Client erstellen**  
Im folgenden Beispiel wird ein neuer AWS SDK-DynamoDB-Client mit dem `TableEncryptionConfigs` aus **Schritt** 4 erstellt.  

```
var ddb = new Client.DynamoDbClient(
    new DynamoDbTablesEncryptionConfig { TableEncryptionConfigs = tableConfigs });
```

**Schritt 6: Verschlüsseln und Signieren eines DynamoDB-Tabellenelements**  
Das folgende Beispiel definiert ein `item` Dictionary, das ein Beispieltabellenelement darstellt und das Element in die DynamoDB-Tabelle einfügt. Das Element wird clientseitig verschlüsselt und signiert, bevor es an DynamoDB gesendet wird.  

```
var item = new Dictionary<String, AttributeValue>
{
    ["partition_key"] = new AttributeValue("BasicPutGetExample"),
    ["sort_key"] = new AttributeValue { N = "0" },
    ["attribute1"] = new AttributeValue("encrypt and sign me!"),
    ["attribute2"] = new AttributeValue("sign me!"),
    [":attribute3"] = new AttributeValue("ignore me!")
};

PutItemRequest putRequest = new PutItemRequest
{
    TableName = ddbTableName,
    Item = item
};

PutItemResponse putResponse = await ddb.PutItemAsync(putRequest);
```

## Verwenden Sie die untergeordnete Ebene `DynamoDbItemEncryptor`
<a name="ddb-net-itemencryptor"></a>

Das folgende Beispiel zeigt, wie Sie die untergeordnete Ebene `DynamoDbItemEncryptor` mit einem [AWS KMS Schlüsselbund](use-kms-keyring.md) verwenden, um Tabellenelemente direkt zu verschlüsseln und zu signieren. Das `DynamoDbItemEncryptor` fügt das Element nicht in Ihre DynamoDB-Tabelle ein.

Sie können jeden unterstützten [Schlüsselbund](keyrings.md) mit dem DynamoDB Enhanced Client verwenden, wir empfehlen jedoch, wann immer möglich, einen der AWS KMS Schlüsselringe zu verwenden.

**Anmerkung**  
[Die untergeordnete Ebene unterstützt keine durchsuchbare Verschlüsselung. `DynamoDbItemEncryptor`](searchable-encryption.md) Verwenden Sie das AWS Low-Level-Datenbankverschlüsselungs-SDK für DynamoDB-API, um durchsuchbare Verschlüsselung zu verwenden.

**Sehen Sie sich das vollständige Codebeispiel an**[: .cs ItemEncryptDecryptExample](https://github.com/aws/aws-database-encryption-sdk-dynamodb/tree/main/Examples/runtimes/net/src/itemencryptor/ItemEncryptDecryptExample.cs)

**Schritt 1: Erstellen Sie den Schlüsselbund AWS KMS **  
Das folgende Beispiel verwendet`CreateAwsKmsMrkMultiKeyring`, um einen AWS KMS Schlüsselbund mit einem symmetrischen Verschlüsselungs-KMS-Schlüssel zu erstellen. Die `CreateAwsKmsMrkMultiKeyring` Methode stellt sicher, dass der Schlüsselbund sowohl Schlüssel mit einer Region als auch Schlüssel mit mehreren Regionen korrekt verarbeitet.  

```
var matProv = new MaterialProviders(new MaterialProvidersConfig());
var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId };
var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
```

**Schritt 2: Konfigurieren Sie Ihre Attributaktionen**  
Das folgende Beispiel definiert ein `attributeActionsOnEncrypt` Wörterbuch, das Beispiele für [Attributaktionen](concepts.md#crypt-actions) für ein Tabellenelement darstellt.  
Das folgende Beispiel definiert keine Attribute als`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`. Wenn Sie `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Attribute angeben, müssen auch die Partitions- und Sortierattribute angegeben werden`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

```
var attributeActionsOnEncrypt = new Dictionary<String, CryptoAction>
{
    ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY
    ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY
    ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN,
    ["attribute2"] = CryptoAction.SIGN_ONLY,
    [":attribute3"] = CryptoAction.DO_NOTHING
};
```

**Schritt 3: Definieren Sie, welche Attribute von den Signaturen ausgeschlossen werden**  
Im folgenden Beispiel wird davon ausgegangen, dass alle `DO_NOTHING` Attribute das eindeutige Präfix "`:`" haben, und verwendet dieses Präfix, um die zulässigen Attribute ohne Vorzeichen zu definieren. Der Client geht davon aus, dass alle Attributnamen mit dem Präfix "`:`" von den Signaturen ausgeschlossen sind. Weitere Informationen finden Sie unter [Allowed unsigned attributes](ddb-net-using.md#net-allowed-unauth).  

```
String unsignAttrPrefix = ":";
```

**Schritt 4: Definieren Sie die `DynamoDbItemEncryptor` Konfiguration**  
Das folgende Beispiel definiert die Konfiguration für die`DynamoDbItemEncryptor`.  
In diesem Beispiel wird der DynamoDB-Tabellenname als [logischer Tabellenname](ddb-net-using.md#net-logical-table-name) angegeben. Es wird dringend empfohlen, Ihren DynamoDB-Tabellennamen als logischen Tabellennamen anzugeben, wenn Sie Ihre Verschlüsselungskonfiguration zum ersten Mal definieren. Weitere Informationen finden Sie unter [Verschlüsselungskonfiguration im AWS Database Encryption SDK für DynamoDB](ddb-net-using.md#ddb-net-config-encrypt).  

```
var config = new DynamoDbItemEncryptorConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix
};
```

**Schritt 5: Erstellen Sie das `DynamoDbItemEncryptor`**  
Im folgenden Beispiel wird `DynamoDbItemEncryptor` mit dem `config` aus **Schritt 4** ein neues erstellt.  

```
var itemEncryptor = new DynamoDbItemEncryptor(config);
```

**Schritt 6: Verschlüsseln und signieren Sie ein Tabellenelement direkt**  
Im folgenden Beispiel wird ein Element direkt verschlüsselt und signiert mit dem. `DynamoDbItemEncryptor` Das `DynamoDbItemEncryptor` fügt das Element nicht in Ihre DynamoDB-Tabelle ein.  

```
var originalItem = new Dictionary<String, AttributeValue>
{
    ["partition_key"] = new AttributeValue("ItemEncryptDecryptExample"),
    ["sort_key"] = new AttributeValue { N = "0" },
    ["attribute1"] = new AttributeValue("encrypt and sign me!"),
    ["attribute2"] = new AttributeValue("sign me!"),
    [":attribute3"] = new AttributeValue("ignore me!")
};

var encryptedItem = itemEncryptor.EncryptItem(
    new EncryptItemInput { PlaintextItem = originalItem }
).EncryptedItem;
```

# Konfigurieren Sie eine bestehende DynamoDB-Tabelle für die Verwendung des AWS Database Encryption SDK für DynamoDB
<a name="ddb-net-config-existing-table"></a>

Mit Version 3. *x* der clientseitigen .NET-Verschlüsselungsbibliothek für DynamoDB können Sie Ihre vorhandenen Amazon DynamoDB-Tabellen für die clientseitige Verschlüsselung konfigurieren. Dieses Thema enthält Anleitungen zu den drei Schritten, die Sie ausführen müssen, um Version 3 hinzuzufügen. *x* zu einer vorhandenen, gefüllten DynamoDB-Tabelle.

## Schritt 1: Bereiten Sie das Lesen und Schreiben verschlüsselter Elemente vor
<a name="ddb-net-add-step1"></a>

Gehen Sie wie folgt vor, um Ihren AWS Database Encryption SDK-Client auf das Lesen und Schreiben verschlüsselter Elemente vorzubereiten. Nachdem Sie die folgenden Änderungen vorgenommen haben, liest und schreibt Ihr Client weiterhin Klartext-Elemente. Neue Elemente, die in die Tabelle geschrieben werden, werden nicht verschlüsselt oder signiert, aber es kann verschlüsselte Elemente entschlüsseln, sobald sie erscheinen. Diese Änderungen bereiten den Client darauf vor, mit der [Verschlüsselung](#ddb-net-add-step2) neuer Elemente zu beginnen. Die folgenden Änderungen müssen auf jedem Lesegerät installiert werden, bevor Sie mit dem nächsten Schritt fortfahren.

**1. Definieren Sie Ihre [Attributaktionen](concepts.md#crypt-actions)**  
Erstellen Sie ein Objektmodell, um zu definieren, welche Attributwerte verschlüsselt und signiert werden, welche nur signiert und welche ignoriert werden.  
Standardmäßig sind Primärschlüsselattribute signiert, aber nicht verschlüsselt (`SIGN_ONLY`), und alle anderen Attribute sind verschlüsselt und signiert (`ENCRYPT_AND_SIGN`).  
Geben Sie `ENCRYPT_AND_SIGN` an, dass ein Attribut verschlüsselt und signiert werden soll. Geben Sie `SIGN_ONLY` an, dass ein Attribut signiert, aber nicht verschlüsselt werden soll. Geben Sie `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` an, dass das Attribut signiert und in den Verschlüsselungskontext aufgenommen werden soll. Sie können ein Attribut nicht verschlüsseln, ohne es auch zu signieren. Geben Sie `DO_NOTHING` an, ob ein Attribut ignoriert werden soll. Weitere Informationen finden Sie unter [Attributaktionen im AWS Database Encryption SDK für DynamoDB](ddb-net-using.md#ddb-net-attribute-actions).  
Wenn Sie `SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT` Attribute angeben, müssen auch die Partitions- und Sortierattribute angegeben werden`SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT`.

```
var attributeActionsOnEncrypt = new Dictionary<string, CryptoAction>
{
    ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY
    ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY
    ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN,
    ["attribute2"] = CryptoAction.SIGN_ONLY,
    [":attribute3"] = CryptoAction.DO_NOTHING
};
```

**2. Definieren Sie, welche Attribute von den Signaturen ausgeschlossen werden**  
Im folgenden Beispiel wird davon ausgegangen, dass alle `DO_NOTHING` Attribute das eindeutige Präfix "`:`" haben, und verwendet dieses Präfix, um die zulässigen Attribute ohne Vorzeichen zu definieren. Der Client geht davon aus, dass alle Attributnamen mit dem Präfix "`:`" von den Signaturen ausgeschlossen sind. Weitere Informationen finden Sie unter [Allowed unsigned attributes](ddb-net-using.md#net-allowed-unauth).  

```
const String unsignAttrPrefix = ":";
```

**3. Erstellen Sie einen [Schlüsselbund](keyrings.md)**  
Im folgenden Beispiel wird ein [AWS KMS Schlüsselbund](use-kms-keyring.md) erstellt. Der AWS KMS Schlüsselbund verwendet symmetrische Verschlüsselung oder asymmetrisches RSA, um Datenschlüssel AWS KMS keys zu generieren, zu verschlüsseln und zu entschlüsseln.  
In diesem Beispiel wird ein AWS KMS Schlüsselbund `CreateMrkMultiKeyring` mit einem KMS-Schlüssel mit symmetrischer Verschlüsselung erstellt. Die `CreateAwsKmsMrkMultiKeyring` Methode stellt sicher, dass der Schlüsselbund sowohl Schlüssel mit einer Region als auch Schlüssel mit mehreren Regionen korrekt verarbeitet.  

```
var matProv = new MaterialProviders(new MaterialProvidersConfig());
var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId };
var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
```

**4. Definieren Sie die Konfiguration der DynamoDB-Tabellenverschlüsselung **  
Das folgende Beispiel definiert eine `tableConfigs` Map, die die Verschlüsselungskonfiguration für diese DynamoDB-Tabelle darstellt.  
In diesem Beispiel wird der DynamoDB-Tabellenname als [logischer Tabellenname](ddb-net-using.md#net-logical-table-name) angegeben. Es wird dringend empfohlen, Ihren DynamoDB-Tabellennamen als logischen Tabellennamen anzugeben, wenn Sie Ihre Verschlüsselungskonfiguration zum ersten Mal definieren.  
Sie müssen `FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT` als Klartext-Override angeben. Diese Richtlinie liest und schreibt weiterhin Klartext-Elemente, liest verschlüsselte Elemente und bereitet den Client darauf vor, verschlüsselte Elemente zu schreiben.  
Weitere Hinweise zu den Werten, die in der Konfiguration der Tabellenverschlüsselung enthalten sind, finden Sie unter[Verschlüsselungskonfiguration im AWS Database Encryption SDK für DynamoDB](ddb-java-using.md#ddb-config-encrypt).  

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix,
    PlaintextOverride = FORCE_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT
};
tableConfigs.Add(ddbTableName, config);
```

**5. Einen neuen AWS SDK-DynamoDB-Client erstellen**  
Im folgenden Beispiel wird ein neuer AWS SDK-DynamoDB-Client mit dem `TableEncryptionConfigs` aus **Schritt** 4 erstellt.  

```
var ddb = new Client.DynamoDbClient(
    new DynamoDbTablesEncryptionConfig { TableEncryptionConfigs = tableConfigs });
```

## Schritt 2: Schreiben Sie verschlüsselte und signierte Elemente
<a name="ddb-net-add-step2"></a>

Aktualisieren Sie die Klartext-Richtlinie in Ihrer Tabellenverschlüsselungskonfiguration, damit der Client verschlüsselte und signierte Elemente schreiben kann. Nachdem Sie die folgende Änderung implementiert haben, verschlüsselt und signiert der Client neue Elemente auf der Grundlage der Attributaktionen, die Sie in **Schritt** 1 konfiguriert haben. Der Client kann Klartext-Elemente sowie verschlüsselte und signierte Elemente lesen.

Bevor Sie mit [Schritt 3](#ddb-net-add-step3) fortfahren, müssen Sie alle vorhandenen Klartextelemente in Ihrer Tabelle verschlüsseln und signieren. Es gibt keine einzelne Metrik oder Abfrage, die Sie ausführen können, um Ihre vorhandenen Klartextelemente schnell zu verschlüsseln. Verwenden Sie den Prozess, der für Ihr System am sinnvollsten ist. Sie könnten beispielsweise einen asynchronen Prozess verwenden, der die Tabelle langsam scannt und dann die Elemente mithilfe der von Ihnen definierten Attributaktionen und der Verschlüsselungskonfiguration neu schreibt. Um die Klartext-Elemente in Ihrer Tabelle zu identifizieren, empfehlen wir, nach allen Elementen zu suchen, die nicht die `aws_dbe_foot` Attribute `aws_dbe_head` und enthalten, die das AWS Database Encryption SDK Elementen hinzufügt, wenn sie verschlüsselt und signiert sind.

Im folgenden Beispiel wird die Konfiguration der Tabellenverschlüsselung aus **Schritt 1** aktualisiert. Sie müssen die Klartext-Override mit `FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT` aktualisieren. Diese Richtlinie liest weiterhin Klartext-Elemente, liest und schreibt aber auch verschlüsselte Elemente. Erstellen Sie einen neuen AWS SDK-DynamoDB-Client mit dem aktualisierten. `TableEncryptionConfigs`

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix,
    PlaintextOverride = FORBID_WRITE_PLAINTEXT_ALLOW_READ_PLAINTEXT
};
tableConfigs.Add(ddbTableName, config);
```

## Schritt 3: Nur verschlüsselte und signierte Elemente lesen
<a name="ddb-net-add-step3"></a>

Nachdem Sie alle Ihre Elemente verschlüsselt und signiert haben, aktualisieren Sie die Klartext-Überschreibung in Ihrer Tabellenverschlüsselungskonfiguration, sodass der Client nur verschlüsselte und signierte Elemente lesen und schreiben kann. Nachdem Sie die folgende Änderung implementiert haben, verschlüsselt und signiert der Client neue Elemente auf der Grundlage der Attributaktionen, die Sie in **Schritt** 1 konfiguriert haben. Der Client kann nur verschlüsselte und signierte Elemente lesen.

Im folgenden Beispiel wird die Konfiguration der Tabellenverschlüsselung aus **Schritt 2** aktualisiert. Sie können entweder die Klartext-Override mit der Klartext-Richtlinie aktualisieren `FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT` oder die Klartext-Richtlinie aus Ihrer Konfiguration entfernen. Der Client liest und schreibt standardmäßig nur verschlüsselte und signierte Elemente. Erstellen Sie einen neuen AWS SDK-DynamoDB-Client mit dem aktualisierten. `TableEncryptionConfigs`

```
Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs =
    new Dictionary<String, DynamoDbTableEncryptionConfig>();
DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig
{
    LogicalTableName = ddbTableName,
    PartitionKeyName = "partition_key",
    SortKeyName = "sort_key",
    AttributeActionsOnEncrypt = attributeActionsOnEncrypt,
    Keyring = kmsKeyring,
    AllowedUnsignedAttributePrefix = unsignAttrPrefix,
    // Optional: you can also remove the plaintext policy from your configuration
    PlaintextOverride = FORBID_WRITE_PLAINTEXT_FORBID_READ_PLAINTEXT
};
tableConfigs.Add(ddbTableName, config);
```