Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Utilizzo ReEncrypt con un AWS SDK o una CLI
Gli esempi di codice seguenti mostrano come utilizzare ReEncrypt.
- CLI
-
- AWS CLI
-
Esempio 1: come ripetere la crittografia di un messaggio crittografato con una chiave KMS simmetrica diversa (Linux e macOS).
L'esempio di
re-encryptcomando seguente mostra il metodo consigliato per ricrittografare i dati con la CLI. AWSFornisci il testo criptato in un file. Nel valore del parametro
--ciphertext-blob, utilizza il prefissofileb://per indicare alla CLI di leggere i dati da un file binario. Se il file non è presente nella directory corrente, digita il percorso completo del file. Per ulteriori informazioni sulla lettura dei valori dei parametri AWS CLI da un file, consulta Caricamento dei parametri AWS CLI da un file nella Guida per l'utente dell'interfaccia a riga di AWS comando e Best Practices for Local File Parametersnel Command Line Tool Blog .Specificare la AWS chiave KMS di origine, che decrittografa il CipherText. Il parametro non è richiesto quando si decrittografa con chiavi KMS di crittografia simmetrica. --source-key-idAWS KMS può ottenere la chiave KMS utilizzata per crittografare i dati dai metadati nel blob di testo cifrato. Tuttavia è sempre consigliabile specificare la chiave KMS che stai utilizzando. Questa procedura garantisce di utilizzare la chiave KMS desiderata e impedisce di decrittografare inavvertitamente un testo criptato utilizzando una chiave KMS non attendibile. Specifica la chiave KMS di destinazione, che ripete la crittografia dei dati. Il parametro--destination-key-idè sempre obbligatorio. Questo esempio utilizza un ARN di chiave, ma puoi utilizzare qualsiasi identificatore di chiave valido. Richiedi l’output in testo normale come valore di testo. Il parametro--queryindica alla CLI di recuperare solo il valore del campoPlaintextdall’output. Il parametro--outputrestituisce l’output come testo. Procedi a decrittografare in formato Base64 il testo normale e a salvarlo in un file. Nell’esempio seguente il valore del parametroPlaintextviene inviato (|) all’utilità Base64, che lo decodifica. Quindi, reindirizza (>) l’output decodificato al fileExamplePlaintext.Prima di eseguire questo comando, sostituisci la chiave di esempio IDs con identificatori di chiave validi del tuo account. 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>ExampleReEncryptedFileQuesto comando non produce alcun output. L’output del comando
re-encryptviene decrittografato in formato Base64 e salvato in un file.Per ulteriori informazioni, consulta ReEncryptla sezione AWS Key Management Service API Reference.
Esempio 2: come crittografare di nuovo un messaggio crittografato con una chiave KMS simmetrica diversa (prompt dei comandi di Windows).
Il seguente comando
re-encryptdi esempio è lo stesso del precedente, tranne per il fatto che utilizza l’utilitàcertutilper decrittografare in formato Base64 i dati in testo normale. Questa procedura richiede due comandi, come illustrato negli esempi seguenti.Prima di eseguire questo comando, sostituisci l'ID della chiave di esempio con un ID chiave valido del tuo AWS account.
aws kms re-encrypt^--ciphertext-blobfileb://ExampleEncryptedFile^--source-key-id1234abcd-12ab-34cd-56ef-1234567890ab^--destination-key-id0987dcba-09fe-87dc-65ba-ab0987654321^--queryCiphertextBlob^--outputtext>ExampleReEncryptedFile.base64Utilizza quindi l’utilità
certutilcertutil -decode ExamplePlaintextFile.base64 ExamplePlaintextFileOutput:
Input Length = 18 Output Length = 12 CertUtil: -decode command completed successfully.Per ulteriori informazioni, consulta la ReEncryptsezione AWS Key Management Service API Reference.
-
Per i dettagli sull'API, consulta ReEncrypt AWS CLI
Command Reference.
-
- Python
-
- SDK per Python (Boto3)
-
Nota
C'è altro su GitHub. Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice 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.")-
Per i dettagli sull'API, consulta ReEncrypt AWSSDK for Python (Boto3) API Reference.
-
- Ruby
-
- SDK per Ruby
-
Nota
C'è di più su. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice 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*')-
Per i dettagli sull'API, ReEncryptconsulta AWS SDK per Ruby API Reference.
-
- Rust
-
- SDK per Rust
-
Nota
C'è altro da fare. GitHub Trova l'esempio completo e scopri di più sulla configurazione e l'esecuzione nel Repository di esempi di codice 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(()) }-
Per i dettagli sulle API, consulta la ReEncrypt
guida di riferimento all'API AWS SDK for Rust.
-
Per un elenco completo delle guide per sviluppatori AWS SDK e degli esempi di codice, consulta. Utilizzo di questo servizio con un AWS SDK Questo argomento include anche informazioni su come iniziare e dettagli sulle versioni precedenti dell'SDK.