Anda harus mengenkripsi data sensitif pada aset TI yang diterapkan di Alibaba Cloud. Anda dapat memanggil operasi API kriptografi dari Key Management Service (KMS) untuk mengenkripsi atau mendekripsi data kurang dari 6 KB. Topik ini menjelaskan cara memanggil operasi API KMS untuk mengenkripsi dan mendekripsi kunci privat sertifikat SSL.
Informasi latar belakang
Anda dapat menggunakan kunci master pelanggan (CMK) untuk mengenkripsi dan mendekripsi data dalam skenario berikut, namun tidak terbatas pada:
Mengenkripsi file konfigurasi.
Mengenkripsi kunci privat sertifikat SSL.
Arsitektur
Data pengguna dikirim ke server KMS melalui saluran aman. Server KMS mengenkripsi atau mendekripsi data dan mengembalikan hasilnya kepada pengguna melalui saluran aman. Gambar berikut menunjukkan seluruh prosedur.
Prosedur:
Buat CMK di KMS console atau dengan memanggil operasi CreateKey.
Panggil operasi Encrypt dari KMS untuk mengenkripsi kunci privat sertifikat SSL. Kunci privat ciphertext akan dikembalikan.
Sebarkan sertifikat SSL menggunakan kunci privat ciphertext ke instance Elastic Compute Service (ECS).
Panggil operasi Decrypt dari KMS untuk mendekripsi ciphertext ketika instance ECS mulai dan perlu menggunakan sertifikat SSL.
Operasi API terkait
Anda dapat memanggil operasi API berikut untuk mengenkripsi dan mendekripsi data.
Operasi | Deskripsi |
Membuat CMK. | |
Membuat alias untuk CMK. | |
Mengenkripsi data menggunakan CMK. | |
Mendekripsi data yang dienkripsi oleh KMS. Anda tidak perlu menentukan CMK. |
Mengenkripsi dan mendekripsi kunci privat sertifikat SSL
Pair AccessKey akun Alibaba Cloud memiliki izin pada semua operasi API. Menggunakan pair AccessKey untuk melakukan operasi adalah operasi berisiko tinggi. Kami merekomendasikan Anda menggunakan pengguna RAM untuk memanggil operasi API atau melakukan pemeliharaan rutin. Kami juga merekomendasikan agar Anda tidak menyimpan ID AccessKey dan Secret AccessKey di kode proyek Anda. Jika tidak, pair AccessKey mungkin bocor dan keamanan semua sumber daya yang dimiliki oleh akun Anda mungkin terganggu.
Dalam contoh ini, pair AccessKey disimpan dalam variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET untuk mengimplementasikan otentikasi identitas.
Untuk informasi lebih lanjut tentang cara mengonfigurasi informasi autentikasi, lihat Kelola Kredensial Akses.
Metode yang digunakan untuk mengonfigurasi variabel lingkungan bervariasi berdasarkan sistem operasi. Untuk informasi lebih lanjut, lihat Konfigurasikan Variabel Lingkungan di Linux, macOS, dan Windows.
Panggil operasi CreateKey untuk membuat CMK.
aliyun kms CreateKeyOutput yang Diharapkan:
{ "KeyMetadata": { "CreationDate": "2019-04-08T07:45:54Z", "Description": "", "KeyId": "1234abcd-12ab-34cd-56ef-12345678****", "KeyState": "Enabled", "KeyUsage": "ENCRYPT/DECRYPT", "DeleteDate": "", "Creator": "151266687691****", "Arn": "acs:kms:cn-hangzhou:151266687691****:key/1234abcd-12ab-34cd-56ef-12345678****", "Origin": "Aliyun_KMS", "MaterialExpireTime": "" }, "RequestId": "2a37b168-9fa0-4d71-aba4-2077dd9e80df" }(Opsional)Buat alias untuk CMK. Kami merekomendasikan Anda melakukan langkah ini.
Alias secara opsional digunakan untuk mengidentifikasi CMK. Jika CMK tidak memiliki alias, Anda dapat menggunakan ID CMK untuk mengidentifikasi CMK.
aliyun kms CreateAlias --AliasName alias/Apollo/WorkKey --KeyId 1234abcd-12ab-34cd-56ef-12345678****CatatanDalam contoh ini, alias
Apollo/WorkKeydibuat untuk CMK di proyek Apollo. Alias ini digunakan dalam kode sampel berikutnya. Anda dapat menggunakanalias/Apollo/WorkKeyuntuk merujuk CMK saat Anda memanggil operasi Encrypt.Panggil operasi Encrypt untuk mengenkripsi kunci privat sertifikat SSL. Kemudian, KMS mengenkripsi kunci privat.
Dalam kode sampel berikut:
alias/Apollo/WorkKeyadalah alias dari CMK../certs/key.pem adalah kunci privat plaintext.
./certs/key.pem.cipher adalah kunci privat ciphertext.
#!/usr/bin/env python #coding=utf-8 import json from aliyunsdkcore import client from aliyunsdkkms.request.v20160120 import EncryptRequest from aliyunsdkkms.request.v20160120 import DecryptRequest def KmsEncrypt(client, plaintext, key_alias): request = EncryptRequest.EncryptRequest() request.set_accept_format('JSON') request.set_KeyId(key_alias) request.set_Plaintext(plaintext) response = json.loads(client.do_action(request)) return response.get("CiphertextBlob") def ReadTextFile(in_file): file = open(in_file, 'r') content = file.read() file.close() return content def WriteTextFile(out_file, content): file = open(out_file, 'w') file.write(content) file.close() clt = client.AcsClient(os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),'<Region-Id>') key_alias = 'alias/Apollo/WorkKey' in_file = './certs/key.pem' out_file = './certs/key.pem.cipher' # Baca file kunci privat dalam mode teks in_content = ReadTextFile(in_file) # Enkripsi ciphertext = KmsEncrypt(clt, in_content, key_alias) # Tulis file kunci terenkripsi dalam mode teks WriteTextFile(out_file, ciphertext)Panggil operasi Decrypt untuk mendekripsi kunci privat ciphertext. Kemudian, KMS mendekripsi kunci privat yang telah Anda sebarkan ke instance ECS Anda.
Dalam kode sampel berikut:
./certs/key.pem.cipher adalah kunci privat ciphertext.
./certs/decrypted_key.pem adalah kunci privat plaintext.
#!/usr/bin/env python #coding=utf-8 import json from aliyunsdkcore import client from aliyunsdkkms.request.v20160120 import EncryptRequest from aliyunsdkkms.request.v20160120 import DecryptRequest def KmsDecrypt(client, ciphertext): request = DecryptRequest.DecryptRequest() request.set_accept_format('JSON') request.set_CiphertextBlob(ciphertext) response = json.loads(client.do_action(request)) return response.get("Plaintext") def ReadTextFile(in_file): file = open(in_file, 'r') content = file.read() file.close() return content def WriteTextFile(out_file, content): file = open(out_file, 'w') file.write(content) file.close() clt = client.AcsClient(os.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),os.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),'<Region-Id>') in_file = './certs/key.pem.cipher' out_file = './certs/decrypted_key.pem' # Baca file kunci terenkripsi dalam mode teks in_content = ReadTextFile(in_file) # Dekripsi ciphertext = KmsDecrypt(clt, in_content) # Tulis file kunci terdekripsi dalam mode teks WriteTextFile(out_file, ciphertext)