เข้ารหัสและถอดรหัสข้อมูลด้วย Cloud KMS

1. ภาพรวม

Cloud KMS คือบริการการจัดการคีย์ที่โฮสต์ไว้ในระบบคลาวด์ ซึ่งช่วยให้คุณจัดการคีย์การเข้ารหัสของบริการระบบคลาวด์ได้เช่นเดียวกับที่ทำภายในองค์กร ซึ่งรวมถึงการรองรับการเข้ารหัส การถอดรหัส การรับรอง และการยืนยันโดยใช้ประเภทคีย์และแหล่งที่มาที่หลากหลาย เช่น Cloud HSM สำหรับคีย์ที่สนับสนุนด้วยฮาร์ดแวร์ บทแนะนำนี้จะสอนวิธีเข้ารหัสและถอดรหัสข้อมูลโดยใช้คีย์ Cloud KMS แบบสมมาตร

คุณจะได้เรียนรู้

  • วิธีเปิดใช้ Cloud KMS API
  • วิธีสร้างคีย์ริง Cloud KMS
  • วิธีสร้างคีย์การเข้ารหัส Cloud KMS สำหรับการเข้ารหัส/การถอดรหัสแบบสมมาตร
  • วิธีหมุนเวียนคีย์การเข้ารหัส Cloud KMS แบบสมมาตร

2. การตั้งค่าและข้อกำหนด

การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก

  1. ลงชื่อเข้าใช้ Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ (หากยังไม่มีบัญชี Gmail หรือ G Suite คุณต้องสร้างบัญชี)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนมีคนใช้แล้ว และจะใช้ไม่ได้ ขออภัย) และจะมีการอ้างอิงใน Codelab ว่า PROJECT_ID ในภายหลัง

  1. ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud

การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี ตรวจสอบว่าคุณได้ทำตามวิธีการใน "การล้างข้อมูล" ซึ่งจะแนะนำคุณเกี่ยวกับวิธีปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD

เริ่มต้น Cloud Shell

ใน Codelab นี้ คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมเสมือนจริงแบบฟรีที่ทำงานบน Google Cloud จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบนดังนี้

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมนี้ควรใช้เวลาเพียงครู่เดียว เมื่อเสร็จแล้ว คุณจะเห็นข้อมูลต่อไปนี้

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

เครื่องเสมือนนี้เต็มไปด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 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-symmetric-key ตามวัตถุประสงค์ encryption ภายในคีย์ริงที่คุณเพิ่งสร้าง

$ gcloud kms keys create "my-symmetric-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

5. เข้ารหัสข้อมูล

สร้างไฟล์ที่มีข้อมูลเพื่อเข้ารหัสและใช้เครื่องมือบรรทัดคำสั่ง gcloud เพื่อเข้ารหัสข้อมูลในไฟล์ ดังนี้

$ echo "my-contents" > ./data.txt
$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file ./data.txt \
    --ciphertext-file ./data.txt.enc

ระบบจะบันทึกข้อมูลที่เข้ารหัส (หรือที่เรียกว่า "ข้อความเข้ารหัส") ไว้ใน data.txt.enc ในดิสก์ หากคุณเปิดไฟล์ data.txt.enc คุณจะสังเกตเห็นว่ามีอักขระแปลกๆ และไม่สามารถพิมพ์ได้ เนื่องจากข้อมูลผลลัพธ์อยู่ในรูปแบบไบนารี

เมื่อจัดเก็บข้อความเข้ารหัสในฐานข้อมูลหรือส่งโดยเป็นส่วนหนึ่งของคำขอ HTTP คุณอาจต้องเข้ารหัสข้อมูล กลไกการเข้ารหัสทั่วไปคือ base64

Cloud KMS ไม่จัดเก็บข้อความธรรมดาที่คุณระบุ คุณต้องบันทึกข้อความเข้ารหัสนี้ในตำแหน่งที่ปลอดภัยเนื่องจากจะต้องใช้เพื่อดึงค่าข้อความธรรมดา

