Mise à jour des fournisseurs de clés AWS KMS principales - AWS Encryption SDK

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.

Mise à jour des fournisseurs de clés AWS KMS principales

Pour migrer vers la dernière version 1. version x du AWS Encryption SDK, puis vers la version 2.0. x ou version ultérieure, vous devez remplacer les anciens fournisseurs de clés AWS KMS principales par des fournisseurs de clés principales créés explicitement en mode strict ou en mode découverte. Les anciens fournisseurs de clés principales sont obsolètes dans la version 1.7. x et supprimé dans la version 2.0. x. Cette modification est requise pour les applications et les scripts qui utilisent le Kit SDK de chiffrement AWS pour JavaKit SDK de chiffrement AWS pour Python, et le AWS chiffrement CLI. Les exemples présentés dans cette section vous montreront comment mettre à jour votre code.

Note

En Python, activez les avertissements d'obsolescence. Cela vous aidera à identifier les parties de votre code que vous devez mettre à jour.

Si vous utilisez une clé AWS KMS principale (et non un fournisseur de clé principale), vous pouvez ignorer cette étape. AWS KMS les clés principales ne sont ni déconseillées ni supprimées. Ils chiffrent et déchiffrent uniquement avec les clés d'encapsulation que vous spécifiez.

Les exemples de cette section se concentrent sur les éléments de votre code que vous devez modifier. Pour un exemple complet du code mis à jour, consultez la section Exemples du GitHub référentiel de votre langage de programmation. De plus, ces exemples utilisent généralement une clé ARNs pour représenter AWS KMS keys. Lorsque vous créez un fournisseur de clé principale pour le chiffrement, vous pouvez utiliser n'importe quel identifiant de AWS KMS clé valide pour représenter un AWS KMS key . Lorsque vous créez un fournisseur de clé principale pour le déchiffrement, vous devez utiliser une clé. ARN

En savoir plus sur la migration

Pour tous les AWS Encryption SDK utilisateurs, découvrez comment définir votre politique d'engagement dansDéfinition de votre politique d'engagement.

Pour les Kit SDK de chiffrement AWS pour JavaScript utilisateurs Kit SDK de chiffrement AWS pour C et les utilisateurs, découvrez une mise à jour facultative des trousseaux de clés. Mise à jour en coursAWS KMSporte-clés

Migration vers le mode strict

Après la mise à jour vers la dernière version 1. version x du AWS Encryption SDK, remplacez vos anciens fournisseurs de clés principales par des fournisseurs de clés principales en mode strict. En mode strict, vous devez spécifier les clés d'encapsulation à utiliser lors du chiffrement et du déchiffrement. AWS Encryption SDK Utilise uniquement les clés d'encapsulation que vous spécifiez. Les fournisseurs de clés principales obsolètes peuvent déchiffrer les données à l'aide de n'importe quelle AWS KMS key clé de données chiffrée, y compris AWS KMS keys dans différentes Comptes AWS régions et régions.

Les fournisseurs de clés principales en mode strict sont introduits dans la AWS Encryption SDK version 1.7. x. Ils remplacent les anciens fournisseurs de clés principales, qui sont obsolètes dans la version 1.7. x et supprimé dans la version 2.0. x. L'utilisation de fournisseurs de clés principales en mode strict est une AWS Encryption SDK bonne pratique.

Le code suivant crée un fournisseur de clé principale en mode strict que vous pouvez utiliser pour le chiffrement et le déchiffrement.

Java

Cet exemple représente le code d'une application qui utilise la version 1.6.2 ou antérieure du Kit SDK de chiffrement AWS pour Java.

Ce code utilise la KmsMasterKeyProvider.builder() méthode pour instancier un fournisseur de clé AWS KMS principale qui en utilise une AWS KMS key comme clé d'encapsulation.

// Create a master key provider // Replace the example key ARN with a valid one String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder() .withKeysForEncryption(awsKmsKey) .build();

Cet exemple représente le code d'une application qui utilise la version 1.7. x ou une version ultérieure du Kit SDK de chiffrement AWS pour Java . Pour un exemple complet, consultez BasicEncryptionExample.java.

Les Builder.withKeysForEncryption() méthodes Builder.build() et utilisées dans l'exemple précédent sont obsolètes dans la version 1.7. x et sont supprimés de la version 2.0. x.

Pour passer à un fournisseur de clé principale en mode strict, ce code remplace les appels aux méthodes obsolètes par un appel à la nouvelle Builder.buildStrict() méthode. Cet exemple en spécifie une AWS KMS key comme clé d'encapsulation, mais la Builder.buildStrict() méthode peut prendre une liste de plusieurs AWS KMS keys.

// Create a master key provider in strict mode // Replace the example key ARN with a valid one from your Compte AWS. String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder() .buildStrict(awsKmsKey);
Python

