

Die Version AWS SDK für Java 1.x wurde end-of-support am 31. Dezember 2025 erreicht. Wir empfehlen Ihnen, auf den zu migrieren [AWS SDK for Java 2.x](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html), um weiterhin neue Funktionen, Verfügbarkeitsverbesserungen und Sicherheitsupdates zu erhalten.

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.

# Amazon S3 Migration des Verschlüsselungsclients
<a name="s3-encryption-migration"></a>

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

## Voraussetzungen
<a name="s3-cse-prereq"></a>

 Amazon S3 Für die clientseitige Verschlüsselung ist Folgendes erforderlich:
+ Java 8 oder höher ist in Ihrer Anwendungsumgebung installiert. [Das AWS SDK für Java funktioniert mit dem [Oracle Java SE Development Kit](https://www.oracle.com/java/technologies/javase-downloads.html) und mit Distributionen von Open Java Development Kit (OpenJDK) wie [Amazon Corretto](https://aws.amazon.com/corretto/)[Red Hat OpenJDK und JDK](https://developers.redhat.com/products/openjdk). AdoptOpen](https://adoptopenjdk.net/)
+ [Das Bouncy Castle Crypto-Paket.](https://www.bouncycastle.org/download/bouncy-castle-java/) Sie können die Bouncy Castle-.jar-Datei im Klassenpfad Ihrer Anwendungsumgebung platzieren oder Ihrer Maven-Datei eine Abhängigkeit von der ArtifactID `bcprov-ext-jdk15on` (mit der GroupID von) hinzufügen. `org.bouncycastle` `pom.xml`

## Überblick über die Migration
<a name="s3-cse-overview"></a>

Diese Migration erfolgt in zwei Phasen:

1.  **Aktualisieren Sie bestehende Clients, damit sie neue Formate lesen können.** Aktualisieren Sie Ihre Anwendung so, dass sie Version 1.11.837 oder höher verwendet, AWS SDK für Java und stellen Sie die Anwendung erneut bereit. Dadurch können die Amazon S3 clientseitigen Verschlüsselungsdienstclients in Ihrer Anwendung Objekte entschlüsseln, die von V2-Dienstclients erstellt wurden. Wenn Ihre Anwendung mehrere verwendet AWS SDKs, müssen Sie jedes SDK separat aktualisieren.

1.  **Migrieren Sie Verschlüsselungs- und Entschlüsselungsclients auf V2.** Sobald alle Ihre V1-Verschlüsselungsclients die V2-Verschlüsselungsformate lesen können, aktualisieren Sie die Amazon S3 clientseitigen Verschlüsselungs- und Entschlüsselungsclients in Ihrem Anwendungscode, sodass sie ihre V2-Entsprechungen verwenden.

## Aktualisieren Sie bestehende Clients, um neue Formate zu lesen
<a name="s3-cse-update-project"></a>

Der V2-Verschlüsselungsclient verwendet Verschlüsselungsalgorithmen, die ältere Versionen von AWS SDK für Java nicht unterstützen.

Der erste Schritt der Migration besteht darin, Ihre V1-Verschlüsselungsclients so zu aktualisieren, dass sie Version 1.11.837 oder höher von verwenden. AWS SDK für Java(Wir empfehlen Ihnen, auf die neueste Release-Version zu aktualisieren, die Sie in der [Java API-Referenz Version](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc) 1.x finden.) Aktualisieren Sie dazu die Abhängigkeit in Ihrer Projektkonfiguration. Nachdem Ihre Projektkonfiguration aktualisiert wurde, erstellen Sie Ihr Projekt neu und stellen Sie es erneut bereit.

Sobald Sie diese Schritte abgeschlossen haben, können die V1-Verschlüsselungsclients Ihrer Anwendung Objekte lesen, die von V2-Verschlüsselungsclients geschrieben wurden.

### Aktualisieren Sie die Abhängigkeit in Ihrer Projektkonfiguration
<a name="update-the-dependency-in-your-project-configuration"></a>

Ändern Sie Ihre Projektkonfigurationsdatei (z. B. pom.xml oder build.gradle), um Version 1.11.837 oder höher von zu verwenden. AWS SDK für Java Erstellen Sie dann Ihr Projekt neu und stellen Sie es erneut bereit.

Wenn Sie diesen Schritt vor der Bereitstellung des neuen Anwendungscodes abschließen, können Sie sicherstellen, dass die Verschlüsselungs- und Entschlüsselungsvorgänge während des Migrationsprozesses in Ihrer gesamten Flotte konsistent bleiben.

#### Beispiel für die Verwendung von Maven
<a name="example-using-maven"></a>

Ausschnitt aus einer Datei pom.xml:

```
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-bom</artifactId>
      <version>1.11.837</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
```

#### Beispiel mit Gradle
<a name="example-using-gradle"></a>

Ausschnitt aus einer build.gradle-Datei:

```
dependencies {
  implementation platform('com.amazonaws:aws-java-sdk-bom:1.11.837')
  implementation 'com.amazonaws:aws-java-sdk-s3'
}
```

## Migrieren Sie Verschlüsselungs- und Entschlüsselungsclients auf V2
<a name="s3-cse-update-code"></a>

Sobald Ihr Projekt mit der neuesten SDK-Version aktualisiert wurde, können Sie Ihren Anwendungscode ändern, um den V2-Client zu verwenden. Aktualisieren Sie dazu zunächst Ihren Code, um den neuen Service Client Builder zu verwenden. Stellen Sie dann Verschlüsselungsmaterial mithilfe einer Methode auf dem Builder bereit, die umbenannt wurde, und konfigurieren Sie Ihren Service Client nach Bedarf weiter.

Diese Codefragmente veranschaulichen, wie die clientseitige Verschlüsselung mit dem verwendet wird AWS SDK für Java, und bieten Vergleiche zwischen den V1- und V2-Verschlüsselungsclients.

 **V1** 

```
// minimal configuration in V1; default CryptoMode.EncryptionOnly.
EncryptionMaterialsProvider encryptionMaterialsProvider = ...
AmazonS3Encryption encryptionClient = AmazonS3EncryptionClient.encryptionBuilder()
             .withEncryptionMaterials(encryptionMaterialsProvider)
             .build();
```

 **V2** 

```
// minimal configuration in V2; default CryptoMode.StrictAuthenticatedEncryption.
EncryptionMaterialsProvider encryptionMaterialsProvider = ...
AmazonS3EncryptionV2 encryptionClient = AmazonS3EncryptionClientV2.encryptionBuilder()
             .withEncryptionMaterialsProvider(encryptionMaterialsProvider)
             .withCryptoConfiguration(new CryptoConfigurationV2()
                           // The following setting allows the client to read V1 encrypted objects
                           .withCryptoMode(CryptoMode.AuthenticatedEncryption)
             )
             .build();
```

Das obige Beispiel setzt den Wert `cryptoMode` auf`AuthenticatedEncryption`. Dies ist eine Einstellung, die es einem V2-Verschlüsselungsclient ermöglicht, Objekte zu lesen, die von einem V1-Verschlüsselungsclient geschrieben wurden. Wenn Ihr Client nicht die Fähigkeit benötigt, Objekte zu lesen, die von einem V1-Client geschrieben wurden, empfehlen wir, `StrictAuthenticatedEncryption` stattdessen die Standardeinstellung von zu verwenden.

### Konstruieren Sie einen V2-Verschlüsselungsclient
<a name="construct-a-v2-encryption-client"></a>

Der V2-Verschlüsselungsclient kann durch Aufrufen von *AmazonS3 EncryptionClient v2.encryptionBuilder ()* erstellt werden. 

Sie können alle Ihre vorhandenen V1-Verschlüsselungsclients durch V2-Verschlüsselungsclients ersetzen. Ein V2-Verschlüsselungsclient kann immer jedes Objekt lesen, das von einem V1-Verschlüsselungsclient geschrieben wurde, solange Sie dies zulassen, indem Sie den V2-Verschlüsselungsclient für die Verwendung von `konfigurieren AuthenticatedEncryption``cryptoMode`.

Das Erstellen eines neuen V2-Verschlüsselungsclients ist dem Erstellen eines V1-Verschlüsselungsclients sehr ähnlich. Es gibt jedoch einige Unterschiede:
+ Sie werden ein `CryptoConfigurationV2` Objekt anstelle eines `CryptoConfiguration` Objekts verwenden, um den Client zu konfigurieren. Dieser Parameter muss angegeben werden.
+ Die `cryptoMode` Standardeinstellung für den V2-Verschlüsselungsclient ist`StrictAuthenticatedEncryption`. Für den V1-Verschlüsselungsclient ist dies der Fall`EncryptionOnly`.
+ Die Methode *withEncryptionMaterials()* im Encryption Client Builder wurde in *withEncryptionMaterialsProvider ()* umbenannt. Dies ist lediglich eine kosmetische Änderung, die den Argumenttyp genauer wiedergibt. Sie müssen die neue Methode verwenden, wenn Sie Ihren Service-Client konfigurieren.

**Anmerkung**  
Lesen Sie beim Entschlüsseln mit AES-GCM das gesamte Objekt bis zum Ende, bevor Sie die entschlüsselten Daten verwenden. Dadurch wird überprüft, ob das Objekt seit der Verschlüsselung nicht geändert wurde.

### Verwenden Sie Anbieter von Verschlüsselungsmaterialien
<a name="use-encryption-materials-providers"></a>

Sie können weiterhin dieselben Anbieter für Verschlüsselungsmaterialien und Objekte für Verschlüsselungsmaterialien verwenden, die Sie bereits mit dem V1-Verschlüsselungsclient verwenden. Diese Klassen sind für die Bereitstellung der Schlüssel verantwortlich, die der Verschlüsselungsclient zum Schutz Ihrer Daten verwendet. Sie können sowohl mit dem V2- als auch mit dem V1-Verschlüsselungsclient synonym verwendet werden.

### Konfigurieren Sie den V2 Encryption Client
<a name="configure-the-v2-encryption-client"></a>

Der V2-Verschlüsselungsclient ist mit einem `CryptoConfigurationV2` Objekt konfiguriert. Dieses Objekt kann erstellt werden, indem sein Standardkonstruktor aufgerufen und dann seine Eigenschaften entsprechend den Standardeinstellungen geändert werden.

Die Standardwerte für `CryptoConfigurationV2` sind:
+  `cryptoMode` = `CryptoMode.StrictAuthenticatedEncryption` 
+  `storageMode` = `CryptoStorageMode.ObjectMetadata` 
+  `secureRandom`= Instanz von `SecureRandom` 
+  `rangeGetMode` = `CryptoRangeGetMode.DISABLED` 
+  `unsafeUndecryptableObjectPassthrough` = `false` 

Beachten Sie, *EncryptionOnly*dass dies `cryptoMode` im V2-Verschlüsselungsclient nicht unterstützt wird. Der V2-Verschlüsselungsclient verschlüsselt Inhalte immer mit authentifizierter Verschlüsselung und schützt Schlüssel zur Inhaltsverschlüsselung (CEKs) mithilfe von V2-Objekten. `KeyWrap`

Das folgende Beispiel zeigt, wie die Kryptokonfiguration in V1 angegeben wird und wie ein *CryptoConfigurationV2-Objekt instanziiert wird, um es an den V2-Verschlüsselungs-Client-Builder* zu übergeben.

 **V1** 

```
CryptoConfiguration cryptoConfiguration = new CryptoConfiguration()
        .withCryptoMode(CryptoMode.StrictAuthenticatedEncryption);
```

 **V2** 

```
CryptoConfigurationV2 cryptoConfiguration = new CryptoConfigurationV2()
        .withCryptoMode(CryptoMode.StrictAuthenticatedEncryption);
```

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

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

### Konfigurieren Sie einen Service Client zum Lesen von Objekten, die vom V1 Encryption Client erstellt wurden
<a name="configure-a-service-client-to-read-objects-created-by-the-v1-encryption-client"></a>

Um Objekte zu lesen, die zuvor mit einem V1-Verschlüsselungsclient geschrieben wurden, setzen Sie den `cryptoMode` Wert auf`AuthenticatedEncryption`. Der folgende Codeausschnitt zeigt, wie ein Konfigurationsobjekt mit dieser Einstellung erstellt wird.

```
CryptoConfigurationV2 cryptoConfiguration = new CryptoConfigurationV2()
        .withCryptoMode(CryptoMode.AuthenticatedEncryption);
```

### Konfigurieren Sie einen Service Client für das Abrufen von Bytebereichen von Objekten
<a name="configure-a-service-client-to-get-byte-ranges-of-objects"></a>

Um aus `get` einem verschlüsselten S3-Objekt auf einen Bytebereich zugreifen zu können, aktivieren Sie die neue Konfigurationseinstellung`rangeGetMode`. Diese Einstellung ist auf dem V2-Verschlüsselungsclient standardmäßig deaktiviert. Beachten Sie, dass ein Bereich, auch wenn er aktiviert ist, `get` nur für Objekte funktioniert, die mit Algorithmen verschlüsselt wurden, die von der `cryptoMode` Einstellung des Clients unterstützt werden. Weitere Informationen finden Sie [CryptoRangeGetMode](https://docs.aws.amazon.com/sdk-for-java/v1/reference/com/amazonaws/services/s3/model/CryptoRangeGetMode.html)in der AWS SDK für Java API-Referenz.

Wenn Sie den verwenden möchten, Amazon S3 TransferManager um mehrteilige Downloads verschlüsselter Amazon S3 Objekte mithilfe des V2-Verschlüsselungsclients durchzuführen, müssen Sie zuerst die `rangeGetMode` Einstellung auf dem V2-Verschlüsselungsclient aktivieren.

Der folgende Codeausschnitt zeigt, wie der V2-Client für die Ausführung eines Ranges konfiguriert wird. `get`

```
// Allows range gets using AES/CTR, for V2 encrypted objects only
CryptoConfigurationV2 cryptoConfiguration = new CryptoConfigurationV2()
       .withRangeGetMode(CryptoRangeGetMode.ALL);

// Allows range gets using AES/CTR and AES/CBC, for V1 and V2 objects
CryptoConfigurationV2 cryptoConfiguration = new CryptoConfigurationV2()
       .withCryptoMode(CryptoMode.AuthenticatedEncryption)
       .withRangeGetMode(CryptoRangeGetMode.ALL);
```