6. ถอดรหัสข้อมูล

ถอดรหัสข้อความเข้ารหัสจากไฟล์โดยใช้เครื่องมือบรรทัดคำสั่ง gcloud ดังนี้

$ gcloud kms decrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

เครื่องมือบรรทัดคำสั่ง gcloud จะอ่านข้อความเข้ารหัสจากไฟล์และถอดรหัสโดยใช้ Cloud KMS โปรดทราบว่าตัวอย่างนี้ระบุอาร์กิวเมนต์ --plaintext-file เป็น - ซึ่งจะเป็นการสั่งให้ gcloud พิมพ์ผลลัพธ์ไปยังเครื่องชำระเงิน

คอนโซลจะพิมพ์ my-contents ซึ่งเป็นค่าข้อความธรรมดาเดียวกับไฟล์ด้านบน

7. หมุนคีย์

ใน Cloud KMS จริงๆ แล้ว CryptoKey คือคอลเล็กชันของเวอร์ชันคีย์การเข้ารหัส คุณสร้างเวอร์ชันคีย์การเข้ารหัสใหม่เพื่อทำการหมุนเวียนคีย์ได้ นอกจากนี้ Cloud KMS ยังหมุนเวียนคีย์โดยอัตโนมัติตามกำหนดเวลาได้ด้วย

หากต้องการหมุนเวียนคีย์ด้วยตนเอง ให้สร้างเวอร์ชันคีย์การเข้ารหัสใหม่และตั้งค่าเป็นเวอร์ชันหลัก

$ gcloud kms keys versions create \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key" \
    --primary

คำขอในอนาคตทั้งหมดเพื่อเข้ารหัสข้อมูลจะใช้คีย์ใหม่นี้ คีย์เก่าจะยังคงใช้งานได้เพื่อถอดรหัสข้อมูลที่เคยเข้ารหัสไว้ก่อนหน้านี้โดยใช้คีย์เหล่านั้น Cloud KMS จะกำหนดคีย์การถอดรหัสที่เหมาะสมโดยอัตโนมัติตามข้อความเข้ารหัสที่มีให้ คุณไม่จำเป็นต้องระบุเวอร์ชันคีย์การเข้ารหัสที่จะใช้สำหรับการถอดรหัส

หากไม่ต้องการให้มีการถอดรหัสค่าข้อความเข้ารหัสที่เข้ารหัสโดยใช้เวอร์ชันคีย์การเข้ารหัสที่เก่ากว่าโดยใช้ Cloud KMS คุณสามารถปิดหรือทำลายเวอร์ชันคีย์การเข้ารหัสดังกล่าวได้ การปิดใช้เป็นการดำเนินการที่ย้อนกลับได้ ส่วนการทำลายจะมีผลถาวร วิธีปิดใช้เวอร์ชัน

$ gcloud kms keys versions disable "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-symmetric-key"

8. ยินดีด้วย

คุณเปิดใช้ Cloud KMS API สร้างคีย์การเข้ารหัสแบบสมมาตร และข้อมูลที่เข้ารหัสและถอดรหัสแล้ว Cloud KMS เป็นผลิตภัณฑ์ที่มีประสิทธิภาพและการเข้ารหัส/การถอดรหัสเป็นขีดฆ่าความสามารถเท่านั้น

ล้างข้อมูล

หากสำรวจเสร็จแล้ว โปรดลองลบโปรเจ็กต์

  • ไปที่คอนโซล Cloud Platform
  • เลือกโปรเจ็กต์ที่คุณต้องการปิดการทำงาน แล้วคลิก "ลบ" ที่ด้านบน การดำเนินการนี้จะกำหนดเวลาการลบโปรเจ็กต์

ดูข้อมูลเพิ่มเติม

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้ใบอนุญาตทั่วไปครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 2.0