Définition de votre politique d'engagement - 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.

Définition de votre politique d'engagement

Un engagement clé garantit que vos données cryptées sont toujours déchiffrées dans le même texte brut. Pour fournir cette propriété de sécurité, à partir de la version 1.7. x,AWS Encryption SDK utilise de nouvelles suites d'algorithmes avec un engagement clé. Pour déterminer si vos données sont cryptées et décryptées avec un engagement clé, utilisez le paramètre de configuration de la politique d'engagement. Le chiffrement et le déchiffrement des données avec un engagement clé constituent une AWS Encryption SDKbonne pratique.

La définition d'une politique d'engagement est un élément important de la deuxième étape du processus de migration, à savoir la migration à partir de la dernière version 1. x versions desAWS Encryption SDK deux versions 2.0. x et versions ultérieures. Après avoir défini et modifié votre politique d'engagement, assurez-vous de tester minutieusement votre application avant de la déployer en production. Pour obtenir des conseils sur la migration, consultezComment migrer et déployerAWS Encryption SDK.

Le paramètre de politique d'engagement possède trois valeurs valides dans les versions 2.0. x et versions ultérieures. Dans la dernière version 1. x versions (à partir de la version 1.7. x), seulForbidEncryptAllowDecrypt est valide.

  • ForbidEncryptAllowDecrypt— IlsAWS Encryption SDK ne peuvent pas crypter avec un engagement clé. Il peut déchiffrer des textes chiffrés avec ou sans saisie de clé.

    Dans la dernière version 1. versions x, c'est la seule valeur valide. Cela garantit que vous ne chiffrez pas avec un engagement clé tant que vous n'êtes pas complètement prêt à le déchiffrer avec un engagement clé. La définition explicite de cette valeur empêche la modification automatique de votre politique d'engagementrequire-encrypt-require-decrypt lors de la mise à niveau vers les versions 2.0. x ou version ultérieure. Au lieu de cela, vous pouvez migrer votre politique d'engagement par étapes.

  • RequireEncryptAllowDecrypt— Il crypteAWS Encryption SDK toujours avec un engagement clé. Il peut déchiffrer des textes chiffrés avec ou sans saisie de clé. Cette valeur a été ajoutée dans la version dans la version dans la version dans la version x.

  • RequireEncryptRequireDecrypt— Il chiffre et déchiffreAWS Encryption SDK toujours avec un engagement clé. Cette valeur a été ajoutée dans la version dans la version dans la version dans la version x. Il s'agit de la valeur par défaut dans les versions 2.0. x et versions ultérieures.

Dans la dernière version 1. versions x, la seule valeur de politique d'engagement valide estForbidEncryptAllowDecrypt. Après la migration vers la version dans la version dans la version dans la la x ou version ultérieure, vous pouvez modifier votre politique d'engagement par étapes à mesure que vous êtes prêt. Ne mettez pas à jour votre politique d'engagementRequireEncryptRequireDecrypt tant que vous n'êtes pas certain qu'aucun message n'est crypté sans engagement de clé.

Ces exemples vous montrent comment définir votre politique d'engagement dans la dernière version 1. versions x et versions 2.0. x et versions ultérieures. La technique dépend de votre langage de programmation.

En savoir plus sur la migration

PourKit SDK de chiffrement AWS pour Java,Kit SDK de chiffrement AWS pour Python, et la CLI deAWS chiffrement, découvrez les modifications requises pour les fournisseurs de clés principales dansMise à jourAWS KMS des fournisseurs de clés principales.

PourKit SDK de chiffrement AWS pour C etKit SDK de chiffrement AWS pour JavaScript, découvrez une mise à jour facultative des porte-clés dansMise à jour en coursAWS KMSporte-clés.

Comment définir votre politique d'engagement

La technique que vous utilisez pour définir votre politique d'engagement diffère légèrement d'une implémentation linguistique à l'autre. Ces exemples montrent comment procéder. Avant de modifier votre politique d'engagement, passez en revue l'approche en plusieurs étapes dansComment migrer et déployer.

C

À partir de la version 1.7. x deKit SDK de chiffrement AWS pour C, vous utilisez laaws_cryptosdk_session_set_commitment_policy fonction pour définir la politique d'engagement pour vos sessions de chiffrement et de déchiffrement. La politique d'engagement que vous définissez s'applique à toutes les opérations de chiffrement et de déchiffrement appelées au cours de cette session.

