D’autres exemples de kits AWS SDK sont disponibles dans le référentiel GitHub AWS Doc SDK Examples
Utilisation de ReEncrypt avec un kit AWS SDK ou une interface de ligne de commande
Les exemples de code suivants illustrent comment utiliser ReEncrypt.
- CLI
-
- AWS CLI
-
Exemple 1 : pour rechiffrer un message chiffré sous une autre clé KMS symétrique (Linux et macOS).
L’exemple de commande
re-encryptsuivant illustre la méthode recommandée pour rechiffrer les données à l’aide de l’interface de ligne de commande (CLI) AWS.Fournissez le texte chiffré dans un fichier. Dans la valeur du paramètre
--ciphertext-blob, utilisez le préfixefileb://, qui indique à l’interface de ligne de commande (CLI) de lire les données d’un fichier binaire. Si le fichier ne se trouve pas dans le répertoire actuel, saisissez le chemin complet du fichier. Pour plus d’informations sur la lecture des valeurs des paramètres de l’interface de ligne de commande (CLI) AWS à partir d’un fichier, consultez Chargement des paramètres d’AWS CLI à partir d’un fichier dans le Guide de l’utilisateur de l’interface de ligne de commande AWS et Best Practices for Local File Parametersdans le Blog de l’outil de ligne de commande AWS. Spécifiez la clé KMS source, qui déchiffre le texte chiffré. Le paramètre --source-key-idn’est pas obligatoire lors du déchiffrement à l’aide de clés KMS de chiffrement symétriques. AWS KMS peut obtenir la clé KMS qui a été utilisée pour chiffrer les données à partir des métadonnées du blob de texte chiffré. Toutefois, la spécification de la clé KMS que vous utilisez est une bonne pratique. Cette pratique garantit que vous utilisez la clé KMS que vous avez l’intention d’utiliser et vous empêche de déchiffrer par inadvertance un texte chiffré à l’aide d’une clé KMS non fiable. Spécifiez la clé KMS de destination, qui rechiffre les données. Le paramètre--destination-key-idest toujours obligatoire. Cet exemple utilise un ARN de clé, mais vous pouvez utiliser n’importe quel identifiant de clé valide. Demandez la sortie en texte brut sous forme de valeur de texte. Le paramètre--queryindique à l’interface de ligne de commande (CLI) de n’obtenir que la valeur du champPlaintextà partir de la sortie. Le paramètre--outputrenvoie la sortie sous forme de texte. Base64 décode le texte brut et l’enregistre dans un fichier. L’exemple suivant conduit (|) la valeur du paramètrePlaintextà l’utilitaire Base64, qui la décode. Ensuite, il redirige (>) la sortie décodée vers le fichierExamplePlaintext.Avant d’exécuter cette commande, remplacez l’exemple d’ID de clé par des ID de clé valides provenant de votre compte AWS.
aws kms re-encrypt \ --ciphertext-blobfileb://ExampleEncryptedFile\ --source-key-id1234abcd-12ab-34cd-56ef-1234567890ab\ --destination-key-id0987dcba-09fe-87dc-65ba-ab0987654321\ --queryCiphertextBlob\ --outputtext|base64--decode>ExampleReEncryptedFileCette commande ne produit aucun résultat. La sortie de la commande
re-encryptest décodée en base64 et enregistrée dans un fichier.Pour plus d’informations, consultez ReEncrypt dans la Référence des API d’AWS Key Management Service.
Exemple 2 : pour rechiffrer un message chiffré sous une autre clé KMS symétrique (invite de commande Windows).
L’exemple de commande
re-encryptsuivant est identique au précédent, sauf qu’il utilise l’utilitairecertutilpour décoder les données en texte brut en Base64. Cette procédure requiert deux commandes, comme indiqué dans les exemples suivants.Avant d’exécuter cette commande, remplacez l’exemple d’ID de clé par un ID de clé valide provenant de votre compte AWS.
aws kms re-encrypt^--ciphertext-blobfileb://ExampleEncryptedFile^--source-key-id1234abcd-12ab-34cd-56ef-1234567890ab^--destination-key-id0987dcba-09fe-87dc-65ba-ab0987654321^--queryCiphertextBlob^--outputtext>ExampleReEncryptedFile.base64Ensuite, utilisez l’utilitaire
certutilcertutil -decode ExamplePlaintextFile.base64 ExamplePlaintextFileSortie :
Input Length = 18 Output Length = 12 CertUtil: -decode command completed successfully.Pour plus d’informations, consultez ReEncrypt dans la Référence des API d’AWS Key Management Service.
-
Pour plus de détails sur l’API, consultez ReEncrypt
dans la Référence des commandes de l’AWS CLI.
-
- Python
-
- Kit SDK pour Python (Boto3)
-
Note
Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS
. class KeyEncrypt: def __init__(self, kms_client): self.kms_client = kms_client @classmethod def from_client(cls) -> "KeyEncrypt": """ Creates a KeyEncrypt instance with a default KMS client. :return: An instance of KeyEncrypt initialized with the default KMS client. """ kms_client = boto3.client("kms") return cls(kms_client) def re_encrypt(self, source_key_id, cipher_text): """ Takes ciphertext previously encrypted with one key and reencrypt it by using another key. :param source_key_id: The ARN or ID of the original key used to encrypt the ciphertext. :param cipher_text: The encrypted ciphertext. :return: The ciphertext encrypted by the second key. """ destination_key_id = input( f"Your ciphertext is currently encrypted with key {source_key_id}. " f"Enter another key ID or ARN to reencrypt it: " ) if destination_key_id != "": try: cipher_text = self.kms_client.re_encrypt( SourceKeyId=source_key_id, DestinationKeyId=destination_key_id, CiphertextBlob=cipher_text, )["CiphertextBlob"] except ClientError as err: logger.error( "Couldn't reencrypt your ciphertext. Here's why: %s", err.response["Error"]["Message"], ) else: print(f"Reencrypted your ciphertext as: {cipher_text}") return cipher_text else: print("Skipping reencryption demo.")-
Pour plus de détails sur l’API, consultez ReEncrypt dans la Référence des API du kit AWS SDK for Python (Boto3).
-
- Ruby
-
- Kit SDK pour Ruby
-
Note
Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS
. require 'aws-sdk-kms' # v2: require 'aws-sdk' # Human-readable version of the ciphertext of the data to reencrypt. blob = '01020200785d68faeec386af1057904926253051eb2919d3c16078badf65b808b26dd057c101747cadf3593596e093d4ffbf22434a6d00000068306606092a864886f70d010706a0593057020100305206092a864886f70d010701301e060960864801650304012e3011040c9d629e573683972cdb7d94b30201108025b20b060591b02ca0deb0fbdfc2f86c8bfcb265947739851ad56f3adce91eba87c59691a9a1' sourceCiphertextBlob = [blob].pack('H*') # Replace the fictitious key ARN with a valid key ID destinationKeyId = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321' client = Aws::KMS::Client.new(region: 'us-west-2') resp = client.re_encrypt({ ciphertext_blob: sourceCiphertextBlob, destination_key_id: destinationKeyId }) # Display a readable version of the resulting re-encrypted blob. puts 'Blob:' puts resp.ciphertext_blob.unpack('H*')-
Pour plus de détails sur l’API, consultez ReEncrypt dans la Référence des API du kit AWS SDK pour Ruby.
-
- Rust
-
- SDK pour Rust
-
Note
Il y en a plus sur GitHub. Trouvez l’exemple complet et découvrez comment le configurer et l’exécuter dans le référentiel d’exemples de code AWS
. async fn reencrypt_string( verbose: bool, client: &Client, input_file: &str, output_file: &str, first_key: &str, new_key: &str, ) -> Result<(), Error> { // Get blob from input file // Open input text file and get contents as a string // input is a base-64 encoded string, so decode it: let data = fs::read_to_string(input_file) .map(|input_file| base64::decode(input_file).expect("invalid base 64")) .map(Blob::new); let resp = client .re_encrypt() .ciphertext_blob(data.unwrap()) .source_key_id(first_key) .destination_key_id(new_key) .send() .await?; // Did we get an encrypted blob? let blob = resp.ciphertext_blob.expect("Could not get encrypted text"); let bytes = blob.as_ref(); let s = base64::encode(bytes); let o = &output_file; let mut ofile = File::create(o).expect("unable to create file"); ofile.write_all(s.as_bytes()).expect("unable to write"); if verbose { println!("Wrote the following to {}:", output_file); println!("{}", s); } else { println!("Wrote base64-encoded output to {}", output_file); } Ok(()) }-
Pour plus de détails sur l’API, consultez ReEncrypt
dans la Référence des API du kit AWS SDK pour Rust.
-