Der Support für AWS SDK für Java Version 1.x endete am 31. Dezember 2025. Wir empfehlen Ihnen, auf den zu migrieren, AWS SDK for Java 2.x 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 Verschlüsselung, Client-Migration
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
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
und mit Distributionen des Open Java Development Kit (OpenJDK) wie Amazon Corretto Red Hat OpenJDK und JDK. AdoptOpen -
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 Artifact-ID bcprov-ext-jdk15on(mit der GroupID von) hinzufügen.org.bouncycastlepom.xml
Überblick über die Migration
Diese Migration erfolgt in zwei Phasen:
-
Aktualisieren Sie bestehende Clients, damit sie neue Formate lesen können. Aktualisieren Sie Ihre Anwendung, um Version 1.11.837 oder höher von zu verwenden, AWS SDK für Java und stellen Sie die Anwendung erneut bereit. Dadurch können die Amazon S3 clientseitigen Verschlüsselungsservice-Clients in Ihrer Anwendung Objekte entschlüsseln, die von V2-Dienstclients erstellt wurden. Wenn Ihre Anwendung mehrere AWS SDKs verwendet, müssen Sie jedes SDK separat aktualisieren.
-
Migrieren Sie die 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, damit sie neue Formate lesen können
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 Reference Version 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
Ä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 ausführen, 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
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
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
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 im 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 das cryptoMode aufAuthenticatedEncryption. 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
Der V2-Verschlüsselungsclient kann durch Aufrufen von AmazonS3EncryptionClientV2.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, sofern Sie dies zulassen, indem Sie den V2-Verschlüsselungsclient so konfigurieren, dass er `verwendet AuthenticatedEncryption`cryptoMode.
Das Erstellen eines neuen V2-Verschlüsselungsclients ist dem Erstellen eines V1-Verschlüsselungsclients sehr ähnlich. Es gibt jedoch einige Unterschiede:
-
Sie verwenden ein
CryptoConfigurationV2Objekt, um den Client anstelle einesCryptoConfigurationObjekts zu konfigurieren. Dieser Parameter muss angegeben werden. -
Die
cryptoModeStandardeinstellung für den V2-Verschlüsselungsclient istStrictAuthenticatedEncryption. Für den V1-Verschlüsselungsclient ist dies der FallEncryptionOnly. -
Die Methode mit EncryptionMaterials () im Verschlüsselungs-Client-Builder wurde in with EncryptionMaterialsProvider () umbenannt. Dies ist lediglich eine kosmetische Änderung, die den Argumenttyp genauer widerspiegelt. 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. Damit wird überprüft, ob das Objekt seit der Verschlüsselung nicht verändert wurde.
Verwenden Sie Anbieter von Verschlüsselungsmaterial
Sie können weiterhin dieselben Anbieter von 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 zur Sicherung Ihrer Daten verwendet. Sie können synonym sowohl mit dem V2- als auch mit dem V1-Verschlüsselungsclient verwendet werden.
Konfigurieren Sie den V2 Encryption Client
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 Standardwerten geändert werden.
Die Standardwerte für CryptoConfigurationV2 sind:
-
cryptoMode=CryptoMode.StrictAuthenticatedEncryption -
storageMode=CryptoStorageMode.ObjectMetadata -
secureRandom= Instanz vonSecureRandom -
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 Inhaltsverschlüsselungsschlüssel (Content Encrypting Keys, CEKs) mithilfe von V2-Objekten. KeyWrap
Das folgende Beispiel zeigt, wie die Kryptokonfiguration in Version 1 angegeben wird und wie ein CryptoConfiguration V2-Objekt instanziiert wird, um es an den V2-Verschlüsselungsclient Builder zu übergeben.
V1
CryptoConfiguration cryptoConfiguration = new CryptoConfiguration() .withCryptoMode(CryptoMode.StrictAuthenticatedEncryption);
V2
CryptoConfigurationV2 cryptoConfiguration = new CryptoConfigurationV2() .withCryptoMode(CryptoMode.StrictAuthenticatedEncryption);
Weitere Beispiele
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
Um Objekte zu lesen, die zuvor mit einem V1-Verschlüsselungsclient geschrieben wurden, setzen Sie den cryptoMode Wert aufAuthenticatedEncryption. Der folgende Codeausschnitt veranschaulicht, wie ein Konfigurationsobjekt mit dieser Einstellung erstellt wird.
CryptoConfigurationV2 cryptoConfiguration = new CryptoConfigurationV2() .withCryptoMode(CryptoMode.AuthenticatedEncryption);
Konfigurieren Sie einen Service Client zum Abrufen von Bytebereichen von Objekten
Um einen Bytebereich aus get einem verschlüsselten S3-Objekt abrufen zu können, aktivieren Sie die neue KonfigurationseinstellungrangeGetMode. Diese Einstellung ist auf dem V2-Verschlüsselungsclient standardmäßig deaktiviert. Beachten Sie, dass ein Bereich auch dann, 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 in der AWS SDK für Java API-Referenz.
Wenn Sie vorhaben, mithilfe des Amazon S3 TransferManager V2-Verschlüsselungsclients mehrteilige Downloads verschlüsselter Amazon S3 Objekte durchzuführen, müssen Sie zuerst die rangeGetMode Einstellung auf dem V2-Verschlüsselungsclient aktivieren.
Der folgende Codeausschnitt veranschaulicht, wie der V2-Client für die Ausführung eines Bereichs 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);