Lesaws_cryptosdk_session_new_from_cmm fonctionsaws_cryptosdk_session_new_from_keyring et sont obsolètes dans la version 1.7. x et supprimé dans la version 2.0. x. Ces fonctions sont remplacées paraws_cryptosdk_session_new_from_keyring_2 desaws_cryptosdk_session_new_from_cmm_2 fonctions qui renvoient une session.

Lorsque vous utilisez leaws_cryptosdk_session_new_from_keyring_2 etaws_cryptosdk_session_new_from_cmm_2 dans la dernière version 1. versions x, vous devez appeler laaws_cryptosdk_session_set_commitment_policy fonction avec la valeur de la politique d'COMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPTengagement. Dans les versions dans les versions dans la 2.0 x et versions ultérieures, l'appel de cette fonction est facultatif et prend toutes les valeurs valides. La politique d'engagement par défaut pour les versions 2.0. x et les versions ultérieures sontCOMMITMENT_POLICY_REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

Pour obtenir un exemple complet, veuillez consulter string.cpp.

/* Load error strings for debugging */ aws_cryptosdk_load_error_strings(); /* Create an AWS KMS keyring */ const char * key_arn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; struct aws_cryptosdk_keyring *kms_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(key_arn); /* Create an encrypt session with a CommitmentPolicy setting */ struct aws_cryptosdk_session *encrypt_session = aws_cryptosdk_session_new_from_keyring_2( alloc, AWS_CRYPTOSDK_ENCRYPT, kms_keyring); aws_cryptosdk_keyring_release(kms_keyring); aws_cryptosdk_session_set_commitment_policy(encrypt_session, COMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT); ... /* Encrypt your data */ size_t plaintext_consumed_output; aws_cryptosdk_session_process(encrypt_session, ciphertext_output, ciphertext_buf_sz_output, ciphertext_len_output, plaintext_input, plaintext_len_input, &plaintext_consumed_output) ... /* Create a decrypt session with a CommitmentPolicy setting */ struct aws_cryptosdk_keyring *kms_keyring = Aws::Cryptosdk::KmsKeyring::Builder().Build(key_arn); struct aws_cryptosdk_session *decrypt_session = *aws_cryptosdk_session_new_from_keyring_2( alloc, AWS_CRYPTOSDK_DECRYPT, kms_keyring); aws_cryptosdk_keyring_release(kms_keyring); aws_cryptosdk_session_set_commitment_policy(decrypt_session, COMMITMENT_POLICY_FORBID_ENCRYPT_ALLOW_DECRYPT); /* Decrypt your ciphertext */ size_t ciphertext_consumed_output; aws_cryptosdk_session_process(decrypt_session, plaintext_output, plaintext_buf_sz_output, plaintext_len_output, ciphertext_input, ciphertext_len_input, &ciphertext_consumed_output)
C# / .NET

Larequire-encrypt-require-decrypt valeur est la politique d'engagement par défaut dans toutes les versions deAWS Encryption SDK pour .NET. Vous pouvez l'lorsqu'il n'utilisez pas l'lorsqu'il n'utilisez pas l'lorsqu'il n'utilisez pas l'lorsqu'il n'utilisez pas l'lorsqu'il n'utilisez pas l' Toutefois, si vous utilisez leAWS Encryption SDK pour .NET pour déchiffrer un texte chiffré qui a été chiffré par une implémentation dans un autre langage de l'engagementAWS Encryption SDK sans clé, vous devez remplacer la valeur de la politique d'engagement parREQUIRE_ENCRYPT_ALLOW_DECRYPT ouFORBID_ENCRYPT_ALLOW_DECRYPT. Dans le cas contraire, les tentatives de déchiffrement du texte chiffré échoueront.

Dans leAWS Encryption SDK pour .NET, vous définissez la politique d'engagement sur une instance deAWS Encryption SDK. Instanciez unAwsEncryptionSdkConfig objet avec unCommitmentPolicy paramètre et utilisez l'objet de configuration pour créer l'AWS Encryption SDKinstance. Appelez ensuite lesDecrypt() méthodesEncrypt() et de l'AWS Encryption SDKinstance configurée.

Cet exemple définit la politique d'engagement àrequire-encrypt-allow-decrypt.

// Instantiate the material providers var materialProviders = AwsCryptographicMaterialProvidersFactory.CreateDefaultAwsCryptographicMaterialProviders(); // Configure the commitment policy on the AWS Encryption SDK instance var config = new AwsEncryptionSdkConfig { CommitmentPolicy = CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT }; var encryptionSdk = AwsEncryptionSdkFactory.CreateAwsEncryptionSdk(config); string keyArn = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; var encryptionContext = new Dictionary<string, string>() { {"purpose", "test"}encryptionSdk }; var createKeyringInput = new CreateAwsKmsKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = keyArn }; var keyring = materialProviders.CreateAwsKmsKeyring(createKeyringInput); // Encrypt your plaintext data var encryptInput = new EncryptInput { Plaintext = plaintext, Keyring = keyring, EncryptionContext = encryptionContext }; var encryptOutput = encryptionSdk.Encrypt(encryptInput); // Decrypt your ciphertext var decryptInput = new DecryptInput { Ciphertext = ciphertext, Keyring = keyring }; var decryptOutput = encryptionSdk.Decrypt(decryptInput);
AWS Encryption CLI

Pour définir une politique d'engagement dans la CLI deAWS chiffrement, utilisez le--commitment-policy paramètre. Ce paramètre a été introduit dans la version 1.8. x.

Dans la dernière version 1. version x, lorsque vous utilisez le--wrapping-keys paramètre dans une--decrypt commande--encrypt ou, un--commitment-policy paramètre avec laforbid-encrypt-allow-decrypt valeur est requis. Dans le cas contraire, le--commitment-policy paramètre n'est pas valide.

Dans les versions 2.1. x et versions ultérieures, le--commitment-policy paramètre est facultatif et prend par défaut larequire-encrypt-require-decrypt valeur, qui ne chiffrera ni ne déchiffrera aucun texte chiffré sans saisie de clé. Cependant, nous vous recommandons de définir la politique d'engagement à l'aide de la maintenance et du dépannage.

Cet exemple définit la politique d'engagement. Il utilise également le--wrapping-keys paramètre qui remplace le--master-keys paramètre à partir de la version 1.8. x. Pour plus de détails, consultez Mise à jourAWS KMS des fournisseurs de clés principales. Pour des exemples complets, reportez-vous à la sectionExemples deAWSCLI de chiffrement.

\\ To run this example, replace the fictitious key ARN with a valid value. $ keyArn=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab \\ Encrypt your plaintext data - no change to algorithm suite used $ aws-encryption-cli --encrypt \ --input hello.txt \ --wrapping-keys key=$keyArn \ --commitment-policy forbid-encrypt-allow-decrypt \ --metadata-output ~/metadata \ --encryption-context purpose=test \ --output . \\ Decrypt your ciphertext - supports key commitment on 1.7 and later $ aws-encryption-cli --decrypt \ --input hello.txt.encrypted \ --wrapping-keys key=$keyArn \ --commitment-policy forbid-encrypt-allow-decrypt \ --encryption-context purpose=test \ --metadata-output ~/metadata \ --output .
Java

À partir de la version 1.7. x duKit SDK de chiffrement AWS pour Java, vous définissez la politique d'engagement sur votre instance deAwsCrypto, l'objet qui représente leAWS Encryption SDK client. Ce paramètre de politique d'engagement s'applique à toutes les opérations de chiffrement et de déchiffrement appelées sur ce client.

LeAwsCrypto() constructeur est obsolète dans la dernière version 1. les versions x duKit SDK de chiffrement AWS pour Java et sont supprimées dans la version 2.0. x. Elle est remplacée par une nouvelleBuilder classe, une nouvelleBuilder.withCommitmentPolicy() méthode et le typeCommitmentPolicy énuméré.

Dans la dernière version 1. versions x, laBuilder classe nécessite laBuilder.withCommitmentPolicy() méthode et l'CommitmentPolicy.ForbidEncryptAllowDecryptargument. À partir de la version dans la version dans la version x, laBuilder.withCommitmentPolicy() méthode est facultative ; la valeur par défaut estCommitmentPolicy.RequireEncryptRequireDecrypt.

Pour un exemple complet, consultez SetCommitmentPolicyExample.java.

// Instantiate the client final AwsCrypto crypto = AwsCrypto.builder() .withCommitmentPolicy(CommitmentPolicy.ForbidEncryptAllowDecrypt) .build(); // Create a master key provider in strict mode String awsKmsKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; KmsMasterKeyProvider masterKeyProvider = KmsMasterKeyProvider.builder() .buildStrict(awsKmsKey); // Encrypt your plaintext data CryptoResult<byte[], KmsMasterKey> encryptResult = crypto.encryptData( masterKeyProvider, sourcePlaintext, encryptionContext); byte[] ciphertext = encryptResult.getResult(); // Decrypt your ciphertext CryptoResult<byte[], KmsMasterKey> decryptResult = crypto.decryptData( masterKeyProvider, ciphertext); byte[] decrypted = decryptResult.getResult();
JavaScript

À partir de la version 1.7. x deKit SDK de chiffrement AWS pour JavaScript, vous pouvez définir la politique d'engagement lorsque vous appelez la nouvellebuildClient fonction qui instancie unAWS Encryption SDK client. LabuildClient fonction prend une valeur énumérée qui représente votre politique d'engagement. Il renvoie des mises à jourencrypt etdecrypt des fonctions qui appliquent votre politique d'engagement lorsque vous cryptez et déchiffrez.

Dans la dernière version 1. versions x, labuildClient fonction nécessite l'CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPTargument. À partir de la version dans la version dans la version x, l'argument de la politique d'engagement est facultatif et la valeur par défaut estCommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

Le code pour Node.js et le navigateur sont identiques à cette fin, sauf que le navigateur a besoin d'une instruction pour définir les informations d'identification.

L'exemple suivant chiffre des données à l'aide d'unAWS KMS jeu de clés. La nouvellebuildClient fonction définit la politique d'engagement àFORBID_ENCRYPT_ALLOW_DECRYPT la valeur par défaut la plus récente de 1. 2 versions. La mise à niveauencrypt etdecrypt les fonctionsbuildClient renvoyées appliquent la politique d'engagement que vous avez définie.

import { buildClient } from '@aws-crypto/client-node' const { encrypt, decrypt } = buildClient(CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT) // Create an AWS KMS keyring const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:alias/ExampleAlias' const keyIds = ['arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab'] const keyring = new KmsKeyringNode({ generatorKeyId, keyIds }) // Encrypt your plaintext data const { ciphertext } = await encrypt(keyring, plaintext, { encryptionContext: context }) // Decrypt your ciphertext const { decrypted, messageHeader } = await decrypt(keyring, ciphertext)
Python

À partir de la version 1.7. x duKit SDK de chiffrement AWS pour Python, vous définissez la politique d'engagement sur votre instance deEncryptionSDKClient, un nouvel objet qui représente leAWS Encryption SDK client. La politique d'engagement que vous définissez s'applique à tousencrypt lesdecrypt appels utilisant cette instance du client.

Dans la dernière version 1. versions x, leEncryptionSDKClient constructeur a besoin de la valeurCommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT énumérée. À partir de la version dans la version dans la version x, l'argument de la politique d'engagement est facultatif et la valeur par défaut estCommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT.

Cet exemple utilise le nouveauEncryptionSDKClient constructeur et définit la politique d'engagement sur le 1.7. x valeur par défaut. Le constructeur instancie un client qui représente leAWS Encryption SDK. Lorsque vous appelez lesstream méthodesencryptdecrypt, ou sur ce client, elles appliquent la politique d'engagement que vous avez définie. Cet exemple utilise également le nouveau constructeur de laStrictAwsKmsMasterKeyProvider classe, qui spécifieAWS KMS keys lors du chiffrement et du déchiffrement.

Pour un exemple complet, consultez set_commitment.py.

# Instantiate the client client = aws_encryption_sdk.EncryptionSDKClient(commitment_policy=CommitmentPolicy.FORBID_ENCRYPT_ALLOW_DECRYPT) // Create a master key provider in strict mode aws_kms_key = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab" aws_kms_strict_master_key_provider = StrictAwsKmsMasterKeyProvider( key_ids=[aws_kms_key] ) # Encrypt your plaintext data ciphertext, encrypt_header = client.encrypt( source=source_plaintext, encryption_context=encryption_context, master_key_provider=aws_kms_strict_master_key_provider ) # Decrypt your ciphertext decrypted, decrypt_header = client.decrypt( source=ciphertext, master_key_provider=aws_kms_strict_master_key_provider )