Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Migration du client de chiffrement Amazon S3 (V2 vers V3)
Note
Si vous utilisez la version V1 du client de chiffrement S3, vous devez d'abord migrer vers la V2 avant de migrer vers la V3. Consultez Migration du client de chiffrement Amazon S3 (V1 vers V2) les instructions relatives à la migration de la V1 vers la V2.
Cette rubrique explique comment migrer vos applications de la version 2 (V2) du client de chiffrement Amazon Simple Storage Service (Amazon S3) vers la version 3 (V3), et comment garantir la disponibilité des applications tout au long du processus de migration. La version 3 introduit AES GCM avec des politiques d'engagement et d'engagement clés pour améliorer la sécurité et protéger contre la falsification des clés de données.
Présentation de la migration
La version 3 du client de chiffrement Amazon S3 introduit AES GCM avec Key Commitment pour une sécurité renforcée. Ce nouvel algorithme de chiffrement fournit une protection contre la falsification des clés de données et garantit l'intégrité des données chiffrées. La migration vers la version 3 nécessite une planification minutieuse afin de garantir la disponibilité des applications et l'accessibilité des données tout au long du processus.
Cette migration s'effectue en deux phases :
1. Mettez à jour les clients existants pour lire les nouveaux formats. Déployez d'abord une version mise à jour du AWS SDK pour Ruby dans votre application. Cela permettra aux clients de chiffrement V2 existants de déchiffrer les objets écrits par les nouveaux clients V3. Si votre application en utilise plusieurs AWS SDKs, vous devez mettre à niveau chaque SDK séparément.
2. Migrez les clients de chiffrement et de déchiffrement vers la version 3. Une fois que tous vos clients de chiffrement V2 peuvent lire les nouveaux formats, vous pouvez migrer vos clients de chiffrement et de déchiffrement existants vers leurs versions V3 respectives. Cela inclut la configuration des politiques d'engagement et la mise à jour de votre code pour utiliser les nouvelles options de configuration du client.
Si vous n'avez pas encore migré de la V1 vers la V2, vous devez d'abord effectuer cette migration. Consultez Migration du client de chiffrement Amazon S3 (V1 vers V2) les instructions détaillées sur la migration de la V1 vers la V2.
Comprendre les fonctionnalités de la V3
La version 3 du client de chiffrement Amazon S3 introduit deux fonctionnalités de sécurité clés : Commitment Policies et AES GCM with Key Commitment. Comprendre ces fonctionnalités est essentiel pour planifier votre stratégie de migration et garantir la sécurité de vos données chiffrées.
Politiques d'engagement
Les politiques d'engagement contrôlent la manière dont le client de chiffrement gère l'engagement des clés lors des opérations de chiffrement et de déchiffrement. L'engagement par clé garantit que les données cryptées ne peuvent être déchiffrées qu'avec la clé exacte qui a été utilisée pour les chiffrer, protégeant ainsi contre certains types d'attaques cryptographiques.
Le client de chiffrement V3 prend en charge trois options de politique d'engagement :
FORBID_ENCRYPT_ALLOW_DECRYPT
Cette politique chiffre les objets sans engagement de clé et permet de déchiffrer les deux objets avec ou sans engagement de clé.
-
Comportement de chiffrement : les objets sont chiffrés sans engagement de clé, en utilisant la même suite d'algorithmes que la version 2.
-
Comportement de déchiffrement : peut déchiffrer des objets chiffrés avec ou sans clé d'engagement.
-
Incidences en matière de sécurité : cette politique n'applique pas les engagements clés et peut autoriser la falsification. Les objets chiffrés selon cette politique ne bénéficient pas des protections de sécurité renforcées qu'offre Key Commitment. Utilisez cette politique uniquement pendant la migration lorsque vous devez maintenir la compatibilité avec le comportement de chiffrement de la version 2.
-
Compatibilité des versions : les objets chiffrés avec cette politique peuvent être lus par toutes les implémentations V2 et V3 du client de chiffrement S3.
REQUIRE_ENCRYPT_ALLOW_DECRYPT
Cette politique chiffre les objets avec un engagement clé et permet le déchiffrement des deux objets avec et sans engagement clé.
-
Comportement de chiffrement : les objets sont chiffrés avec un engagement clé à l'aide d'AES GCM with Key Commitment.
-
Comportement de déchiffrement : permet de déchiffrer des objets chiffrés avec ou sans clé d'activation, garantissant ainsi une rétrocompatibilité.
-
Implications en matière de sécurité : les nouveaux objets bénéficient d'une protection par engagement clé, tandis que les objets existants sans engagement clé peuvent toujours être lus. Cela permet de trouver un équilibre entre sécurité et rétrocompatibilité lors de la migration.
-
Compatibilité des versions : les objets chiffrés avec cette politique ne peuvent être lus que par la version 3 et les dernières implémentations V2 du client de chiffrement S3.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Cette politique chiffre les objets avec une clé d'engagement et n'autorise le déchiffrement que des objets chiffrés avec une clé d'engagement.
-
Comportement de chiffrement : les objets sont chiffrés avec un engagement clé à l'aide d'AES GCM with Key Commitment.
-
Comportement de déchiffrement : ne peut déchiffrer que les objets chiffrés avec une clé d'engagement. Les tentatives de déchiffrement d'objets sans engagement de clé échoueront.
-
Implications en matière de sécurité : cette politique fournit le plus haut niveau de sécurité en appliquant un engagement clé pour toutes les opérations. Utilisez cette politique uniquement une fois que tous les objets ont été rechiffrés avec clé d'engagement et que tous les clients ont été mis à niveau vers la version 3.
-
Compatibilité des versions : les objets chiffrés avec cette politique ne peuvent être lus que par la version 3 et les dernières implémentations V2 du client de chiffrement S3. Cette politique empêche également la lecture des objets chiffrés par les clients V2 ou V1.
Note
Lorsque vous planifiez votre migration, commencez par REQUIRE_ENCRYPT_ALLOW_DECRYPT maintenir la rétrocompatibilité tout en bénéficiant des avantages en termes de sécurité liés à un engagement clé pour les nouveaux objets. Passez à la version V3 uniquement une REQUIRE_ENCRYPT_REQUIRE_DECRYPT fois que tous les objets ont été rechiffrés et que tous les clients ont été mis à niveau vers la version 3.
AES GCM avec un engagement clé
AES GCM with Key Commitment (ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY) est un nouvel algorithme de chiffrement introduit dans la version 3 qui fournit une sécurité renforcée en protégeant contre la falsification des clés de données. Pour planifier votre migration, il est important de comprendre comment cet algorithme fonctionne et quand il s'applique.
En quoi ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY diffère-t-il des algorithmes précédents
Les versions précédentes du client de chiffrement S3 utilisaient AES CBC ou AES GCM sans engagement de clé pour chiffrer la clé de données dans les fichiers d'instructions. ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEYajoute un engagement cryptographique au processus de chiffrement, qui lie les données chiffrées à une clé spécifique. Cela empêche un attaquant de falsifier la clé de données cryptée dans le fichier d'instructions et d'obliger le client à déchiffrer les données avec une clé incorrecte.
Sans engagement de clé, il est possible pour un attaquant de modifier la clé de données chiffrée dans un fichier d'instructions afin qu'elle soit déchiffrée avec une autre clé, ce qui peut permettre un accès non autorisé ou une corruption des données. ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEYempêche cette attaque en garantissant que la clé de données cryptée ne peut être déchiffrée qu'avec la clé d'origine utilisée lors du chiffrement.
Compatibilité des versions
Les objets chiffrés avec ne ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY peuvent être déchiffrés que par les implémentations V3 du client de chiffrement S3 et par certaines versions de transition de V2 qui incluent la prise en charge de la lecture des formats V3. Les clients V2 ne prenant pas en charge cette transition ne peuvent pas déchiffrer les fichiers d'instructions chiffrés avecALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY.
Avertissement
Avant d'activer le chiffrement avec ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY (en utilisant REQUIRE_ENCRYPT_ALLOW_DECRYPT des politiques d'REQUIRE_ENCRYPT_REQUIRE_DECRYPTengagement), assurez-vous que tous les clients devant lire vos objets chiffrés ont été mis à niveau vers la version 3 ou vers une version de transition prenant en charge les formats V3. Si des clients V2 ne prenant pas en charge la transition tentent de lire des objets chiffrés avecALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY, le déchiffrement échouera.
Pendant la migration, vous pouvez utiliser la politique d'FORBID_ENCRYPT_ALLOW_DECRYPTengagement pour poursuivre le chiffrement sans ALG_AES_256_GCM_HKDF_SHA512_COMMIT_KEY autoriser vos clients V3 à lire les objets chiffrés avec un engagement clé. Cela fournit une voie de migration sûre dans laquelle vous devez d'abord mettre à niveau tous les lecteurs, puis passer au chiffrement avec engagement clé.
Mettre à jour les clients existants pour lire les nouveaux formats
Le client de chiffrement V3 utilise des algorithmes de chiffrement et des fonctionnalités d'engagement clés que les clients V2 ne prennent pas en charge par défaut. La première étape de la migration consiste à mettre à jour vos clients de déchiffrement V2 vers une version du AWS SDK pour Ruby capable de lire les objets chiffrés V3. Une fois cette étape terminée, les clients V2 de votre application seront en mesure de déchiffrer les objets chiffrés par les clients de chiffrement V3.
Pour lire les objets chiffrés par les clients V3 (ceux qui utilisent REQUIRE_ENCRYPT_ALLOW_DECRYPT des politiques d'REQUIRE_ENCRYPT_REQUIRE_DECRYPTengagement), vous devez utiliser la version 1.93.0 ou ultérieure de la gemme. aws-sdk-s3 Cette version inclut la prise en charge du déchiffrement d'objets chiffrés avec AES GCM avec Key Commitment.
Installation depuis la ligne de commande
Pour les projets qui installent la aws-sdk-s3 gem depuis la ligne de commande, utilisez l'option de version pour vérifier que la version minimale de 1.208.0 est installée.
gem install aws-sdk-s3 -v '>= 1.208.0'
Utilisation de Gemfiles
Pour les projets qui utilisent un Gemfile pour gérer les dépendances, définissez la version minimale du aws-sdk-s3 gem sur 1.208.0. Par exemple :
gem 'aws-sdk-s3', '>= 1.208.0'
-
Modifiez votre Gemfile pour spécifier la version minimale.
-
Exécutez
bundle update aws-sdk-s3pour mettre à jour la gemme. -
Pour vérifier votre version, exécutez
bundle info aws-sdk-s3.
Note
Après la mise à jour vers la dernière version, vos clients de chiffrement V2 existants pourront déchiffrer les objets chiffrés par les clients V3. Cependant, ils continueront à chiffrer les nouveaux objets à l'aide des algorithmes V2 jusqu'à ce que vous les migriez vers la V3, comme décrit dans la section suivante.
Migrer les clients de chiffrement et de déchiffrement vers la version 3
Après avoir mis vos clients à jour pour qu'ils lisent les nouveaux formats de chiffrement, vous pouvez mettre à jour vos applications pour les clients de chiffrement et de déchiffrement V3. Les étapes suivantes vous montrent comment migrer avec succès votre code de la V2 à la V3.
Avant de mettre à jour votre code pour utiliser le client de chiffrement V3, assurez-vous d'avoir suivi les étapes précédentes et d'utiliser la version aws-sdk-s3 gem 1.93.0 ou ultérieure.
Note
Lorsque vous déchiffrez avec AES-GCM, lisez l'objet dans son intégralité avant de commencer à utiliser les données déchiffrées. Cela permet de vérifier que l'objet n'a pas été modifié depuis qu'il a été chiffré.
Configuration des clients V3
Le client de chiffrement V3 introduit de nouvelles options de configuration qui contrôlent le comportement d'engagement des clés et la rétrocompatibilité. Comprendre ces options est essentiel pour une migration réussie.
politique_d'engagement
Le commitment_policy paramètre contrôle la manière dont le client de chiffrement gère l'engagement des clés lors des opérations de chiffrement et de déchiffrement. Il s'agit de l'option de configuration la plus importante pour les clients V3.
-
:require_encrypt_allow_decrypt- Chiffre les nouveaux objets avec un engagement clé et permet le déchiffrement des objets avec ou sans engagement clé. Il s'agit du paramètre recommandé pour la migration, car il renforce la sécurité des nouveaux objets tout en préservant la rétrocompatibilité avec les objets V2 existants. -
:forbid_encrypt_allow_decrypt- Chiffre les nouveaux objets sans engagement de clé (à l'aide d'algorithmes V2) et permet le déchiffrement d'objets avec ou sans engagement de clé. Utilisez ce paramètre uniquement si vous devez conserver le comportement de chiffrement V2 pendant la migration, par exemple lorsque certains clients ne peuvent pas encore lire les objets chiffrés V3. -
:require_encrypt_require_decrypt- Chiffre les nouveaux objets avec un engagement clé et n'autorise le déchiffrement que des objets chiffrés avec un engagement clé. Utilisez ce paramètre uniquement une fois que tous les objets ont été rechiffrés avec clé d'engagement et que tous les clients ont été mis à niveau vers la version 3.
profil_sécurité
Le security_profile paramètre détermine la prise en charge de la lecture d'objets écrits par d'anciennes versions du client de chiffrement. Ce paramètre est essentiel pour maintenir la rétrocompatibilité pendant la migration.
-
:v3_and_legacy- Permet au client V3 de déchiffrer les objets chiffrés par les clients de chiffrement V1 et V2. Utilisez ce paramètre lors de la migration pour vous assurer que vos clients V3 peuvent lire tous les objets chiffrés existants. -
:v3- Permet au client V3 de déchiffrer les objets chiffrés uniquement par les clients de chiffrement V2. Utilisez ce paramètre si vous avez déjà migré tous les objets V1 vers le format V2. -
Si ce n'est pas spécifié, le client décryptera uniquement les objets chiffrés par les clients V3. Utilisez-le uniquement pour le développement de nouvelles applications où aucun objet existant n'existe.
enveloppe_location
Le envelope_location paramètre détermine où les métadonnées de chiffrement (y compris la clé de données cryptée) sont stockées. Ce paramètre détermine quels objets sont protégés par AES GCM avec Key Commitment.
-
:metadata(Par défaut) - Stocke les métadonnées de chiffrement dans les en-têtes de métadonnées de l'objet S3. Il s'agit du comportement par défaut recommandé dans la plupart des cas d'utilisation. Lorsque vous utilisez le stockage de métadonnées, AES GCM with Key Commitment ne s'applique pas. -
:instruction_file- Stocke les métadonnées de chiffrement dans un objet S3 distinct (fichier d'instructions) avec un suffixe configurable. Lorsque vous utilisez des fichiers d'instructions, AES GCM avec Key Commitment protège la clé de données cryptée contre toute falsification. Utilisez ce paramètre si vous avez besoin de la sécurité supplémentaire fournie par l'engagement des clés pour la clé de données elle-même.
Lors de l'utilisation:instruction_file, vous pouvez éventuellement spécifier le instruction_file_suffix paramètre pour personnaliser le suffixe utilisé pour les objets du fichier d'instructions. Le suffixe par défaut est.instruction.
Quand utiliser chaque option de configuration
Au cours de la migration, suivez cette stratégie de configuration recommandée :
-
Migration initiale : définissez
commitment_policy: :require_encrypt_allow_decryptetsecurity_profile: :v3_and_legacy. Cela permet à vos clients V3 de chiffrer de nouveaux objets avec un engagement clé tout en étant en mesure de déchiffrer tous les objets V1 et V2 existants. -
Une fois tous les clients mis à niveau : continuez à utiliser
commitment_policy: :require_encrypt_allow_decryptetsecurity_profile: :v3_and_legacyjusqu'à ce que vous ayez rechiffré tous les objets nécessitant une protection par clé d'engagement. -
Application complète de la V3 : Ce n'est qu'une fois que tous les objets ont été rechiffrés avec un engagement clé et que vous n'avez plus besoin de lire les objets V1/V2 que vous pouvez éventuellement passer au
security_profileparamètrecommitment_policy: :require_encrypt_require_decryptet le supprimer (ou le définir sur:v2si les objets V2 existent toujours).
En envelope_location effet, continuez à utiliser votre méthode de stockage existante (:metadataou:instruction_file) sauf si vous avez une raison spécifique de la modifier. Si vous utilisez actuellement le stockage de métadonnées et que vous souhaitez bénéficier de la sécurité supplémentaire d'AES GCM avec Key Commitment pour la clé de données, vous pouvez passer à cette option:instruction_file, mais notez que cela nécessitera la mise à jour de tous les clients qui lisent ces objets.
Migrer les clients de chiffrement et de déchiffrement vers la version 3
Après avoir mis vos clients à jour pour qu'ils lisent les nouveaux formats de chiffrement, vous pouvez mettre à jour vos applications pour les clients de chiffrement et de déchiffrement V3. Les exemples suivants vous montrent comment migrer avec succès votre code de la V2 à la V3.
Utilisation de clients de chiffrement V3
Prémigration (V2)
require 'aws-sdk-s3' # Create V2 encryption client with KMS client = Aws::S3::EncryptionV2::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v2_and_legacy, commitment_policy: :forbid_encrypt_allow_decrypt ) # Encrypt and upload object client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # Download and decrypt object resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
Pendant la migration (V3 avec rétrocompatibilité)
require 'aws-sdk-s3' # Create V3 encryption client with KMS client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3_and_legacy, commitment_policy: :require_encrypt_allow_decrypt ) # Encrypt and upload object client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # Download and decrypt object resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
Après la migration (V3)
require 'aws-sdk-s3' # Create V3 encryption client with KMS client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3, # Use the commitment policy (REQUIRE_ENCRYPT_REQUIRE_DECRYPT) # This encrypts with key commitment and does not decrypt V2 objects commitment_policy: :require_encrypt_require_decrypt ) # Encrypt and upload object client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # Download and decrypt object resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
La principale différence dans la version 3 réside dans l'ajout du commitment_policy paramètre. Le paramétrer de manière à :require_encrypt_require_decrypt garantir que les nouveaux objets sont chiffrés avec un engagement par clé et que le client ne déchiffre que les objets chiffrés avec un engagement par clé, offrant ainsi une sécurité renforcée contre la falsification des clés de données.
L'put_objectappel lui-même reste inchangé. Toutes les améliorations de sécurité sont configurées au niveau du client.
Exemples supplémentaires
Cette section fournit des exemples supplémentaires de scénarios de migration et d'options de configuration spécifiques qui peuvent être utiles lors de votre migration de V2 à V3.
Stockage de fichiers d'instructions ou de métadonnées
Le client de chiffrement S3 peut stocker les métadonnées de chiffrement (y compris la clé de données chiffrée) à deux emplacements différents : dans les en-têtes de métadonnées de l'objet S3 ou dans un fichier d'instructions distinct. Le choix de la méthode de stockage détermine quels objets bénéficient de la protection AES GCM avec Key Commitment.
Stockage des métadonnées (par défaut)
Par défaut, le client de chiffrement stocke les métadonnées de chiffrement dans les en-têtes de métadonnées de l'objet S3. Il s'agit de l'approche recommandée dans la plupart des cas d'utilisation, car elle conserve les métadonnées de chiffrement avec l'objet et ne nécessite pas de gérer des objets de fichier d'instructions distincts.
require 'aws-sdk-s3' # Create V3 encryption client with metadata storage (default) client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3_and_legacy, commitment_policy: :require_encrypt_allow_decrypt, envelope_location: :metadata # Explicitly set to metadata (this is the default) ) # Encrypt and upload object # Encryption metadata is stored in the object's metadata headers client.put_object(bucket: 'my-bucket', key: 'my-object',body: 'secret data')
Lorsque vous utilisez le stockage de métadonnées, AES GCM with Key Commitment ne s'applique pas à la clé de données cryptée. Cependant, le chiffrement du contenu bénéficie toujours d'un engagement clé lors de l'utilisation de commitment_policy: :require_encrypt_allow_decrypt ou:require_encrypt_require_decrypt.
Stockage des fichiers d'instructions
Vous pouvez également configurer le client de chiffrement pour stocker les métadonnées de chiffrement dans un objet S3 distinct appelé fichier d'instructions. Lorsque vous utilisez des fichiers d'instructions avec la version 3, la clé de données cryptée est protégée par AES GCM avec Key Commitment, ce qui fournit une sécurité supplémentaire contre la falsification de la clé de données.
require 'aws-sdk-s3' # Create V3 encryption client with instruction file storage client = Aws::S3::EncryptionV3::Client.new( kms_key_id: kms_key_id, key_wrap_schema: :kms_context, content_encryption_schema: :aes_gcm_no_padding, security_profile: :v3_and_legacy, commitment_policy: :require_encrypt_allow_decrypt, envelope_location: :instruction_file, # Store metadata in separate instruction file instruction_file_suffix: '.instruction' # Optional: customize the suffix (default is '.instruction') ) # Encrypt and upload object # Encryption metadata is stored in a separate object: 'my-object.instruction' client.put_object(bucket: 'my-bucket', key: 'my-object', body: 'secret data') # When retrieving the object, the client automatically reads the instruction file resp = client.get_object(bucket: 'my-bucket', key: 'my-object') decrypted_data = resp.body.read
Lors de l'utilisationenvelope_location: :instruction_file, le client de chiffrement crée deux objets S3 :
-
L'objet de données crypté (par exemple,
my-object) -
Le fichier d'instructions contenant les métadonnées de chiffrement (par exemple,
my-object.instruction)
Le instruction_file_suffix paramètre vous permet de personnaliser le suffixe utilisé pour les fichiers d'instructions. La valeur par défaut est .instruction.
Quand utiliser chaque méthode de stockage
-
Utilisez le stockage des métadonnées dans la plupart des scénarios. Cela simplifie la gestion des objets puisque les métadonnées de chiffrement voyagent avec l'objet.
-
Utilisez le stockage des fichiers d'instructions lorsque la taille des métadonnées d'un objet pose problème ou lorsque vous devez séparer les métadonnées de chiffrement de l'objet chiffré. Notez que l'utilisation de fichiers d'instructions nécessite de gérer deux objets S3 (l'objet chiffré et son fichier d'instructions) au lieu d'un.
Avertissement
Si vous passez du stockage des métadonnées au stockage des fichiers d'instructions (ou vice versa), les objets existants chiffrés avec l'ancienne méthode de stockage ne seront pas lisibles par les clients configurés avec la nouvelle méthode de stockage. Planifiez soigneusement votre méthode de stockage et maintenez la cohérence au sein de votre application.