1. ภาพรวม
Cloud KMS เป็นบริการจัดการคีย์ที่โฮสต์ในระบบคลาวด์ ซึ่งช่วยให้คุณจัดการคีย์การเข้ารหัสสำหรับบริการคลาวด์ได้ในลักษณะเดียวกับที่ทำในองค์กร โดยรองรับการเข้ารหัส การถอดรหัส การลงนาม และการยืนยันโดยใช้คีย์ประเภทและแหล่งที่มาต่างๆ รวมถึง Cloud HSM สำหรับคีย์ที่สำรองข้อมูลด้วยฮาร์ดแวร์ บทแนะนำนี้จะสอนวิธีเข้ารหัสและถอดรหัสข้อมูลโดยใช้คีย์ Cloud KMS แบบอสมมาตร
คุณจะได้เรียนรู้
- วิธีเปิดใช้ Cloud KMS API
- วิธีสร้างคีย์ริง
- วิธีสร้าง CryptoKey สำหรับการเข้ารหัส/การถอดรหัสแบบอสมมาตร
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
- ลงชื่อเข้าใช้ Cloud Console แล้วสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้
- จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การทำตาม Codelab นี้ไม่ควรมีค่าใช้จ่ายมากนัก หรืออาจไม่มีเลย โปรดทำตามวิธีการในส่วน "การล้างข้อมูล" ซึ่งจะแนะนำวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ Google Cloud รายใหม่มีสิทธิ์เข้าร่วมโปรแกรมช่วงทดลองใช้ฟรีมูลค่า$300 USD
เริ่มต้น Cloud Shell
ใน Codelab นี้ คุณจะได้ใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมเสมือนฟรีที่ทำงานบน Google Cloud จาก GCP Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างต่อไปนี้
เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 5 GB และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก เรียกใช้คำสั่งทั้งหมดจากเชลล์นี้ เว้นแต่จะได้รับคำสั่งเป็นอย่างอื่น
3. เปิดใช้บริการ Cloud KMS
คุณต้องเปิดใช้บริการในโปรเจ็กต์ก่อนจึงจะใช้ Cloud KMS ได้ โดยจำเป็นต้องดำเนินการอย่างน้อย 1 ครั้งต่อโปรเจ็กต์ หากต้องการเปิดใช้บริการ 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
- เลือกโปรเจ็กต์ที่ต้องการปิด แล้วคลิก "ลบ" ที่ด้านบน ซึ่งจะเป็นการกำหนดเวลาให้ลบโปรเจ็กต์
ดูข้อมูลเพิ่มเติม
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป