1. ภาพรวม
Cloud KMS คือบริการการจัดการคีย์ที่โฮสต์ไว้ในระบบคลาวด์ ซึ่งช่วยให้คุณจัดการคีย์การเข้ารหัสของบริการระบบคลาวด์ได้เช่นเดียวกับที่ทำภายในองค์กร ซึ่งรวมถึงการรองรับการเข้ารหัส การถอดรหัส การรับรอง และการยืนยันโดยใช้ประเภทคีย์และแหล่งที่มาที่หลากหลาย เช่น Cloud HSM สำหรับคีย์ที่สนับสนุนด้วยฮาร์ดแวร์ บทแนะนำนี้จะสอนวิธีเข้ารหัสและถอดรหัสข้อมูลโดยใช้คีย์ Cloud KMS แบบอสมมาตร
คุณจะได้เรียนรู้
- วิธีเปิดใช้ Cloud KMS API
- วิธีสร้างพวงกุญแจ
- วิธีสร้าง CryptoKey สำหรับการเข้ารหัส/การถอดรหัสแบบอสมมาตร
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID
ในภายหลัง
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
เริ่มต้น Cloud Shell
ใน Codelab นี้ คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมเสมือนจริงแบบฟรีที่ทำงานบน Google Cloud จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้
เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่ทำงานอย่างต่อเนื่องบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก เรียกใช้คำสั่งทั้งหมดจาก Shell นี้ เว้นแต่จะมีคำแนะนำไว้เป็นอย่างอื่น
3. เปิดใช้บริการ Cloud KMS
ก่อนจะใช้ Cloud KMS คุณต้องเปิดใช้บริการในโปรเจ็กต์ของคุณก่อน คุณต้องดำเนินการนี้เพียงครั้งเดียวต่อโปรเจ็กต์เท่านั้น หากต้องการเปิดใช้บริการ Cloud KMS ให้เรียกใช้คำสั่งต่อไปนี้
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
การเปิดใช้อาจใช้เวลาไม่เกิน 1 นาที คําสั่งจะรายงานสําเร็จเมื่อเสร็จสมบูรณ์
4. สร้างคีย์ KMS
สร้างคีย์ริง Cloud KMS ใน Cloud KMS คีย์ริงคือคอลเล็กชันแบบตรรกะของคีย์การเข้ารหัส คีย์ริงมีข้อมูลเมตาเกี่ยวกับคีย์ต่างๆ เช่น ตำแหน่งของคีย์ สร้างคีย์ริงชื่อ my-keyring
ในภูมิภาค global
:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
ตอนนี้ให้สร้าง CryptoKey ชื่อ my-asymmetric-encryption-key
ตามวัตถุประสงค์ asymmetric-encryption
ภายในคีย์ริงที่คุณเพิ่งสร้าง
$ gcloud kms keys create "my-asymmetric-encryption-key" \ --location "global" \ --keyring "my-keyring" \ --purpose "asymmetric-encryption" \ --default-algorithm "rsa-decrypt-oaep-4096-sha512"
5. เข้ารหัสข้อมูล
เมื่อใช้คีย์แบบอสมมาตร Cloud KMS จะไม่เข้ารหัส แต่จะให้สิทธิ์เข้าถึงคีย์สาธารณะและเข้ารหัสข้อมูลโดยใช้คีย์สาธารณะนั้นผ่านวิทยาการเข้ารหัสคีย์สาธารณะ เมื่อใช้คีย์แบบอสมมาตร การเข้ารหัสจะทำแบบออฟไลน์ได้อย่างสมบูรณ์โดยไม่ต้องเข้าถึง Cloud KMS หรือ Google Cloud API อื่นๆ การเข้ารหัสจะดำเนินการโดยใช้เครื่องมือเข้ารหัส เช่น openssl
หรือด้วยภาษาโปรแกรมหรือไลบรารีที่รองรับวิทยาการเข้ารหัสคีย์สาธารณะ
ดาวน์โหลดคีย์สาธารณะจาก Cloud KMS ดังนี้
$ gcloud kms keys versions get-public-key "1" \ --location "global" \ --keyring "my-keyring" \ --key "my-asymmetric-encryption-key" \ --output-file ./key.pub
สร้างไฟล์ที่มีข้อมูลเพื่อเข้ารหัสและใช้เครื่องมือบรรทัดคำสั่ง openssl
เพื่อเข้ารหัสข้อมูลในไฟล์ ดังนี้
$ echo "my-contents" > ./data.txt
$ openssl pkeyutl -encrypt -pubin \ -in ./data.txt \ -inkey ./key.pub \ -pkeyopt "rsa_padding_mode:oaep" \ -pkeyopt "rsa_oaep_md:sha512" \ -pkeyopt "rsa_mgf1_md:sha512" > ./data.txt.enc
ระบบจะบันทึกข้อมูลที่เข้ารหัส (หรือที่เรียกว่า "ข้อความเข้ารหัส") ใน data.txt.enc
ในดิสก์ หากคุณเปิดไฟล์ data.txt.enc
คุณจะสังเกตเห็นว่ามีอักขระแปลกๆ และไม่สามารถพิมพ์ได้ เนื่องจากข้อมูลผลลัพธ์อยู่ในรูปแบบไบนารี
เมื่อจัดเก็บข้อความเข้ารหัสในฐานข้อมูลหรือส่งโดยเป็นส่วนหนึ่งของคำขอ HTTP คุณอาจต้องเข้ารหัสข้อมูล กลไกการเข้ารหัสที่พบบ่อยที่สุดสำหรับข้อความเข้ารหัสคือ base64
Cloud KMS ไม่จัดเก็บข้อความธรรมดาที่คุณระบุ คุณต้องบันทึกข้อความเข้ารหัสนี้ในตำแหน่งที่ปลอดภัยเนื่องจากจะต้องใช้เพื่อดึงค่าข้อความธรรมดา
6. ถอดรหัสข้อมูล
ต่างจากการเข้ารหัส การถอดรหัสข้อมูลที่เข้ารหัสโดยใช้คีย์ Cloud KMS แบบอสมมาตรจะต้องใช้สิทธิ์เข้าถึงบริการ Cloud KMS แบบออนไลน์ ถอดรหัสข้อความเข้ารหัสจากไฟล์โดยใช้เครื่องมือบรรทัดคำสั่ง gcloud
ดังนี้
$ gcloud kms asymmetric-decrypt \ --location "global" \ --keyring "my-keyring" \ --key "my-asymmetric-encryption-key" \ --version "1" \ --plaintext-file - \ --ciphertext-file ./data.txt.enc
เครื่องมือบรรทัดคำสั่ง gcloud
จะอ่านข้อความเข้ารหัสจากไฟล์และถอดรหัสโดยใช้ Cloud KMS โปรดทราบว่าตัวอย่างนี้ระบุอาร์กิวเมนต์ --plaintext-file
เป็น -
ซึ่งจะเป็นการสั่งให้ gcloud
พิมพ์ผลลัพธ์ไปยังเครื่องชำระเงิน
คอนโซลจะพิมพ์ my-contents
ซึ่งเป็นค่าข้อความธรรมดาเดียวกับไฟล์ด้านบน
7. ยินดีด้วย
คุณเปิดใช้ Cloud KMS API สร้างคีย์การเข้ารหัสแบบไม่สมมาตร และข้อมูลที่เข้ารหัสและถอดรหัสแล้ว Cloud KMS เป็นผลิตภัณฑ์ที่มีประสิทธิภาพและการเข้ารหัส/การถอดรหัสเป็นขีดฆ่าความสามารถเท่านั้น
ล้างข้อมูล
หากสำรวจเสร็จแล้ว โปรดลองลบโปรเจ็กต์
- ไปที่คอนโซล Cloud Platform
- เลือกโปรเจ็กต์ที่คุณต้องการปิดการทำงาน แล้วคลิก "ลบ" ที่ด้านบน การดำเนินการนี้จะกำหนดเวลาการลบโปรเจ็กต์
ดูข้อมูลเพิ่มเติม
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0