เข้ารหัสและถอดรหัสข้อมูลด้วย 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 ทั้งหมด (ชื่อด้านบนมีผู้ใช้แล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID ในภายหลังใน Codelab นี้

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

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

เริ่มต้น Cloud Shell

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

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

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

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาซอฟต์แวร์ทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักแบบถาวรขนาด 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-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 คีย์การเข้ารหัสคือชุดของเวอร์ชันคีย์การเข้ารหัส คุณสร้างเวอร์ชันคีย์ลับใหม่เพื่อหมุนเวียนคีย์ได้ นอกจากนี้ Cloud KMS ยังหมุนเวียนคีย์ตามกำหนดเวลาโดยอัตโนมัติได้ด้วย

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

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

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

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

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

8. ยินดีด้วย

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

ล้างข้อมูล

หากสำรวจเสร็จแล้ว โปรดพิจารณาลบโปรเจ็กต์

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

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป