Gunakan ReEncrypt dengan AWS SDK atau CLI - AWS SDKContoh Kode

Ada lebih banyak AWS SDK contoh yang tersedia di GitHub repo SDKContoh AWS Dokumen.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Gunakan ReEncrypt dengan AWS SDK atau CLI

Contoh kode berikut menunjukkan cara menggunakanReEncrypt.

CLI
AWS CLI

Contoh 1: Untuk mengenkripsi ulang pesan terenkripsi di bawah kunci simetris yang berbeda KMS (Linux dan macOS).

Contoh re-encrypt perintah berikut menunjukkan cara yang disarankan untuk mengenkripsi ulang data dengan file. AWS CLI

Berikan ciphertext dalam file.Dalam nilai --ciphertext-blob parameter, gunakan fileb:// awalan, yang memberitahu CLI untuk membaca data dari file biner. Jika file tidak ada di direktori saat ini, ketik path lengkap ke file. Untuk informasi selengkapnya tentang membaca nilai AWS CLI parameter dari file, lihat Memuat AWS CLI parameter dari file < https://docs.aws.amazon.com/cli/ latest/userguide/cli - usage-parameters-file .html> di Panduan Pengguna Antarmuka Baris AWS Perintah dan Praktik Terbaik untuk Parameter File Lokal< https://aws.amazon.com/blogs/ pengembang/ best-practices-for-local -file-parameters/> di Blog Alat Baris AWS Perintah. Tentukan KMS kunci sumber, yang mendekripsi ciphertext. Parameter tidak diperlukan saat mendekripsi dengan enkripsi simetris --source-key-id KMSkunci. AWS KMSbisa mendapatkan KMS kunci yang digunakan untuk mengenkripsi data dari metadata di gumpalan ciphertext. Tetapi selalu merupakan praktik terbaik untuk menentukan KMS kunci yang Anda gunakan. Praktik ini memastikan bahwa Anda menggunakan KMS kunci yang Anda inginkan, dan mencegah Anda mendekripsi ciphertext secara tidak sengaja menggunakan kunci yang tidak Anda percayai. Tentukan KMS KMS kunci tujuan, yang mengenkripsi ulang data.Parameter selalu diperlukan. --destination-key-id Contoh ini menggunakan kunciARN, tetapi Anda dapat menggunakan pengidentifikasi kunci yang valid.Minta output plaintext sebagai nilai --query teks.Parameter memberitahu CLI untuk mendapatkan hanya nilai bidang dari output. Plaintext --outputParameter mengembalikan output sebagai text.base64-decode plaintext dan menyimpannya dalam file.Contoh berikut pipa (|) nilai Plaintext parameter ke utilitas Base64, yang menerjemahkan itu. Kemudian, itu mengalihkan (>) output yang diterjemahkan ke file. ExamplePlaintext

Sebelum menjalankan perintah ini, ganti kunci contoh IDs dengan pengidentifikasi kunci yang valid dari AWS akun Anda.

aws kms re-encrypt \ --ciphertext-blob fileb://ExampleEncryptedFile \ --source-key-id 1234abcd-12ab-34cd-56ef-1234567890ab \ --destination-key-id 0987dcba-09fe-87dc-65ba-ab0987654321 \ --query CiphertextBlob \ --output text | base64 --decode > ExampleReEncryptedFile

Perintah ini tidak menghasilkan output. Output dari re-encrypt perintah adalah base64-decoded dan disimpan dalam file.

Untuk informasi selengkapnya, lihat ReEncrypt < https://docs.aws.amazon.com/kms/ latest/APIReference/API _ ReEncrypt .html di APIReferensi Layanan Manajemen AWS Kunci.

Contoh 2: Untuk mengenkripsi ulang pesan terenkripsi di bawah KMS tombol simetris yang berbeda (prompt perintah Windows).

Contoh re-encrypt perintah berikut adalah sama dengan yang sebelumnya kecuali bahwa ia menggunakan certutil utilitas untuk Base64-decode data plaintext. Prosedur ini membutuhkan dua perintah, seperti yang ditunjukkan pada contoh berikut.

Sebelum menjalankan perintah ini, ganti ID kunci contoh dengan ID kunci yang valid dari AWS akun Anda.

aws kms re-encrypt ^ --ciphertext-blob fileb://ExampleEncryptedFile ^ --source-key-id 1234abcd-12ab-34cd-56ef-1234567890ab ^ --destination-key-id 0987dcba-09fe-87dc-65ba-ab0987654321 ^ --query CiphertextBlob ^ --output text > ExampleReEncryptedFile.base64

Kemudian gunakan certutil utilitas

certutil -decode ExamplePlaintextFile.base64 ExamplePlaintextFile

Output:

Input Length = 18 Output Length = 12 CertUtil: -decode command completed successfully.

Untuk informasi selengkapnya, lihat ReEncrypt < https://docs.aws.amazon.com/kms/ latest/APIReference/API _ ReEncrypt .html di APIReferensi Layanan Manajemen AWS Kunci.

  • Untuk API detailnya, lihat ReEncryptdi Referensi AWS CLI Perintah.

Python
SDKuntuk Python (Boto3)
catatan

Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara pengaturan dan menjalankannya di Repositori Contoh Kode 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.")
  • Untuk API detailnya, lihat ReEncrypt AWSSDKReferensi Python (Boto3). API

Ruby
SDKuntuk Ruby
catatan

Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara pengaturan dan menjalankannya di Repositori Contoh Kode 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*')
  • Untuk API detailnya, lihat ReEncryptdi AWS SDK for Ruby APIReferensi.

Rust
SDKuntuk Rust
catatan

Ada lebih banyak tentang GitHub. Temukan contoh lengkapnya dan pelajari cara pengaturan dan menjalankannya di Repositori Contoh Kode 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(()) }
  • Untuk API detailnya, lihat ReEncrypt AWSSDKuntuk API referensi Rust.