Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS Encryption SDK for Python
Topik ini menjelaskan cara menginstal dan menggunakan AWS Encryption SDK for Python. Untuk detail tentang pemrograman dengan AWS Encryption SDK for Python, lihat aws-encryption-sdk-python
Prasyarat
Sebelum Anda menginstal AWS Encryption SDK for Python, pastikan Anda memiliki prasyarat berikut.
- Versi Python yang didukung
-
Python 3.8 atau yang lebih baru diperlukan oleh AWS Encryption SDK for Python versi 3.2.0 dan yang lebih baru.
catatan
Perpustakaan Penyedia Materi AWS Kriptografi
(MPL) adalah dependensi opsional untuk yang AWS Encryption SDK for Python diperkenalkan di versi 4. x. Jika Anda berniat untuk menginstalMPL, Anda harus menggunakan Python 3.11 atau yang lebih baru. Versi sebelumnya dari AWS Encryption SDK dukungan Python 2.7 dan Python 3.4 dan yang lebih baru, tetapi kami menyarankan Anda menggunakan versi terbaru dari versi. AWS Encryption SDK
Untuk mengunduh Python, lihat Unduh Python
. - Alat instalasi pip untuk Python
-
pip
termasuk dalam Python 3.6 dan versi yang lebih baru, meskipun Anda mungkin ingin memutakhirkannya. Untuk informasi selengkapnya tentang memutakhirkan atau menginstalpip
, lihat Instalasidi pip
dokumentasi.
Penginstalan
Instal versi terbaru dari file AWS Encryption SDK for Python.
catatan
Anda dapat memperbarui dengan aman dari versi 2.0. x dan yang lebih baru ke versi terbaru AWS Encryption SDK tanpa kode atau perubahan data. Namun, fitur keamanan baru diperkenalkan di versi 2.0. x tidak kompatibel ke belakang. Untuk memperbarui dari versi lebih awal dari 1.7. x ke versi 2.0. x dan yang lebih baru, Anda harus terlebih dahulu memperbarui ke yang terbaru 1. x versi AWS Encryption SDK. Untuk detailnya, lihat MigrasiAWS Encryption SDK.
Gunakan pip
untuk menginstal AWS Encryption SDK for Python, seperti yang ditunjukkan dalam contoh berikut.
- Pasang versi terbaru
-
pip install "aws-encryption-sdk[MPL]"
[MPL]
Akhiran menginstal Perpustakaan Penyedia Materi AWS Kriptografi(). MPL MPLBerisi konstruksi untuk mengenkripsi dan mendekripsi data Anda. MPLIni adalah ketergantungan opsional untuk yang AWS Encryption SDK for Python diperkenalkan di versi 4. x. Kami sangat merekomendasikan menginstalMPL. Namun, jika Anda tidak berniat menggunakanMPL, Anda dapat menghilangkan [MPL]
sufiks.
Untuk detail selengkapnya tentang penggunaan pip untuk menginstal dan memutakhirkan paket, lihat Menginstal Paket
AWS Encryption SDK for Python Membutuhkan perpustakaan kriptograficryptography
perpustakaan pip
secara otomatis di Windows. pip
8.1 dan yang lebih baru secara otomatis menginstal dan membangun cryptography
di Linux. Jika Anda menggunakan versi sebelumnya pip
dan lingkungan Linux Anda tidak memiliki alat yang diperlukan untuk membangun cryptography
perpustakaan, Anda perlu menginstalnya. Untuk informasi selengkapnya, lihat Membangun Kriptografi di Linux
Versi 1.10.0 dan 2.5.0 dari AWS Encryption SDK for Python pin ketergantungan kriptografi
Untuk versi pengembangan terbaru AWS Encryption SDK for Python, buka aws-encryption-sdk-python
Setelah Anda menginstal AWS Encryption SDK for Python, mulailah dengan melihat kode contoh Python dalam panduan ini.
Versi 4.x dari AWS Encryption SDK for Python
Bagian ini menjelaskan fitur baru yang diperkenalkan oleh versi 4. x dari AWS Encryption SDK for Python saat digunakan dengan ketergantungan Library (MPL) Penyedia Materi Kriptografi
Bila Anda menggunakan versi 4. x dari AWS Encryption SDK for Python denganMPL, Anda dapat menggunakan keyrings untuk melakukan enkripsi amplop. AWS Encryption SDK Ini menyediakan gantungan kunci yang kompatibel dengan penyedia kunci utama yang Anda gunakan di versi sebelumnya. Untuk informasi selengkapnya, lihat Kompatibilitas keyring. Untuk contoh tentang migrasi dari penyedia kunci utama ke keyrings, lihat Contoh Migrasiaws-encryption-sdk-python
repositori pada. GitHub
Contoh dalam topik ini membuat instance AWS Encryption SDK klien dengan kebijakan komitmen default,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Untuk informasi selengkapnya, lihat Menetapkan kebijakan komitmen Anda.
AWS KMS gantungan kunci di AWS Encryption SDK for Python
AWS KMS Gantungan kunci dasar dalam AWS Encryption SDK for Python mengambil hanya satu KMS kunci. Mereka juga membutuhkan AWS KMS klien, yang memberi Anda kesempatan untuk mengkonfigurasi klien untuk KMS kunci. Wilayah AWS
Untuk membuat AWS KMS keyring dengan satu atau lebih tombol pembungkus, gunakan multi-keyring. Ini AWS Encryption SDK for Python memiliki multi-keyring khusus yang mengambil satu atau lebih AWS KMS tombol, dan multi-keyring standar yang mengambil satu atau lebih gantungan kunci dari jenis apa pun yang didukung. Beberapa programmer lebih suka menggunakan metode multi-keyring untuk membuat semua keyrings mereka, dan mendukung strategi itu AWS Encryption SDK for Python .
AWS Encryption SDK for Python Ini menyediakan keyring kunci tunggal dasar dan multi-keyrings untuk semua kasus penggunaan umum, termasuk kunci Multi-wilayah. AWS KMS
Misalnya, untuk membuat AWS KMS keyring dengan satu AWS KMS tombol, Anda dapat menggunakan create_aws_kms_keyring()
metode ini.
# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
) # Create a boto3 client for AWS KMS kms_client = boto3.client('kms', region_name="us-west-2") # Optional: Create an encryption context encryption_context: Dict[str, str] = { "encryption": "context", "is not": "secret", "but adds": "useful metadata", "that can help you": "be confident that", "the data you are handling": "is what you think it is", } # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput( kms_key_id=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
, kms_client=kms_client ) kms_keyring: IKeyring = mat_prov.create_aws_kms_keyring( input=keyring_input )
Untuk membuat keyring dengan satu atau lebih AWS KMS tombol, gunakan create_aws_kms_multi_keyring()
metode ini. Contoh ini menggunakan dua KMS kunci. Untuk menentukan satu KMS kunci, gunakan hanya generator
parameter. kms_key_ids
Parameter yang menentukan KMS kunci tambahan adalah opsional.
Input untuk keyring ini tidak membutuhkan AWS KMS klien. Sebagai gantinya, AWS Encryption SDK menggunakan AWS KMS klien default untuk setiap Wilayah yang diwakili oleh KMS kunci di keyring. Misalnya, jika KMS kunci yang diidentifikasi oleh nilai generator
parameter berada di Wilayah AS Barat (Oregon) (us-west-2
), akan AWS Encryption SDK membuat AWS KMS
klien default untuk us-west-2
Wilayah tersebut. Jika Anda perlu menyesuaikan AWS KMS klien, gunakan create_aws_kms_keyring()
metode ini.
# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
) # Optional: Create an encryption context encryption_context: Dict[str, str] = { "encryption": "context", "is not": "secret", "but adds": "useful metadata", "that can help you": "be confident that", "the data you are handling": "is what you think it is", } # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring kms_multi_keyring_input: CreateAwsKmsMultiKeyringInput = CreateAwsKmsMultiKeyringInput( generator=default_region_kms_key_id
, kms_key_ids=[second_region_kms_key_id
] ) kms_multi_keyring: IKeyring = mat_prov.create_aws_kms_multi_keyring( input=kms_multi_keyring_input )
AWS Encryption SDK for Python mendukung AWS KMS keyrings yang menggunakan enkripsi simetris (SYMMETRIC_DEFAULT
) atau kunci asimetris RSAKMS. AWS KMS keyrings yang dibuat dengan RSA KMS kunci asimetris hanya dapat berisi satu key pair.
Untuk mengenkripsi dengan RSA AWS KMS keyring asimetris, Anda tidak perlu kms: GenerateDataKey atau KMS:Encrypt karena Anda harus menentukan materi kunci publik yang ingin Anda gunakan untuk enkripsi saat Anda membuat keyring. Tidak ada AWS KMS panggilan yang dilakukan saat mengenkripsi dengan keyring ini. Untuk mendekripsi dengan RSA AWS KMS keyring asimetris, Anda memerlukan izin KMS: Dekripsi.
Untuk membuat RSA AWS KMS keyring asimetris, Anda harus memberikan kunci publik dan kunci pribadi ARN dari kunci asimetris RSA KMS Anda. Kunci publik harus PEM dikodekan. Contoh berikut membuat AWS KMS keyring dengan asymmetric RSA key pair.
# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
) # Optional: Create an encryption context encryption_context: Dict[str, str] = { "encryption": "context", "is not": "secret", "but adds": "useful metadata", "that can help you": "be confident that", "the data you are handling": "is what you think it is", } # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring keyring_input: CreateAwsKmsRsaKeyringInput = CreateAwsKmsRsaKeyringInput( public_key=public_key
, kms_key_id=kms_key_id
, encryption_algorithm="RSAES_OAEP_SHA_256
", kms_client=kms_client ) kms_rsa_keyring: IKeyring = mat_prov.create_aws_kms_rsa_keyring( input=keyring_input )
Konteks enkripsi yang diperlukan dalam versi 4.x
Bila Anda menggunakan versi 4. x dari AWS Encryption SDK for Python denganMPL, Anda dapat menggunakan konteks enkripsi yang diperlukan CMM untuk memerlukan konteks enkripsi dalam operasi kriptografi Anda. Konteks enkripsi adalah sekumpulan pasangan kunci-nilai non-rahasia. Konteks enkripsi terikat secara kriptografis ke data terenkripsi sehingga konteks enkripsi yang sama diperlukan untuk mendekripsi bidang. Saat Anda menggunakan konteks enkripsi yang diperlukanCMM, Anda dapat menentukan satu atau beberapa kunci konteks enkripsi yang diperlukan (kunci wajib) yang harus disertakan dalam semua panggilan enkripsi dan dekripsi.
catatan
Konteks enkripsi CMM yang diperlukan hanya didukung oleh versi berikut:
-
Versi 3. x dari AWS Encryption SDK for Java
-
Versi 4. x dari AWS Encryption SDK untuk. NET
-
Versi 4. x dari AWS Encryption SDK for Python, bila digunakan dengan dependensi Library (MPL) Penyedia Materi Kriptografi
opsional.
Jika Anda mengenkripsi data menggunakan konteks enkripsi yang diperlukanCMM, Anda hanya dapat mendekripsi dengan salah satu versi yang didukung ini.
Pada enkripsi, AWS Encryption SDK memverifikasi bahwa semua kunci konteks enkripsi yang diperlukan disertakan dalam konteks enkripsi yang Anda tentukan. AWS Encryption SDK Tanda konteks enkripsi yang Anda tentukan. Hanya pasangan kunci-nilai yang bukan kunci wajib yang diserialisasi dan disimpan dalam teks biasa di header pesan terenkripsi yang dikembalikan oleh operasi enkripsi.
Saat mendekripsi, Anda harus menyediakan konteks enkripsi yang berisi semua pasangan kunci-nilai yang mewakili kunci yang diperlukan. AWS Encryption SDK Menggunakan konteks enkripsi ini dan pasangan kunci-nilai yang disimpan dalam header pesan terenkripsi untuk merekonstruksi konteks enkripsi asli yang Anda tentukan dalam operasi enkripsi. Jika AWS Encryption SDK tidak dapat merekonstruksi konteks enkripsi asli, maka operasi dekripsi gagal. Jika Anda memberikan pasangan kunci-nilai yang berisi kunci yang diperlukan dengan nilai yang salah, pesan terenkripsi tidak dapat didekripsi. Anda harus memberikan pasangan nilai kunci yang sama yang ditentukan pada enkripsi.
penting
Pertimbangkan dengan cermat nilai mana yang Anda pilih untuk kunci yang diperlukan dalam konteks enkripsi Anda. Anda harus dapat memberikan kunci yang sama dan nilai yang sesuai lagi pada dekripsi. Jika Anda tidak dapat mereproduksi kunci yang diperlukan, pesan terenkripsi tidak dapat didekripsi.
Contoh berikut menginisialisasi AWS KMS keyring dengan konteks enkripsi yang diperlukan. CMM
# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.
REQUIRE_ENCRYPT_REQUIRE_DECRYPT
) # Create your encryption context encryption_context: Dict[str, str] = { "key1": "value1", "key2": "value2", "requiredKey1": "requiredValue1", "requiredKey2": "requiredValue2" } # Create a list of required encryption context keys required_encryption_context_keys: List[str] = ["requiredKey1", "requiredKey2"] # Instantiate the material providers library mpl: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput( kms_key_id=kms_key_id, kms_client=boto3.client('kms', region_name="us-west-2") ) kms_keyring: IKeyring = mpl.create_aws_kms_keyring(keyring_input) # Create the required encryption context CMM underlying_cmm: ICryptographicMaterialsManager = \ mpl.create_default_cryptographic_materials_manager( CreateDefaultCryptographicMaterialsManagerInput( keyring=kms_keyring ) ) required_ec_cmm: ICryptographicMaterialsManager = \ mpl.create_required_encryption_context_cmm( CreateRequiredEncryptionContextCMMInput( required_encryption_context_keys=required_encryption_context_keys, underlying_cmm=underlying_cmm, ) )