Jika enkripsi sisi klien diaktifkan, objek akan dienkripsi secara lokal sebelum diunggah ke Object Storage Service (OSS). Hanya pemilik customer master key (CMK) yang dapat mendekripsi objek tersebut. Enkripsi sisi klien meningkatkan keamanan data selama transmisi dan penyimpanan.
Penafian
Saat menggunakan enkripsi sisi klien, Anda harus memastikan integritas dan validitas CMK. Jika CMK digunakan secara salah atau hilang akibat pemeliharaan yang tidak tepat, Anda bertanggung jawab atas seluruh kerugian dan konsekuensi yang timbul akibat kegagalan dekripsi.
Saat menyalin atau memigrasikan data terenkripsi, Anda bertanggung jawab atas integritas dan validitas metadata objek. Jika metadata terenkripsi salah atau hilang akibat pemeliharaan yang tidak tepat, Anda bertanggung jawab atas seluruh kerugian dan konsekuensi yang timbul akibat kegagalan dekripsi data.
Skenario
Data yang sangat sensitif: Untuk informasi identitas pribadi (PII), catatan transaksi keuangan, data kesehatan, dan data sensitif lainnya, pengguna mungkin ingin mengenkripsi data sebelum data meninggalkan lingkungan lokal guna memastikan bahwa data asli tetap terlindungi secara efektif meskipun dicegat selama transmisi.
Persyaratan kepatuhan: Industri dan regulasi tertentu, seperti Health Insurance Portability and Accountability Act (HIPAA) dan General Data Protection Regulation (GDPR), mewajibkan manajemen enkripsi yang ketat untuk data yang disimpan di platform pihak ketiga. Enkripsi sisi klien membantu memenuhi persyaratan kepatuhan ini karena CMK dikelola oleh pengguna dan tidak ditransmisikan melalui jaringan atau diekspos ke penyedia layanan cloud.
Kontrol penuh atas enkripsi: Perusahaan atau pengembang mungkin ingin memiliki full control atas proses enkripsi, termasuk memilih algoritma enkripsi serta mengelola dan merotasi CMK. Dalam kasus ini, Anda dapat menggunakan enkripsi sisi klien untuk memastikan hanya pengguna yang berwenang yang dapat mendekripsi dan mengakses data.
Keamanan migrasi data lintas wilayah: Enkripsi sisi klien membantu menjaga data dalam keadaan terenkripsi sebelum dan sesudah migrasi data lintas wilayah. Hal ini memperkuat keamanan transmisi data melalui Internet.
Catatan penggunaan
Pada topik ini, titik akhir publik wilayah Tiongkok (Hangzhou) digunakan. Jika Anda ingin mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi lebih lanjut mengenai wilayah dan titik akhir OSS, lihat Regions and endpoints.
Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut mengenai cara mengonfigurasi kredensial akses, lihat Configure access credentials using OSS SDK for Python 1.0.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Initialization.
Informasi latar belakang
Pada enkripsi sisi klien, kunci data acak dihasilkan untuk setiap objek guna melakukan enkripsi simetris pada objek tersebut. Klien menggunakan CMK untuk mengenkripsi kunci data acak tersebut. Kunci data terenkripsi diunggah sebagai bagian dari metadata objek dan disimpan di server OSS. Saat objek terenkripsi diunduh, klien menggunakan CMK untuk mendekripsi kunci data acak tersebut, lalu menggunakan kunci data yang telah didekripsi untuk mendekripsi objek. Untuk memastikan keamanan data, CMK hanya digunakan di sisi klien dan tidak ditransmisikan melalui jaringan atau disimpan di server.
Metode enkripsi
Saat ini, kunci master digunakan dengan dua cara berikut:
CMK yang dikelola oleh KMS
Saat menggunakan CMK yang dikelola di Key Management Service (KMS) untuk enkripsi sisi klien, Anda harus memberikan ID CMK kepada OSS SDK for Python.
CMK berbasis RSA yang dikelola sendiri
Saat menggunakan CMK yang dikelola sendiri untuk enkripsi sisi klien, Anda harus mengirimkan kunci publik dan kunci privat CMK Anda ke OSS SDK for Python sebagai parameter.
Anda dapat menggunakan metode enkripsi di atas untuk mencegah kebocoran data dan melindungi data Anda di sisi klien. Bahkan jika data Anda bocor, data tersebut tidak dapat didekripsi oleh pihak lain.
Untuk informasi lebih lanjut, lihat Client-side encryption dalam OSS Developer Guide.
Enkripsi sisi klien V2 (direkomendasikan)
Enkripsi sisi klien mendukung unggah multi-bagian untuk objek yang berukuran lebih dari 5 GB. Saat menggunakan unggah multi-bagian untuk mengunggah objek, Anda harus menentukan ukuran total objek dan ukuran bagian. Ukuran setiap bagian, kecuali bagian terakhir, harus sama dan merupakan kelipatan 16 byte.
Jika Anda mengunggah objek yang dienkripsi di klien lokal, metadata objek tersebut dienkripsi dan dilindungi sehingga tidak dapat dimodifikasi dengan memanggil operasi seperti CopyObject.
Metadata objek terkait enkripsi sisi klien
Parameter
Deskripsi
Wajib
x-oss-meta-client-side-encryption-key
Kunci data terenkripsi. Kunci data terenkripsi adalah string yang dienkripsi menggunakan CMK berbasis RSA atau CMK yang dikelola KMS dan dikodekan dalam Base64.
Ya
x-oss-meta-client-side-encryption-start
Vektor inisialisasi yang dihasilkan secara acak untuk enkripsi data. Vektor inisialisasi adalah string yang dienkripsi menggunakan CMK berbasis RSA atau CMK yang dikelola KMS dan dikodekan dalam Base64.
Ya
x-oss-meta-client-side-encryption-cek-alg
Algoritma yang digunakan untuk mengenkripsi data.
Ya
x-oss-meta-client-side-encryption-wrap-alg
Algoritma yang digunakan untuk mengenkripsi kunci data.
Ya
x-oss-meta-client-side-encryption-matdesc
Deskripsi content encryption key (CEK) dalam format JSON.
Tidak
x-oss-meta-client-side-encryption-unencrypted-content-length
Panjang data sebelum enkripsi. Jika content-length tidak ditentukan, parameter ini tidak dihasilkan.
Tidak
x-oss-meta-client-side-encryption-unencrypted-content-md5
Hash MD5 data sebelum enkripsi. Jika content-md5 tidak ditentukan, parameter ini tidak dihasilkan.
Tidak
x-oss-meta-client-side-encryption-data-size
Ukuran total objek yang ingin Anda unggah menggunakan unggah multi-bagian.
Bersyarat (wajib untuk unggah multi-bagian)
x-oss-meta-client-side-encryption-part-size
Ukuran bagian yang ditentukan dalam unggah multi-bagian.
Bersyarat (wajib untuk unggah multi-bagian)
Buat bucket untuk enkripsi sisi klien
Sebelum mengenkripsi dan mengunggah objek atau mengunduh dan mendekripsi objek di sisi klien, Anda harus menginisialisasi instans bucket. Anda dapat memanggil operasi pada bucket untuk mengunggah atau mengunduh objek. Pada enkripsi sisi klien, kelas CryptoBucket mewarisi operasi dari kelas Bucket. Anda dapat mengonfigurasi parameter untuk menginisialisasi instans CryptoBucket dengan cara yang sama seperti menginisialisasi instans Bucket.
Inisialisasi instans CryptoBucket untuk enkripsi objek menggunakan CMK berbasis RSA yang dikelola sendiri
PentingJika Anda menggunakan CMK berbasis RSA, Anda harus mengelola CMK tersebut sendiri. Kehilangan CMK atau kerusakan data CMK dapat menyebabkan kegagalan dekripsi. Kami menyarankan agar Anda menggunakan CMK yang dikelola oleh KMS. Untuk menggunakan CMK berbasis RSA dalam enkripsi, kami menyarankan agar Anda melakukan backup data CMK Anda.
Kode contoh berikut menunjukkan cara menginisialisasi instans CryptoBucket untuk enkripsi objek menggunakan CMK berbasis RSA yang dikelola sendiri:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.crypto import RsaProvider # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Jika Anda hanya ingin mendekripsi objek, tentukan hanya kunci privat. # key_pair = {'private_key': 'yourPrivateKey'} # Jika Anda hanya ingin mengenkripsi objek, tentukan hanya kunci publik. # key_pair = {'public_key': 'yourPublicKey'} # Jika Anda ingin mengenkripsi dan mendekripsi objek, Anda harus menentukan kunci publik dan kunci privat. key_pair = {'private_key': 'yourPrivateKey', 'public_key': 'yourPublicKey'} # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan wilayah tempat bucket berada. Contoh: cn-hangzhou. Parameter ini wajib jika Anda menggunakan algoritma signature V4. region = "cn-hangzhou" # Tentukan nama bucket. bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=RsaProvider(key_pair), region=region)Inisialisasi instans CryptoBucket untuk enkripsi objek menggunakan CMK yang dikelola oleh KMS
Kode contoh berikut menunjukkan cara menginisialisasi instans CryptoBucket untuk enkripsi objek menggunakan CMK yang dikelola oleh KMS:
# -*- coding: utf-8 -*- import os import oss2 from oss2.crypto import AliKMSProvider from oss2.credentials import EnvironmentVariableCredentialsProvider # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) kms_provider = AliKMSProvider(auth, 'yourRegion', 'yourCMKID') # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan wilayah tempat bucket berada. Contoh: cn-hangzhou. Parameter ini wajib jika Anda menggunakan algoritma signature V4. region = "cn-hangzhou" # Tentukan nama bucket. bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=kms_provider, region=region)Gunakan dan kelola beberapa CMK
Anda mungkin menggunakan CMK berbeda untuk mengenkripsi objek yang diunggah ke bucket atau mendekripsi objek yang diunduh dari bucket yang sama. Anda dapat menentukan deskripsi berbeda untuk CMK tersebut dan menambahkan CMK beserta deskripsinya ke informasi terkait enkripsi bucket. Saat data didekripsi, OSS SDK for Python secara otomatis mencocokkan CMK berdasarkan deskripsi tersebut. Kode contoh berikut menunjukkan cara menyediakan beberapa CMK:
# -*- coding: utf-8 -*- import os import oss2 from oss2.crypto import RsaProvider from oss2.credentials import EnvironmentVariableCredentialsProvider # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Buat pasangan kunci berbasis RSA. key_pair_1 = {'private_key': 'yourPrivateKey_1', 'public_key': 'yourPublicKey_1'} mat_desc_1 = {'key1': 'value1'} # Buat pasangan kunci berbasis RSA lainnya. key_pair_2 = {'private_key': 'yourPrivateKey_2', 'public_key': 'yourPublicKey_2'} mat_desc_2 = {'key2': 'value2'} provider = RsaProvider(key_pair=key_pair_2, mat_desc=mat_desc_2) # Tambahkan deskripsi key_pair_1 ke provider. encryption_materials = oss2.EncryptionMaterials(mat_desc_1, key_pair=key_pair_1) provider.add_encryption_materials(encryption_materials) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan wilayah tempat bucket berada. Contoh: cn-hangzhou. Parameter ini wajib jika Anda menggunakan algoritma signature V4. region = "cn-hangzhou" # Gunakan provider untuk menginisialisasi instans CryptoBucket. Kemudian, Anda dapat mengunduh data objek yang dienkripsi menggunakan CMK yang deskripsinya adalah mat_desc_1. crypto_bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=provider, region=region)
Unggah dan unduh file standar
Kode contoh berikut menunjukkan unggah dan unduh file standar menggunakan kunci master KMS:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.crypto import RsaProvider from oss2.crypto import AliKMSProvider # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) kms_provider = AliKMSProvider(auth, 'yourRegion', 'yourCMKID') # Masukkan titik akhir wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Masukkan informasi wilayah yang sesuai dengan titik akhir, misalnya cn-hangzhou. Perhatikan bahwa parameter ini wajib untuk signature V4. region = "cn-hangzhou" bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=kms_provider, region=region) key = 'motto.txt' content = b'a' * 1024 * 1024 filename = 'download.txt' # Unggah file. bucket.put_object(key, content, headers={'content-length': str(1024 * 1024)}) # Unduh file OSS ke memori lokal. result = bucket.get_object(key) # Verifikasi bahwa konten file yang diunduh sama dengan konten file yang diunggah. content_got = b'' for chunk in result: content_got += chunk assert content_got == content # Unduh file OSS ke file lokal. result = bucket.get_object_to_file(key, filename) # Verifikasi bahwa konten file yang diunduh sama dengan konten file yang diunggah. with open(filename, 'rb') as fileobj: assert fileobj.read() == contentUnggah Multi-bagian
CatatanJika tugas unggah multi-bagian terganggu dan proses dihentikan, konteks tugas unggah multi-bagian tersebut mungkin hilang. Jika tugas unggah multi-bagian terganggu dan Anda ingin mengunggah ulang objek, Anda harus mengunggah ulang seluruh objek.
Kami menyarankan agar Anda memanggil operasi unduhan yang dapat dilanjutkan di OSS untuk mengunggah objek besar. Dengan cara ini, Anda dapat menyimpan konteks tugas unggah multi-bagian di klien lokal sehingga konteks tersebut tetap tersimpan meskipun tugas unggah terganggu.
Kode contoh berikut menunjukkan cara menggunakan CMK yang dikelola KMS untuk mengenkripsi objek yang ingin Anda unggah menggunakan unggah multi-bagian:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.crypto import RsaProvider from oss2.cryptoimportAliKMSProvider # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) kms_provider = AliKMSProvider(auth, 'yourRegion', 'yourCMKID') # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan wilayah tempat bucket berada. Contoh: cn-hangzhou. Parameter ini wajib jika Anda menggunakan algoritma signature V4. region = "cn-hangzhou" bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider = kms_provider, region=region) """ Lakukan enkripsi sisi klien dalam unggah multi-bagian """ # Mulai tugas unggah multi-bagian. part_a = b'a' * 1024 * 100 part_b = b'b' * 1024 * 100 part_c = b'c' * 1024 * 100 multi_content = [part_a, part_b, part_c] parts = [] data_size = 100 * 1024 * 3 part_size = 100 * 1024 multi_key = "test_crypto_multipart" # Inisialisasi konteks tugas unggah multi-bagian saat menggunakan enkripsi sisi klien. context = models.MultipartUploadCryptoContext(data_size, part_size) res = bucket.init_multipart_upload(multi_key, upload_context=context) upload_id = res.upload_id # Dalam contoh ini, bagian-bagian diunggah secara berurutan. Unggah multi-bagian mendukung beberapa thread paralel untuk mempercepat unggahan. for i in range(3): # Nilai konteks tidak boleh diubah. Jika nilai dalam konteks diubah, unggahan data gagal. result = bucket.upload_part(multi_key, upload_id, i + 1, multi_content[i], upload_context=context) parts.append(oss2.models.PartInfo(i + 1, result.etag, size=part_size, part_crc=result.crc)) # Selesaikan tugas unggah multi-bagian. result = bucket.complete_multipart_upload(multi_key, upload_id, parts) # Periksa konsistensi data antara konten objek yang diunduh dan objek sebelum diunggah. result = bucket.get_object(multi_key) content_got = b'' for chunk in result: content_got += chunk assert content_got[0:102400] == part_a assert content_got[102400:204800] == part_b assert content_got[204800:307200] == part_cUnggahan yang dapat dilanjutkan
Kode contoh berikut menunjukkan cara menggunakan CMK berbasis RSA yang dikelola sendiri untuk mengenkripsi objek yang ingin Anda unggah menggunakan unggahan yang dapat dilanjutkan:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.crypto import RsaProvider key = 'motto.txt' content = b'a' * 1024 * 1024 * 100 file_name_put = 'upload.txt' # Tulis data dalam content ke file. with open(file_name_put, 'wb') as fileobj: fileobj.write(content) # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Inisialisasi instans CryptoBucket dan gunakan CMK berbasis RSA untuk melakukan enkripsi sisi klien. Metode enkripsi ini hanya mendukung unggah dan unduh seluruh objek. # Jika Anda menggunakan OSS SDK for Python 2.9.0 atau versi yang lebih baru, kami menyarankan agar Anda tidak menggunakan LocalRsaProvider untuk menginisialisasi instans CryptoBucket. # bucket = oss2.CryptoBucket(auth,'yourEndpoint', 'yourBucketName', crypto_provider=LocalRsaProvider()) # Jika Anda hanya ingin mendekripsi objek, tentukan hanya kunci privat. # key_pair = {'private_key': 'yourPrivateKey'} # Jika Anda hanya ingin mengenkripsi objek, tentukan hanya kunci publik. # key_pair = {'public_key': 'yourPublicKey'} # Jika Anda ingin mengenkripsi dan mendekripsi objek, Anda harus menentukan kunci publik dan kunci privat. key_pair = {'private_key': 'yourPrivateKey', 'public_key': 'yourPublicKey'} # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan wilayah tempat bucket berada. Contoh: cn-hangzhou. Parameter ini wajib jika Anda menggunakan algoritma signature V4. region = "cn-hangzhou" # Inisialisasi instans CryptoBucket. Jika Anda mengatur upload_contexts_flag ke True, Anda tidak perlu mengonfigurasi parameter untuk konteks unggah multi-bagian saat memanggil operasi upload_part. bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=RsaProvider(key_pair), region=region) # Dalam contoh ini, nilai multipart_threshold diatur ke 10 * 1024 * 1024. Ambang batas unggah multi-bagian default adalah 10 MB. Tentukan nilai berdasarkan skenario Anda. # multipart_threshold menentukan ambang batas ukuran objek untuk menggunakan unggah multi-bagian. Jika ukuran objek melebihi ambang batas, unggah multi-bagian digunakan. Jika ukuran objek lebih kecil dari ambang batas, kami menyarankan agar Anda memanggil put_object untuk mengunggah objek. # part_size menentukan ukuran bagian dalam unggah multi-bagian. Ukuran bagian default adalah 10 MB. # num_threads menentukan jumlah thread unggah paralel. Nilai default: 1. oss2.resumable_upload(bucket, key, file_name_put, multipart_threshold=10 * 1024 * 1024, part_size=1024 * 1024, num_threads=3)Unduhan yang dapat dilanjutkan
Kode contoh berikut menunjukkan cara menggunakan CMK yang dikelola oleh KMS untuk mendekripsi objek yang ingin Anda unduh menggunakan unduhan yang dapat dilanjutkan:
# -*- coding: utf-8 -*- import os import oss2 from oss2.crypto import RsaProvider from oss2.cryptoimportAliKMSProvider from oss2.credentials import EnvironmentVariableCredentialsProvider # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) key = 'motto.txt' content = b'a' * 1024 * 1024 * 100 file_name_get = 'download.txt' kms_provider = AliKMSProvider(auth, 'yourRegion', 'yourCMKID') endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan wilayah tempat bucket berada. Contoh: cn-hangzhou. Parameter ini wajib jika Anda menggunakan algoritma signature V4. region = "cn-hangzhou" bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=kms_provider, region=region) # Unduh objek menggunakan unduhan yang dapat dilanjutkan. oss2.resumable_download(bucket, key, file_name_get, multiget_threshold=10 * 1024 * 1024, part_size=1024 * 1024, num_threads=3) # Periksa konsistensi data antara konten objek yang diunduh dan objek sebelum diunggah. with open(file_name_get, 'rb') as fileobj: assert fileobj.read() == content
Enkripsi sisi klien V1 (tidak direkomendasikan)
Enkripsi sisi klien V1 hanya mendukung pengunggahan objek berukuran kurang dari 5 GB dengan memanggil PutObject. Operasi unggah multi-bagian, unggahan yang dapat dilanjutkan, dan unduhan yang dapat dilanjutkan tidak didukung.
Setelah Anda mengunggah objek dengan memanggil operasi kelas CryptoBucket, operasi seperti CopyObject tidak dapat dipanggil untuk memodifikasi metadata objek. Jika metadata dimodifikasi, data mungkin gagal didekripsi.
Hanya OSS SDK for Python yang mendukung enkripsi sisi klien V1. OSS SDK untuk bahasa pemrograman lain tidak dapat mendekripsi data yang diunggah menggunakan enkripsi sisi klien V1.
OSS SDK for Python V2.11.0 dan versi yang lebih baru mendukung enkripsi sisi klien V2. Enkripsi sisi klien V2 menyediakan lebih banyak fitur dibandingkan enkripsi sisi klien V1. Kami menyarankan agar Anda melakukan upgrade OSS SDK for Python ke versi terbaru.
Metadata objek terkait enkripsi sisi klien
Parameter
Deskripsi
Wajib
x-oss-meta-oss-crypto-key
Kunci data terenkripsi. Kunci data terenkripsi adalah string yang dienkripsi menggunakan CMK berbasis RSA dan dikodekan dalam Base64.
Ya
x-oss-meta-oss-crypto-start
Nilai awal yang dihasilkan secara acak untuk enkripsi data. Nilai tersebut adalah string yang dienkripsi menggunakan CMK berbasis RSA dan dikodekan dalam Base64.
Ya
x-oss-meta-oss-cek-alg
Algoritma yang digunakan untuk mengenkripsi data.
Ya
x-oss-meta-oss-wrap-alg
Algoritma yang digunakan untuk mengenkripsi kunci data.
Ya
x-oss-meta-oss-matdesc
Deskripsi content encryption key (CEK) dalam format JSON. Parameter ini tidak berlaku.
Tidak
x-oss-meta-unencrypted-content-length
Panjang data sebelum enkripsi. Jika content-length tidak ditentukan, parameter ini tidak dihasilkan.
Tidak
x-oss-meta-unencrypted-content-md5
Hash MD5 data sebelum enkripsi. Jika content-md5 tidak ditentukan, parameter ini tidak dihasilkan.
Tidak
Mengunggah dan mengunduh file menggunakan RSA
Kode contoh berikut menunjukkan cara menggunakan RSA untuk mengunggah dan mengunduh file:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.crypto import LocalRsaProvider # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir menjadi https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Tentukan wilayah tempat bucket berada. Contoh: cn-hangzhou. Parameter ini wajib jika Anda menggunakan algoritma signature V4. region = "cn-hangzhou" # Inisialisasi instans CryptoBucket dan gunakan CMK berbasis RSA untuk melakukan enkripsi sisi klien. Metode enkripsi ini hanya mendukung unggah dan unduh seluruh objek. bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=LocalRsaProvider(), region=region) key = 'motto.txt' content = b'a' * 1024 * 1024 filename = 'download.txt' # Unggah objek. bucket.put_object(key, content, headers={'content-length': str(1024 * 1024)}) # Unduh objek dari OSS ke memori lokal. result = bucket.get_object(key) # Periksa konsistensi data antara konten objek yang diunduh dan objek sebelum diunggah. content_got = b'' for chunk in result: content_got += chunk assert content_got == content # Unduh objek dari OSS ke path lokal. result = bucket.get_object_to_file(key, filename) # Periksa konsistensi data antara konten objek yang diunduh dan objek sebelum diunggah. with open(filename, 'rb') as fileobj: assert fileobj.read() == content
Referensi
Untuk kode contoh lengkap enkripsi sisi klien, kunjungi GitHub.