Version 4 (V4) von AWS SDK für .NET wurde veröffentlicht!
Informationen zu wichtigen Änderungen und zur Migration Ihrer Anwendungen finden Sie im Thema https://docs.aws.amazon.com/sdk-for-net/v4/developer-guide/net-dg-v4.html Migration.
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 auf V4 migrieren möchten, müssen Sie zuerst auf V2 migrieren. Siehe Migration des S3 Encryption Clients (V1 auf V2).
In diesem Thema wird gezeigt, 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 die Verschlüsselung von Inhalten AES-GCM mit vollem Einsatz und führt Commitment Policies ein, um die Sicherheit vor Angriffen durch Schlüsselsubstitution zu erhöhen.
Der V4-Client ist im Amazon.Extensions.S3.Encryption
Wichtig
Wichtige Änderungen: Mit einer RequireEncryptRequireDecrypt Richtlinie konfigurierte V4-Clients können mit V1- oder V2-Clients verschlüsselte Objekte nicht entschlüsseln. Nur die neuesten V2-Clients können V4-encrypted Objekte mit Schlüsselzusage entschlüsseln. Bevor Sie zur RequireEncryptRequireDecrypt Policy übergehen, müssen Sie alle Ihre vorhandenen Daten mithilfe von V4-Clients mit aktiviertem Key Commitment erneut verschlüsseln.
V4-Konzepte verstehen
V4 setzt AES-GCM mit großem Engagement auf Inhaltsverschlüsselung und führt wichtige Sicherheitskonzepte ein, die den Schutz Ihrer verschlüsselten Daten verbessern:
Richtlinie zur Verpflichtung
Die Verpflichtungsrichtlinie steuert, wie der Verschlüsselungsclient bei Verschlüsselungs- und Entschlüsselungsvorgängen mit der Schlüsselbindung umgeht. V4 unterstützt drei Commitment-Richtlinien:
ForbidEncryptAllowDecrypt-
Verschlüsselung: Unverbindlich
Entschlüsselung: Erlaubt Objekte, bei denen keine Übertragung erfolgt
Sicherheit: Erzwingt keine Verbindlichkeit und kann Manipulationen zulassen
Kompatibilität: Alle V2- und V4-Implementierungen können Objekte lesen, die mit dieser Richtlinie verschlüsselt wurden
RequireEncryptAllowDecrypt-
Verschlüsselung: Mit viel Engagement
Entschlüsselung: Ermöglicht sowohl das Festschreiben 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 zentraler Verpflichtung
V4 verwendet AES-GCM mit Key Commitment zur Inhaltsverschlüsselung, was für erhöhte Sicherheit sorgt:
-
Manipulationsschutz: Es schützt vor Angriffen durch Schlüsselsubstitution, indem der Schlüssel kryptografisch an die verschlüsselten Daten gebunden wird.
-
Versionskompatibilität: Objekte, die mit Schlüsselbindung verschlüsselt wurden, können nur von V4-Clients und neueren Versionen entschlüsselt werden.
Warnung
Bevor Sie die Verschlüsselung mit Schlüsselzusage 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 vorhandene Clients, um V4-Formate zu lesen
Der V4-Verschlüsselungsclient verwendet Verschlüsselungsalgorithmen, die ältere Versionen des Clients nicht unterstützen. Der erste Schritt bei der Migration besteht darin, Ihre V2-Clients zu aktualisieren, damit sie das neue V4-Format lesen können.
Aktualisieren Sie die NuGet Paketabhängigkeiten
Aktualisieren Sie Ihre Anwendungen, um die neueste Version des Amazon.Extensions.S3.Encryption
-
Aktualisieren Sie auf das neueste Amazon.Extensions.S3.Encryption
Paket. Wenn Ihr Projekt direkt von den AWSSDK.S3 oder AWSSDK.KeyManagementService -Paketen abhängt, müssen Sie entweder diese Abhängigkeiten aktualisieren oder sie 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 arbeiten weiterhin mit dem aktualisierten Paket und können Objekte entschlüsseln, die von V4-Clients verschlüsselt wurden (abhängig von der verwendeten Commitment-Policy).
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 auf das neue Verschlüsselungsformat aktualisiert haben, können Sie Ihre Anwendungen sicher aktualisieren, sodass sie V4-Verschlüsselungs- und Entschlüsselungsclients verwenden. Der V4-Client bietet erhöhte Sicherheit durch Key Commitment und gewährleistet gleichzeitig die Kompatibilität mit vorhandenen verschlüsselten Objekten.
Migrationsprozess in 4 Schritten
Die Migration von V2 auf V4 folgt einem strukturierten 4-stufigen Prozess, um Kompatibilität und Sicherheit zu gewährleisten. Jeder Schritt stellt eine bestimmte 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 und behalten Sie dabei das V2-compatible Verschlüsselungsverhalten bei
-
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 Startzustand 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 alle Objekte unverbindlich zu verschlüsseln und die Entschlüsselung 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 unverbindlich, kann sowohl übertragende als auch nicht übertragende Objekte entschlüsseln. Identisch mit dem Verhalten von V2.
Schritt 2: V4 mit Key Commitment Writes
Beginnen Sie mit der Verschlüsselung mit Key Commitment und behalten Sie gleichzeitig die Abwärtskompatibilität für die 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 der Schlüsselzusage zu verarbeiten.
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 Verbindlichkeit, kann sowohl festgeschriebene als auch nicht übertragende Objekte entschlüsseln. 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 sind wichtige Verpflichtungen 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 Schlüsselzusage erneut verschlüsselt wurden (Schritt 2). In diesem Schritt können ohne Verpflichtung verschlüsselte Objekte 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 Verbindlichkeit, entschlüsselt nur Objekte, die verbindlich verschlüsselt wurden. 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-Unterstützung 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 Legacy-Entschlüsselung zulässt:
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 erhöhter 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:
Objektmetadaten (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 Metadatengröße begrenzt ist.
Konfiguration der Verpflichtungsrichtlinie
Wählen Sie auf der Grundlage Ihrer Sicherheitsanforderungen und der Migrationsphase die geeignete 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 und alle Objekte verbindlich neu verschlüsselt wurden.