Migration des Amazon S3 S3-Verschlüsselungsclients (V2 auf V4) - AWS SDK für .NET (V3)

Version 4 (V4) von AWS SDK für .NET wurde veröffentlicht!

Informationen zum Einstieg in die neue Version des SDK finden Sie im Entwicklerhandbuch AWS SDK für .NET (V4), insbesondere im Thema Migration auf Version 4.

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 (V2 auf V4)

Anmerkung

Wenn Sie V1 verwenden und zu V4 migrieren möchten, müssen Sie zuerst zu V2 migrieren. Siehe Migration des Amazon S3 S3-Verschlüsselungsclients (V1 auf V2).

In diesem Thema erfahren Sie, wie Sie Ihre Anwendungen von Version 2 (V2) des Amazon Simple Storage Service (Amazon S3) -Verschlüsselungsclients auf Version 4 (V4) migrieren und die Anwendungsverfügbarkeit während des gesamten Migrationsprozesses sicherstellen. V4 verwendet AES-GCM mit zentraler Verpflichtung für die Inhaltsverschlüsselung und führt Commitment-Richtlinien ein, um die Sicherheit vor Angriffen durch Schlüsselsubstitution zu erhöhen.

Der V4-Client ist im Paket Amazon.Extensions.S3.Encryption verfügbar. NuGet

Wichtig

Wesentliche Änderungen: Mit REQUIRE_ENCRYPT_REQUIRE_DECRYPT Richtlinien konfigurierte V4-Clients 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 REQUIRE_ENCRYPT_REQUIRE_DECRYPT 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:

FORBID_ENCRYPT_ALLOW_DECRYPT

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

REQUIRE_ENCRYPT_ALLOW_DECRYPT

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

REQUIRE_ENCRYPT_REQUIRE_DECRYPT(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 verwenden, das V4-Unterstützung bietet. Führen Sie für jede Ihrer Anwendungen die folgenden Schritte aus:

  1. 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.

  2. Stellen Sie sicher, dass Ihre using Anweisungen auf den richtigen Namespace verweisen:

    using Amazon.Extensions.S3.Encryption; using Amazon.Extensions.S3.Encryption.Primitives;
  3. 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:

  1. Erstellen Sie Ihre Anwendung, um sicherzustellen, dass alle Abhängigkeiten korrekt aufgelöst werden.

  2. Testen Sie Ihre Anwendung in einer Entwicklungsumgebung, um sicherzustellen, dass die vorhandenen Funktionen weiterhin funktionieren.

  3. 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 mit der sicheren Aktualisierung Ihrer Anwendungen fortfahren, 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.

  1. Schritt 0: V2-Client (Startpunkt) — Ihre bestehende V2-Implementierung

  2. Schritt 1: V4 mit V2-Kompatibilität — Migrieren Sie zum V4-Client unter Beibehaltung des V2-kompatiblen Verschlüsselungsverhaltens

  3. 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

  4. 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 demonstriert 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 FORBID_ENCRYPT_ALLOW_DECRYPT 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.FORBID_ENCRYPT_ALLOW_DECRYPT, 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. REQUIRE_ENCRYPT_ALLOW_DECRYPT

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.REQUIRE_ENCRYPT_ALLOW_DECRYPT, 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 REQUIRE_ENCRYPT_REQUIRE_DECRYPT 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.REQUIRE_ENCRYPT_REQUIRE_DECRYPT, 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(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT) { 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(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT) { StorageMode = CryptoStorageMode.ObjectMetadata }; // Encryption metadata is stored in S3 object metadata

Anweisungsdatei

var configuration = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT) { 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(CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT);

Übergangsphase (empfohlen)

// For transition: encrypt with commitment, allow legacy decryption var transitionConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT);

Vollständige Sicherheitsphase

// For maximum security: require commitment for both encryption and decryption var secureConfig = new AmazonS3CryptoConfigurationV4(CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT);

Beginnen Sie mit FORBID_ENCRYPT_ALLOW_DECRYPT der ersten Migration, gehen Sie REQUIRE_ENCRYPT_ALLOW_DECRYPT zur Übergangsphase über und verwenden Sie REQUIRE_ENCRYPT_REQUIRE_DECRYPT sie schließlich, wenn alle Clients aktualisiert wurden und alle Objekte verbindlich neu verschlüsselt wurden.