Version 4 (V4) von AWS SDK für .NET wurde veröffentlicht!
Informationen zu wichtigen Änderungen und zur Migration Ihrer Anwendungen finden Sie im Migrationsthema.
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 S3 Encryption Clients (V2 auf V4)
Anmerkung
Wenn Sie V1 verwenden und zu V4 migrieren möchten, müssen Sie zuerst zu V2 migrieren. Siehe Migration des S3 Encryption Clients (V1 auf V2).
In diesem Thema erfahren Sie, wie Sie Ihre Anwendungen von Version 2 (V2) des Amazon Simple Storage Service (S3) -Verschlüsselungsclients auf Version 4 (V4) migrieren und die Anwendungsverfügbarkeit während des gesamten Migrationsprozesses sicherstellen. V4 verwendet AES-GCM mit Key Commitment für die Inhaltsverschlüsselung und führt Commitment-Richtlinien ein, um die Sicherheit vor Angriffen durch Schlüsselersetzung zu erhöhen.
Der V4-Client ist im Paket Amazon.Extensions.S3.Encryption verfügbar.
Wichtig
Wesentliche Änderungen: V4-Clients, die mit einer RequireEncryptRequireDecrypt Richtlinie konfiguriert wurden, können keine Objekte entschlüsseln, die mit V1- oder V2-Clients verschlüsselt wurden. Nur die neuesten V2-Clients können V4-verschlüsselte Objekte mit Key Commitment entschlüsseln. Bevor Sie zur RequireEncryptRequireDecrypt Richtlinie übergehen, müssen Sie alle Ihre vorhandenen Daten mithilfe von V4-Clients mit aktivierter Schlüsselzuweisung erneut verschlüsseln.
V4-Konzepte verstehen
V4 verwendet AES-GCM mit hohem Engagement für die Inhaltsverschlüsselung und führt wichtige Sicherheitskonzepte ein, die den Schutz Ihrer verschlüsselten Daten verbessern:
Verpflichtungspolitik
Die Commitment-Richtlinie steuert, wie der Verschlüsselungsclient bei Verschlüsselungs- und Entschlüsselungsvorgängen mit der Schlüsselzusage umgeht. V4 unterstützt drei Commitment-Richtlinien:
ForbidEncryptAllowDecrypt-
Verschlüsselung: Ohne Verpflichtung
Entschlüsselung: Ermöglicht Objekte, die keine Verpflichtungen übernehmen
Sicherheit: Erzwingt keine Bindung und ermöglicht möglicherweise Manipulationen
Kompatibilität: Alle V2- und V4-Implementierungen können Objekte lesen, die mit dieser Richtlinie verschlüsselt wurden
RequireEncryptAllowDecrypt-
Verschlüsselung: Mit Schlüsselzusage
Entschlüsselung: Ermöglicht sowohl das Festschreiben von Objekten als auch das Nichtfestschreiben von Objekten
Sicherheit: Neue Objekte sind vor Angriffen durch Schlüsselersetzung geschützt, alte Objekte sind weiterhin lesbar
Kompatibilität: Nur V4 unterstützt diese Richtlinie
RequireEncryptRequireDecrypt(Standard für V4)-
Verschlüsselung: Mit Schlüsselzusage
Entschlüsselung: Nur Objekte werden übertragen
Sicherheit: Vollständige Durchsetzung der Verpflichtungen für maximale Sicherheit
Kompatibilität: Nur V4 unterstützt diese Richtlinie
AES GCM mit großem Engagement
V4 verwendet AES-GCM mit Key Commitment für die Inhaltsverschlüsselung, was für mehr Sicherheit sorgt:
-
Manipulationsschutz: Er schützt vor Angriffen durch Schlüsselersetzung, indem er den Schlüssel kryptografisch an die verschlüsselten Daten bindet.
-
Versionskompatibilität: Mit Key Commitment verschlüsselte Objekte können nur von V4-Clients und neueren Versionen entschlüsselt werden.
Warnung
Bevor Sie die Key-Commitment-Verschlüsselung in der Produktion aktivieren, stellen Sie sicher, dass alle Anwendungen, die Ihre Objekte entschlüsseln müssen, auf Version 4 oder neuer aktualisiert wurden, da der V2-Client veraltet ist.
Aktualisieren Sie bestehende Clients so, dass sie V4-Formate lesen
Der V4-Verschlüsselungsclient verwendet Verschlüsselungsalgorithmen, die ältere Versionen des Clients nicht unterstützen. Der erste Schritt der Migration besteht darin, Ihre V2-Clients so zu aktualisieren, dass sie das neue V4-Format lesen können.
NuGet Paketabhängigkeiten aktualisieren
Aktualisieren Sie Ihre Anwendungen so, dass sie die neueste Version des NuGet Amazon.Extensions.S3.Encryption-Pakets
-
Aktualisieren Sie auf das neueste Amazon.Extensions.S3.Encryption-Paket
. Wenn Ihr Projekt direkt von der .S3 abhängt oder. AWSSDK AWSSDK KeyManagementServicePakete, Sie müssen diese Abhängigkeiten entweder aktualisieren oder entfernen, damit ihre aktualisierten Versionen mit diesem neuen Paket übernommen werden. -
Stellen Sie sicher, dass Ihre
usingAnweisungen auf den richtigen Namespace verweisen:using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; -
Erstellen Sie Ihre Anwendung neu und stellen Sie sie erneut bereit.
Ihre vorhandenen V2-Clients funktionieren weiterhin mit dem aktualisierten Paket und können Objekte entschlüsseln, die von V4-Clients verschlüsselt wurden (abhängig von der verwendeten Commitment-Richtlinie).
Anwendungen erstellen und bereitstellen
Nach der Aktualisierung Ihrer NuGet Paketabhängigkeiten:
-
Erstellen Sie Ihre Anwendung, um sicherzustellen, dass alle Abhängigkeiten korrekt aufgelöst werden.
-
Testen Sie Ihre Anwendung in einer Entwicklungsumgebung, um sicherzustellen, dass die vorhandenen Funktionen weiterhin funktionieren.
-
Stellen Sie die aktualisierte Anwendung in Ihrer Produktionsumgebung bereit.
Mit diesem Update können Ihre vorhandenen V2-Clients Objekte entschlüsseln, die von V4-Clients verschlüsselt werden, wodurch die Kompatibilität während des Migrationsprozesses gewährleistet wird.
Migrieren Sie zu V4-Clients
Nachdem Sie Ihre vorhandenen Clients so aktualisiert haben, dass sie das neue Verschlüsselungsformat lesen, können Sie Ihre Anwendungen sicher aktualisieren, sodass sie V4-Verschlüsselungs- und Entschlüsselungsclients verwenden. Der V4-Client bietet verbesserte Sicherheit durch Schlüsselbindung und gewährleistet gleichzeitig die Kompatibilität mit vorhandenen verschlüsselten Objekten.
Migrationsprozess in 4 Schritten
Die Migration von V2 zu V4 folgt einem strukturierten 4-stufigen Prozess, um Kompatibilität und Sicherheit zu gewährleisten. Jeder Schritt stellt eine spezifische Konfiguration dar, die für alle Ihre Anwendungen bereitgestellt werden sollte, bevor Sie mit dem nächsten Schritt fortfahren.
-
Schritt 0: V2-Client (Startpunkt) — Ihre bestehende V2-Implementierung
-
Schritt 1: V4 mit V2-Kompatibilität — Migrieren Sie zum V4-Client unter Beibehaltung des V2-kompatiblen Verschlüsselungsverhaltens
-
Schritt 2: V4 mit Key Commitment Writes — Beginnen Sie mit der Verschlüsselung mit Key Commitment und ermöglichen Sie gleichzeitig die Entschlüsselung älterer Objekte
-
Schritt 3: V4 mit vollständiger Durchsetzung — Sowohl für die Verschlüsselung als auch für die Entschlüsselung ist eine Schlüsselzusage erforderlich
Schritt 0: V2-Client (Ausgangspunkt)
Dies stellt Ihre bestehende V2-Client-Konfiguration dar. Dieser Schritt zeigt den Startstatus vor der Migration.
using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; using Amazon.S3.Model; // Step 0: V2 Client - Starting configuration var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV2(kmsKeyId, KmsType.KmsContext, encryptionContext); #pragma warning disable 0618 var configuration = new AmazonS3CryptoConfigurationV2(SecurityProfile.V2); #pragma warning enable 0618 var encryptionClient = new AmazonS3EncryptionClientV2(configuration, encryptionMaterial); // Use the client for PutObject and GetObject operations await encryptionClient.PutObjectAsync(new PutObjectRequest { BucketName = bucket, Key = objectKey, ContentBody = content });
Schritt 1: V4 mit V2-Kompatibilität
Migrieren Sie zum V4-Client und behalten Sie dabei das gleiche Verhalten wie V2 bei. In diesem Schritt werden ForbidEncryptAllowDecrypt Richtlinien verwendet, um unverbindlich zu verschlüsseln und die Entschlüsselung aller Objekte zu ermöglichen.
using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; using Amazon.S3.Model; // Step 1: V4 Client with V2 compatibility var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext); var configuration = new AmazonS3CryptoConfigurationV4( SecurityProfile.V4, CommitmentPolicy.ForbidEncryptAllowDecrypt, ContentEncryptionAlgorithm.AesGcm); var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial); // Use the client for PutObject and GetObject operations await encryptionClient.PutObjectAsync(new PutObjectRequest { BucketName = bucket, Key = objectKey, ContentBody = content });
Verhalten: Verschlüsselt ohne Verpflichtung, kann sowohl Objekte entschlüsseln, die eine Übertragung vornehmen, als auch Objekte, für die kein Commit ausgeführt wird. Identisch mit dem Verhalten von V2.
Schritt 2: V4 mit wichtigen Commitment Writes
Beginnen Sie mit der Verschlüsselung mit Key Commitment und behalten Sie gleichzeitig die Abwärtskompatibilität bei der Entschlüsselung bei. In diesem Schritt wird eine Richtlinie verwendet. RequireEncryptAllowDecrypt
Warnung
Stellen Sie vor der Bereitstellung von Schritt 2 sicher, dass alle Lesegeräte auf Schritt 1 oder höher aktualisiert wurden, um die Verschlüsselung mit Schlüsselübergabe durchführen zu können.
using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; using Amazon.S3.Model; // Step 2: V4 Client with key commitment writes var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext); var configuration = new AmazonS3CryptoConfigurationV4( SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt, ContentEncryptionAlgorithm.AesGcmWithCommitment); var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial); // Use the client for PutObject and GetObject operations await encryptionClient.PutObjectAsync(new PutObjectRequest { BucketName = bucket, Key = objectKey, ContentBody = content });
Verhalten: Verschlüsselt mit Commitment, kann sowohl Objekte entschlüsseln, die sich verpflichten, als auch Objekte ohne Commitment. Neue Objekte sind vor Angriffen durch Schlüsselersetzung geschützt.
Schritt 3: V4 mit vollständiger Durchsetzung
Sowohl für die Verschlüsselung als auch für die Entschlüsselung ist eine Schlüsselzuweisung erforderlich. In diesem Schritt werden RequireEncryptRequireDecrypt Richtlinien für maximale Sicherheit verwendet.
Warnung
Stellen Sie vor der Bereitstellung von Schritt 3 sicher, dass alle Objekte in Ihrem System mit Key Commitment erneut verschlüsselt wurden (Schritt 2). In diesem Schritt können Objekte, die ohne Verpflichtung verschlüsselt wurden, nicht entschlüsselt werden.
using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; using Amazon.S3.Model; // Step 3: V4 Client with full key commitment enforcement var encryptionContext = new Dictionary<string, string>(); var encryptionMaterial = new EncryptionMaterialsV4(kmsKeyId, KmsType.KmsContext, encryptionContext); var configuration = new AmazonS3CryptoConfigurationV4( SecurityProfile.V4, CommitmentPolicy.RequireEncryptRequireDecrypt, ContentEncryptionAlgorithm.AesGcmWithCommitment); var encryptionClient = new AmazonS3EncryptionClientV4(configuration, encryptionMaterial); // Use the client for PutObject and GetObject operations await encryptionClient.PutObjectAsync(new PutObjectRequest { BucketName = bucket, Key = objectKey, ContentBody = content });
Verhalten: Verschlüsselt mit Commitment, entschlüsselt nur mit Commitment verschlüsselte Objekte. Maximale Sicherheit vor Angriffen durch Schlüsselersetzung.
Zusätzliche Konfigurationsbeispiele
Dieser Abschnitt enthält zusätzliche Beispiele für die Konfiguration von V4-Clients mit unterschiedlichen Optionen während der Migration.
Legacy-Support aktivieren
Damit V4-Clients Objekte lesen können, die von V1- und V2-Clients verschlüsselt wurden, konfigurieren Sie den Client mit einer Commitment-Richtlinie, die die Legacy-Entschlüsselung ermöglicht:
using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives; // Configure V4 client to read V1/V2 objects var configuration = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4AndLegacy, CommitmentPolicy.RequireEncryptAllowDecrypt) { StorageMode = CryptoStorageMode.ObjectMetadata }; // This configuration allows: // - Encryption: With commitment (secure) // - Decryption: Both V2 (non-committing) and V4 (committing) objects
Verwenden Sie diese Konfiguration während der Migration, wenn Sie Objekte entschlüsseln müssen, die von älteren Clients verschlüsselt wurden, und gleichzeitig sicherstellen müssen, dass neue Objekte mit verbesserter Sicherheit verschlüsselt werden.
Speichermethode konfigurieren
V4 unterstützt zwei Speichermethoden für Verschlüsselungsmetadaten. Wählen Sie die Methode, die am besten zu Ihrem Anwendungsfall passt:
Objekt-Metadaten (Standard)
var configuration = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt) { StorageMode = CryptoStorageMode.ObjectMetadata }; // Encryption metadata is stored in S3 object metadata
Anweisungsdatei
var configuration = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt) { StorageMode = CryptoStorageMode.InstructionFile }; // Encryption metadata is stored in a separate S3 object (instruction file)
Verwenden Sie diese Option, InstructionFile wenn Sie Objektmetadaten für andere Zwecke aufbewahren müssen oder wenn Sie mit Objekten arbeiten, für die die Größe der Metadaten begrenzt ist.
Verpflichtungsrichtlinie konfigurieren
Wählen Sie je nach Ihren Sicherheitsanforderungen und Ihrer Migrationsphase die passende Verpflichtungsrichtlinie aus:
Migrationsphase (V2-Kompatibilität)
// For migration: encrypt without commitment, allow all decryption var migrationConfig = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.ForbidEncryptAllowDecrypt);
Übergangsphase (empfohlen)
// For transition: encrypt with commitment, allow legacy decryption var transitionConfig = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptAllowDecrypt);
Vollständige Sicherheitsphase
// For maximum security: require commitment for both encryption and decryption var secureConfig = new AmazonS3CryptoConfigurationV4(SecurityProfile.V4, CommitmentPolicy.RequireEncryptRequireDecrypt);
Beginnen Sie mit ForbidEncryptAllowDecrypt der ersten Migration, gehen Sie RequireEncryptAllowDecrypt zur Übergangsphase über und verwenden Sie RequireEncryptRequireDecrypt sie schließlich, wenn alle Clients aktualisiert wurden und alle Objekte verbindlich neu verschlüsselt wurden.