Cet exemple représente le code d'une application qui utilise la version 1.4.1 du Kit SDK de chiffrement AWS pour Python. Ce code utiliseKMSMasterKeyProvider, ce qui est obsolète dans la version 1.7. x et supprimé de la version 2.0. x. Lors du déchiffrement, il utilise toute clé de données chiffrée indépendamment de AWS KMS key celle que vous spécifiez AWS KMS keys .

Notez que cela n'KMSMasterKeyest ni obsolète ni supprimé. Lors du chiffrement et du déchiffrement, il utilise uniquement ce que vous spécifiez. AWS KMS key

# Create a master key provider # Replace the example key ARN with a valid one key_1 = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" key_2 = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" aws_kms_master_key_provider = KMSMasterKeyProvider( key_ids=[key_1, key_2] )

Cet exemple représente le code d'une application qui utilise la version 1.7. x du Kit SDK de chiffrement AWS pour Python. Pour un exemple complet, consultez le fichier basic_encryption.py.

Pour passer à un fournisseur de clé principale en mode strict, ce code remplace l'appel KMSMasterKeyProvider() à par un appel àStrictAwsKmsMasterKeyProvider().

# Create a master key provider in strict mode # Replace the example key ARNs with valid values from your Compte AWS key_1 = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" key_2 = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321" aws_kms_master_key_provider = StrictAwsKmsMasterKeyProvider( key_ids=[key_1, key_2] )
AWS Encryption CLI

Cet exemple montre comment chiffrer et déchiffrer à l'aide de la CLI version de AWS chiffrement 1.1.7 ou antérieure.

Dans les versions 1.1.7 et antérieures, lors du chiffrement, vous spécifiez une ou plusieurs clés principales (ou clés d'encapsulation), telles qu'un. AWS KMS key Lors du déchiffrement, vous ne pouvez spécifier aucune clé d'encapsulation, sauf si vous utilisez un fournisseur de clé principale personnalisé. Le AWS chiffrement CLI peut utiliser n'importe quelle clé d'encapsulation qui a chiffré une clé de données.

\\ Replace the example key ARN with a valid one $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \\ Encrypt your plaintext data $ aws-encryption-cli --encrypt \ --input hello.txt \ --master-keys key=$keyArn \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .

Cet exemple montre comment chiffrer et déchiffrer à l'aide de la CLI version 1.7 de AWS chiffrement. x ou version ultérieure. Pour des exemples complets, voirExemples deAWSCLI de chiffrement.

Le --master-keys paramètre est obsolète dans la version 1.7. x et supprimé dans la version 2.0. x. Il a remplacé le --wrapping-keys paramètre by, qui est obligatoire dans les commandes de chiffrement et de déchiffrement. Ce paramètre prend en charge le mode strict et le mode découverte. Le mode strict est une AWS Encryption SDK bonne pratique qui garantit que vous utilisez la clé d'encapsulation comme vous le souhaitez.

Pour passer en mode strict, utilisez l'attribut key du --wrapping-keys paramètre pour spécifier une clé d'encapsulation lors du chiffrement et du déchiffrement.

\\ Replace the example key ARN with a valid value $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \\ Encrypt your plaintext data $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$keyArn \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys key=$keyArn \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .

Migration vers le mode découverte

À partir de la version 1.7. x, il est recommandé d' AWS Encryption SDK utiliser le mode strict pour les fournisseurs de clés AWS KMS principales, c'est-à-dire de spécifier les clés d'encapsulage lors du chiffrement et du déchiffrement. Vous devez toujours spécifier les clés d'encapsulage lors du chiffrement. Mais il existe des situations dans lesquelles il n'est pas pratique ARNs de spécifier la clé de AWS KMS keys pour le déchiffrement. Par exemple, si vous utilisez des alias pour vous identifier AWS KMS keys lors du chiffrement, vous perdez l'avantage des alias si vous devez répertorier les clés ARNs lors du déchiffrement. En outre, étant donné que les fournisseurs de clés principales en mode découverte se comportent comme les fournisseurs de clés principales d'origine, vous pouvez les utiliser temporairement dans le cadre de votre stratégie de migration, puis passer ultérieurement à des fournisseurs de clés principales en mode strict.

Dans de tels cas, vous pouvez utiliser des fournisseurs de clés principales en mode découverte. Ces fournisseurs de clés principales ne vous permettent pas de spécifier des clés d'encapsulage, vous ne pouvez donc pas les utiliser pour le chiffrement. Lors du déchiffrement, ils peuvent utiliser n'importe quelle clé d'encapsulation qui a chiffré une clé de données. Mais contrairement aux anciens fournisseurs de clés principales, qui se comportent de la même manière, vous les créez explicitement en mode découverte. Lorsque vous utilisez des fournisseurs de clés principales en mode découverte, vous pouvez limiter le nombre de clés d'encapsulage pouvant être utilisées à ceux-ci en particulier Comptes AWS. Ce filtre de découverte est facultatif, mais c'est une bonne pratique que nous recommandons. Pour plus d'informations sur AWS les partitions et les comptes, consultez Amazon Resource Names dans le Références générales AWS.

Les exemples suivants créent un fournisseur de clé AWS KMS principale en mode strict pour le chiffrement et un fournisseur de clé AWS KMS principale en mode découverte pour le déchiffrement. Le fournisseur de clés principales en mode découverte utilise un filtre de découverte pour limiter les clés d'encapsulation utilisées pour le déchiffrement sur la aws partition et pour un exemple particulier. Comptes AWS Bien que le filtre de compte ne soit pas nécessaire dans cet exemple très simple, il s'agit d'une bonne pratique très avantageuse lorsqu'une application chiffre des données et qu'une autre application les déchiffre.

Java

Cet exemple représente le code d'une application qui utilise la version 1.7. x ou une version ultérieure du Kit SDK de chiffrement AWS pour Java. Pour un exemple complet, consultez DiscoveryDecryptionExample.java.

Pour instancier un fournisseur de clé principale en mode strict à des fins de chiffrement, cet exemple utilise la méthode. Builder.buildStrict() Pour instancier un fournisseur de clé principale en mode découverte à des fins de déchiffrement, il utilise la méthode. Builder.buildDiscovery() La Builder.buildDiscovery() méthode prend un DiscoveryFilter qui limite le AWS Encryption SDK à AWS KMS keys dans la AWS partition et les comptes spécifiés.

// Create a master key provider in strict mode for encrypting // Replace the example alias ARN with a valid one from your Compte AWS. String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias"; KmsMasterKeyProvider encryptingKeyProvider = KmsMasterKeyProvider.builder() .buildStrict(awsKmsKey); // Create a master key provider in discovery mode for decrypting // Replace the example account IDs with valid values. DiscoveryFilter accounts = new DiscoveryFilter("aws", Arrays.asList("111122223333", "444455556666")); KmsMasterKeyProvider decryptingKeyProvider = KmsMasterKeyProvider.builder() .buildDiscovery(accounts);
Python

Cet exemple représente le code d'une application qui utilise la version 1.7. x ou une version ultérieure du Kit SDK de chiffrement AWS pour Python . Pour un exemple complet, consultez le fichier discovery_kms_provider.py.

Pour créer un fournisseur de clé principale en mode strict pour le chiffrement, cet exemple utiliseStrictAwsKmsMasterKeyProvider. Pour créer un fournisseur de clé principale en mode découverte à des fins de déchiffrement, il l'utilise DiscoveryAwsKmsMasterKeyProvider avec un DiscoveryFilter qui limite le AWS Encryption SDK à AWS KMS keys dans la AWS partition et les comptes spécifiés.

# Create a master key provider in strict mode # Replace the example key ARN and alias ARNs with valid values from your Compte AWS. key_1 = "arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias" key_2 = "arn:aws:kms:us-west-2:444455556666:key/1a2b3c4d-5e6f-1a2b-3c4d-5e6f1a2b3c4d" aws_kms_master_key_provider = StrictAwsKmsMasterKeyProvider( key_ids=[key_1, key_2] ) # Create a master key provider in discovery mode for decrypting # Replace the example account IDs with valid values accounts = DiscoveryFilter( partition="aws", account_ids=["111122223333", "444455556666"] ) aws_kms_master_key_provider = DiscoveryAwsKmsMasterKeyProvider( discovery_filter=accounts )
AWS Encryption CLI

Cet exemple montre comment chiffrer et déchiffrer à l'aide de la CLI version 1.7 de AWS chiffrement. x ou version ultérieure. À partir de la version 1.7. x, le --wrapping-keys paramètre est obligatoire lors du chiffrement et du déchiffrement. Le --wrapping-keys paramètre prend en charge le mode strict et le mode découverte. Pour des exemples complets, voirExemples deAWSCLI de chiffrement.

Lors du chiffrement, cet exemple indique une clé d'encapsulation, qui est obligatoire. Lors du déchiffrement, il choisit explicitement le mode de découverte en utilisant l'discoveryattribut du --wrapping-keys paramètre avec une valeur de. true

Pour limiter les clés d'encapsulation qu'ils AWS Encryption SDK peuvent utiliser en mode découverte à celles en particulier Comptes AWS, cet exemple utilise les discovery-account attributs discovery-partition et du --wrapping-keys paramètre. Ces attributs facultatifs ne sont valides que lorsque l'discoveryattribut est défini surtrue. Vous devez utiliser les discovery-account attributs discovery-partition et ensemble ; aucun des deux n'est valide seul.

\\ Replace the example key ARN with a valid value $ keyAlias=arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias \\ Encrypt your plaintext data $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$keyAlias \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext \\ Replace the example account IDs with valid values $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys discovery=true \ discovery-partition=aws \ discovery-account=111122223333 \ discovery-account=444455556666 \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .