

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.

# Migration des Amazon S3 S3-Verschlüsselungsclients (V1 auf V2)
<a name="s3-encryption-migration-v1-v2"></a>

**Anmerkung**  
Wenn Sie Version 2 des Amazon S3 S3-Verschlüsselungsclients verwenden und zu Version 3 migrieren möchten, finden Sie weitere Informationen unter[Migration des Amazon S3 S3-Verschlüsselungsclients (V2 auf V3)](s3-encryption-migration-v2-v3.md).

In diesem Thema wird gezeigt, wie Sie Ihre Anwendungen von Version 1 (V1) des Amazon Simple Storage Service (Amazon S3) -Verschlüsselungsclients auf Version 2 (V2) migrieren und die Anwendungsverfügbarkeit während des gesamten Migrationsprozesses sicherstellen.

## Überblick über die Migration
<a name="migration-overview-v1-v2"></a>

Diese Migration erfolgt in zwei Phasen:

1. **Aktualisieren Sie bestehende Clients, damit sie neue Formate lesen können.** Stellen Sie zunächst eine aktualisierte Version von AWS SDK für C\+\+ für Ihre Anwendung bereit. Dadurch können bestehende V1-Verschlüsselungsclients Objekte entschlüsseln, die von den neuen V2-Clients geschrieben wurden. Wenn Ihre Anwendung mehrere verwendet AWS SDKs, müssen Sie jedes SDK separat aktualisieren.

2. **Migrieren Sie Verschlüsselungs- und Entschlüsselungsclients auf V2.** Sobald alle Ihre V1-Verschlüsselungsclients neue Formate lesen können, können Sie Ihre vorhandenen Verschlüsselungs- und Entschlüsselungsclients auf ihre jeweiligen V2-Versionen migrieren.

## Aktualisieren Sie bestehende Clients, um neue Formate zu lesen
<a name="update-existing-clients-to-read-new-formats-v1-v2"></a>

Sie müssen zuerst Ihre vorhandenen Clients auf die neueste SDK-Version aktualisieren. Nach Abschluss dieses Schritts können die V1-Clients Ihrer Anwendung Objekte entschlüsseln, die mit V2-Verschlüsselungsclients verschlüsselt wurden, ohne die Codebasis Ihrer Anwendung aktualisieren zu müssen.

### Erstellen und installieren Sie die neueste Version von AWS SDK für C\+\+
<a name="build-and-install-the-latest-version-of-the-sdk-cpp-v1-v2"></a>

 **Anwendungen, die das SDK aus der Quelle nutzen** 

Wenn Sie die Quelle erstellen und installieren, laden Sie die SDK-Quelle AWS SDK für C\+\+ von [`aws/aws-sdk-cpp`](https://github.com/aws/aws-sdk-cpp)on herunter oder klonen Sie sie GitHub. Wiederholen Sie dann Ihre normalen Build- und Installationsschritte.

Wenn Sie ein Upgrade AWS SDK für C\+\+ von einer Version vor 1.8.x durchführen, finden Sie in diesem [CHANGELOG](https://github.com/aws/aws-sdk-cpp/blob/master/CHANGELOG.md) die wichtigsten Änderungen, die in den einzelnen Hauptversionen eingeführt wurden. Weitere Informationen zum Erstellen und Installieren von finden Sie unter AWS SDK für C\+\+. [Den AWS SDK für C\+\+ aus dem Quellcode holen](sdk-from-source.md)

 **Anwendungen, die das SDK von Vcpkg nutzen** 

Wenn Ihre Anwendung [Vcpkg](https://github.com/microsoft/vcpkg) zur Nachverfolgung von SDK-Updates verwendet, verwenden Sie einfach Ihre bestehende Vcpkg-Upgrade-Methode, um das SDK auf die neueste Version zu aktualisieren. Beachten Sie, dass es zwischen der Veröffentlichung einer Version und der Verfügbarkeit über einen Paketmanager eine Verzögerung gibt. Die neueste Version ist immer verfügbar, wenn sie von der [Quelle aus installiert](sdk-from-source.md) wird. 

Sie können den folgenden Befehl ausführen, um das Paket zu aktualisieren`aws-sdk-cpp`:

```
vcpkg upgrade aws-sdk-cpp
```

Und überprüfen Sie die Version des Pakets`aws-sdk-cpp`:

```
vcpkg list aws-sdk-cpp
```

Die Version sollte mindestens 1.8.24 sein.

Weitere Hinweise zur Verwendung von Vcpkg mit dem finden Sie unter. AWS SDK für C\+\+[AWS SDK für C\+\+ Von einem Paketmanager bekommen](sdk-from-pm.md)

### Erstellen, installieren und implementieren Sie Ihre Anwendungen
<a name="build-install-and-deploy-your-applications-v1-v2"></a>

Wenn Ihre Anwendung statisch mit dem verknüpft wird AWS SDK für C\+\+, sind keine Codeänderungen in Ihrer Anwendung erforderlich. Sie müssen Ihre Anwendung jedoch erneut erstellen, um die neuesten SDK-Änderungen zu verwenden. Dieser Schritt ist für dynamisches Verknüpfen nicht erforderlich.

Nachdem Sie die Abhängigkeitsversion Ihrer Anwendung aktualisiert und die Funktionalität der Anwendung überprüft haben, fahren Sie mit der Bereitstellung Ihrer Anwendung in Ihrer Flotte fort. Sobald die Anwendungsbereitstellung abgeschlossen ist, können Sie mit der nächsten Phase der Migration Ihrer Anwendung zur Verwendung der V2-Verschlüsselungs- und Entschlüsselungsclients fortfahren.

## Migrieren Sie die Verschlüsselungs- und Entschlüsselungsclients zu V2
<a name="migrate-encryption-and-decryption-clients-to-v2-v1-v2"></a>

Die folgenden Schritte zeigen Ihnen, wie Sie Ihren Code erfolgreich von V1 auf V2 des Amazon S3 S3-Verschlüsselungsclients migrieren. Da Codeänderungen erforderlich sind, müssen Sie Ihre Anwendung neu erstellen, unabhängig davon, ob sie statisch oder dynamisch mit dem AWS SDK für C\+\+ verknüpft wird.

### Verwendung neuer Verschlüsselungsmaterialien
<a name="using-new-encryption-materials-v1-v2"></a>

Mit Amazon S3 S3-Verschlüsselungsclients V2 und der V2-Kryptokonfiguration sind die folgenden Verschlüsselungsmaterialien veraltet:
+  `SimpleEncryptionMaterials` 
+  `KMSEncryptionMaterials` 

Sie wurden durch die folgenden sicheren Verschlüsselungsmaterialien ersetzt:
+  `SimpleEncryptionMaterialsWithGCMAAD` 
+  `KMSWithContextEncryptionMaterials` 

Die folgenden Codeänderungen sind erforderlich, um einen V2 S3-Verschlüsselungsclient zu erstellen:
+   
**Wenn Sie `KMSEncryptionMaterials` beim Erstellen eines S3-Verschlüsselungsclients Folgendes verwenden:**  
  + Wenn Sie einen V2-S3-Verschlüsselungsclient erstellen, `KMSEncryptionMaterials` ersetzen Sie ihn durch `KMSWithContextEncryptionMaterials` und geben Sie ihn in der V2-Kryptokonfiguration an.
  + Wenn Sie ein Objekt mit V2-Amazon S3-Verschlüsselungsclients platzieren, müssen Sie explizit eine Zeichenfolgen-Kontext-Map als KMS-Kontext für die Verschlüsselung des CEK angeben. Dies könnte eine leere Map sein.
+   
**Wenn Sie `SimpleEncryptionMaterials` beim Erstellen eines S3-Verschlüsselungsclients Folgendes verwenden:**  
  + Wenn Sie einen V2-Amazon S3-Verschlüsselungsclient erstellen, `SimpleEncryptionMaterials` ersetzen Sie ihn durch `SimpleEncryptionMaterialsWithGCMAAD` und geben Sie ihn in der V2-Kryptokonfiguration an.
  + Wenn Sie ein Objekt mit V2-Amazon S3-Verschlüsselungsclients platzieren, müssen Sie explizit eine leere Zeichenfolgen-Kontextmap angeben, da das SDK andernfalls einen Fehler zurückgibt.

 **Beispiel: Verwendung des KMS/KMSWithContext Key-Wrap-Algorithmus** 

 *Vor der Migration (KMS-Schlüsselumbruch)* 

```
auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID);
CryptoConfiguration cryptoConfig;
S3EncryptionClient encryptionClient(materials, cryptoConfig);
// Code snippet here to setup the putObjectRequest object.
encryptionClient.PutObject(putObjectRequest);
```

 *Nach der Migration (KMSWithKontext-Schlüsselumbruch)* 

```
auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID);
CryptoConfigurationV2 cryptoConfig(materials);
S3EncryptionClientV2 encryptionClient(cryptoConfig);
// Code snippet here to setup the putObjectRequest object.
Aws::Map<Aws::String, Aws::String> kmsContextMap;
kmsContextMap.emplace("client", "aws-sdk-cpp");
kmsContextMap.emplace("version", "1.8.0");
encryptionClient.PutObject(putObjectRequest, kmsContextMap /* could be empty as well */);
```

 **Beispiel: Verwendung des AES/AES-GCM-Schlüsselumbruchalgorithmus** 

 *Vor der Migration (AES-Schlüsselumbruch)* 

```
auto materials = Aws::MakeShared<SimpleEncryptionMaterials>("s3Encryption", HashingUtils::Base64Decode(AES_MASTER_KEY_BASE64));
CryptoConfiguration cryptoConfig;
S3EncryptionClient encryptionClient(materials, cryptoConfig);
// Code snippet here to setup the putObjectRequest object.
encryptionClient.PutObject(putObjectRequest);
```

 *Nach der Migration (AES-GCM-Schlüsselumbruch)* 

```
auto materials = Aws::MakeShared<SimpleEncryptionMaterialsWithGCMAAD>("s3EncryptionV2", HashingUtils::Base64Decode(AES_MASTER_KEY_BASE64));
CryptoConfigurationV2 cryptoConfig(materials);
S3EncryptionClientV2 encryptionClient(cryptoConfig);
// Code snippet here to setup the putObjectRequest object.
encryptionClient.PutObject(putObjectRequest, {} /* must be an empty map */);
```

## Weitere Beispiele
<a name="additional-examples-v1-v2"></a>

Die folgenden Beispiele zeigen, wie bestimmte Anwendungsfälle im Zusammenhang mit einer Migration von V1 zu V2 behandelt werden können.

### Mit älteren Amazon S3 S3-Verschlüsselungsclients verschlüsselte Objekte entschlüsseln
<a name="decrypt-objects-encrypted-by-legacy-amazon-s3-encryption-clients-v1-v2"></a>

Standardmäßig können Sie den Amazon S3 S3-Verschlüsselungsclient V2 nicht zum Entschlüsseln von Objekten verwenden, die mit veralteten Key-Wrap-Algorithmen oder veralteten Inhaltskryptoschemas verschlüsselt wurden.

Die folgenden Algorithmen zum Umbrechen von Schlüsseln sind veraltet:
+  `KMS` 
+  `AES_KEY_WRAP` 

Und die folgenden Inhaltskryptoschemas sind veraltet:
+  `CBC` 
+  `CTR` 

Wenn Sie ältere Amazon S3 S3-Verschlüsselungsclients verwenden, AWS SDK für C\+\+ um die Objekte zu verschlüsseln, verwenden Sie wahrscheinlich die veralteten Methoden, wenn:
+ Sie haben oder verwendet. `SimpleEncryptionMaterials` `KMSEncryptionMaterials`
+ Sie haben `ENCRYPTION_ONLY` wie `Crypto Mode` in Ihrer Krypto-Konfiguration verwendet.

Um den Amazon S3 S3-Verschlüsselungsclient V2 zum Entschlüsseln von Objekten zu verwenden, die mit veralteten Schlüsselumbruchalgorithmen oder veralteten Inhaltskryptoschemas verschlüsselt wurden, müssen Sie den Standardwert von `SecurityProfile` in der V2-Kryptokonfiguration von bis überschreiben. `V2` `V2_AND_LEGACY`

 **Beispiel** 

 *Vor der Migration* 

```
auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID);
CryptoConfiguration cryptoConfig;
S3EncryptionClient encryptionClient(materials, cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
encryptionClient.GetObject(getObjectRequest);
```

 *Nach der Migration* 

```
auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID);
CryptoConfigurationV2 cryptoConfig(materials);
cryptoConfig.SetSecurityProfile(SecurityProfile::V2_AND_LEGACY);
S3EncryptionClientV2 encryptionClient(cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
encryptionClient.GetObject(getObjectRequest);
```

### Objekte mit Range entschlüsseln
<a name="decrypt-objects-with-range-v1-v2"></a>

Mit älteren Amazon S3 S3-Verschlüsselungsclients können Sie einen Bytebereich angeben, der beim Entschlüsseln eines S3-Objekts empfangen werden soll. Im Amazon S3 S3-Verschlüsselungsclient V2 ist diese Funktion `DISABLED` standardmäßig verfügbar. Daher müssen Sie den Standardwert `RangeGetMode` von `DISABLED` bis `ALL` in der V2-Kryptokonfiguration überschreiben.

 **Beispiel** 

 *Vor der Migration* 

```
auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", CUSTOMER_MASTER_KEY_ID);
CryptoConfiguration cryptoConfig;
S3EncryptionClient encryptionClient(materials, cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
getObjectRequest.WithRange("bytes=38-75");
encryptionClient.GetObject(getObjectRequest);
```

 *Nach der Migration* 

```
auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", CUSTOMER_MASTER_KEY_ID);
CryptoConfigurationV2 cryptoConfig(materials);
cryptoConfig.SetUnAuthenticatedRangeGet(RangeGetMode::ALL);
S3EncryptionClientV2 encryptionClient(cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
getObjectRequest.WithRange("bytes=38-75");
encryptionClient.GetObject(getObjectRequest);
```

### Entschlüsseln Sie Objekte mit einem beliebigen CMK
<a name="decrypt-objects-with-any-cmk-v1-v2"></a>

Bei der Entschlüsselung von Objekten`KMSWithContextEncryptionMaterials`, mit denen verschlüsselt wurden, können Amazon S3 S3-V2-Verschlüsselungsclients KMS die Suche nach dem richtigen CMK ermöglichen, indem sie einen leeren Masterschlüssel bereitstellen. Diese Funktion ist `DISABLED` standardmäßig aktiviert. Sie müssen es explizit konfigurieren, indem Sie Ihre KMS-Verschlüsselungsmaterialien anfordern. `SetKMSDecryptWithAnyCMK(true)`

 **Beispiel** 

 *Vor der Migration* 

```
auto materials = Aws::MakeShared<KMSEncryptionMaterials>("s3Encryption", ""/* provide an empty KMS Master Key*/);
CryptoConfiguration cryptoConfig;
S3EncryptionClient encryptionClient(materials, cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
encryptionClient.GetObject(getObjectRequest);
```

 *Nach der Migration* 

```
auto materials = Aws::MakeShared<KMSWithContextEncryptionMaterials>("s3EncryptionV2", ""/* provide an empty KMS Master Key*/);
materials.SetKMSDecryptWithAnyCMK(true);
CryptoConfigurationV2 cryptoConfig(materials);
S3EncryptionClientV2 encryptionClient(cryptoConfig);
// Code snippet here to setup the getObjectRequest object.
encryptionClient.GetObject(getObjectRequest);
```

Den vollständigen Code für all diese Migrationsszenarien finden Sie im [Amazon S3 S3-Verschlüsselungsbeispiel](https://github.com/awsdocs/aws-doc-sdk-examples/tree/main/cpp/example_code/s3encryption) auf Github.