Cloud KMS เป็นบริการจัดการคีย์ที่โฮสต์ในระบบคลาวด์ ซึ่งช่วยให้คุณจัดการคีย์การเข้ารหัสสำหรับบริการคลาวด์ได้ในลักษณะเดียวกับที่ทำในองค์กร โดยรองรับการเข้ารหัส การถอดรหัส การลงนาม และการยืนยันโดยใช้คีย์ประเภทและแหล่งที่มาต่างๆ รวมถึง Cloud HSM สำหรับคีย์ที่สำรองข้อมูลด้วยฮาร์ดแวร์
ในบทแนะนำนี้ คุณจะได้เรียนรู้วิธีใช้ฟีเจอร์ขั้นสูงของ Cloud Security และ Privacy API ซึ่งรวมถึง
- การตั้งค่าที่เก็บข้อมูล Cloud Storage ที่ปลอดภัย
- การจัดการคีย์และข้อมูลที่เข้ารหัสโดยใช้ Cloud KMS
- การดูบันทึกการตรวจสอบ Cloud Storage
คุณจะนำข้อมูลที่ย่อมาจาก Enron Corpus มาเข้ารหัสและโหลดลงใน Cloud Storage
คุณจะได้เรียนรู้
- วิธีกำหนดให้ต้องเข้ารหัสข้อมูลและจัดการคีย์การเข้ารหัสโดยใช้บริการการจัดการคีย์ (KMS)
คุณจะใช้
- Cloud KMS
- Cloud Storage
- Cloud SDK
การตั้งค่าสภาพแวดล้อมแบบเรียนรู้ด้วยตนเอง
หากยังไม่มีบัญชี Google (Gmail หรือ Google Apps) คุณต้องสร้างบัญชี ลงชื่อเข้าใช้คอนโซล Google Cloud Platform (console.cloud.google.com) แล้วสร้างโปรเจ็กต์ใหม่โดยทำดังนี้
โปรดจดจำรหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ำกันในโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อด้านบนถูกใช้ไปแล้วและจะใช้ไม่ได้ ขออภัย) ซึ่งจะเรียกว่า PROJECT_ID
ในภายหลังใน Codelab นี้
จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร Google Cloud
การทำ Codelab นี้ไม่ควรมีค่าใช้จ่ายเกิน 2-3 ดอลลาร์ แต่ก็อาจมีค่าใช้จ่ายมากกว่านี้หากคุณตัดสินใจใช้ทรัพยากรเพิ่มเติมหรือปล่อยให้ทรัพยากรทำงานต่อไป (ดูส่วน "การล้างข้อมูล" ที่ท้ายเอกสารนี้)
ผู้ใช้ใหม่ของ Google Cloud Platform มีสิทธิ์ทดลองใช้ฟรี$300
เริ่มต้น Cloud Shell
ใน Codelab นี้ คุณจะได้ใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมเสมือนฟรีที่ทำงานบน Google Cloud จาก GCP Console ให้คลิกไอคอน Cloud Shell ในแถบเครื่องมือด้านขวาบน
การจัดสรรและเชื่อมต่อกับสภาพแวดล้อมจะใช้เวลาเพียงไม่กี่นาที เมื่อเสร็จแล้ว คุณควรเห็นข้อความคล้ายกับตัวอย่างนี้
เครื่องเสมือนนี้มาพร้อมเครื่องมือพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหลักขนาด 5 GB ที่คงอยู่ถาวร และทำงานบน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก เรียกใช้คำสั่งทั้งหมดจากเชลล์นี้ เว้นแต่จะได้รับคำสั่งเป็นอย่างอื่น
สร้างที่เก็บข้อมูล Cloud Storage เพื่อจัดเก็บข้อมูลสำหรับบทแนะนำนี้ เนื่องจากชื่อที่เก็บข้อมูล Cloud Storage ต้องไม่ซ้ำกันทั่วโลก ให้ใส่รหัสโปรเจ็กต์เป็นคำนำหน้าชื่อที่เก็บข้อมูล
$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails
จากนั้นสร้างที่เก็บข้อมูลโดยทำดังนี้
$ gsutil mb gs://${BUCKET_NAME}
Enron Corpus เป็นฐานข้อมูลขนาดใหญ่ที่มีอีเมลกว่า 600,000 ฉบับซึ่งสร้างขึ้นโดยพนักงาน 158 คนของ Enron Corporation ระบบได้คัดลอกข้อมูลนี้ไปยังที่เก็บข้อมูล Cloud Storage ที่ชื่อ gs://enron_emails/
แล้ว
ดาวน์โหลดไฟล์อีเมลไฟล์ใดไฟล์หนึ่งลงในเครื่อง
$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!
ตรวจสอบไฟล์ที่ดาวน์โหลดเพื่อยืนยันว่าเป็นอีเมลจริง โดยทำดังนี้
$ tail 1.
อีเมลจะมีข้อความดังนี้
Attached is the Delta position for 1/18... # ...
นอกจากอีเมลแล้ว บัคเก็ตยังมีรูปภาพด้วย บทแนะนำนี้ใช้อีเมลและรูปภาพทั้งแบบข้อความธรรมดา
คุณต้องเปิดใช้บริการในโปรเจ็กต์ก่อนจึงจะใช้ Cloud KMS ได้ โดยจำเป็นต้องดำเนินการอย่างน้อย 1 ครั้งต่อโปรเจ็กต์ หากต้องการเปิดใช้บริการ Cloud KMS ให้เรียกใช้คำสั่งต่อไปนี้
$ gcloud services enable cloudkms.googleapis.com \ --project "${GOOGLE_CLOUD_PROJECT}"
การเปิดใช้อาจใช้เวลาถึง 1 นาที คำสั่งจะรายงานว่าสำเร็จเมื่อเสร็จสิ้น
สร้างคีย์ริง Cloud KMS ใน Cloud KMS คีย์ริงคือคอลเล็กชันเชิงตรรกะของคีย์การเข้ารหัส พวงกุญแจมีข้อมูลเมตาเกี่ยวกับคีย์ เช่น ตำแหน่งของคีย์ สร้างคีย์ริงชื่อ my-keyring
ในภูมิภาค global
$ gcloud kms keyrings create "my-keyring" \ --location "global"
ตอนนี้ให้สร้าง CryptoKey ชื่อ enron-emails
โดยมีวัตถุประสงค์ encryption
ภายในคีย์ริงที่เพิ่งสร้าง
$ gcloud kms keys create "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --purpose "encryption"
เปิด Web UI ของคีย์การเข้ารหัส แล้วดูทรัพยากรที่สร้างขึ้นใหม่ ซึ่งจะอยู่ในส่วน IAM และผู้ดูแลระบบในเมนูหลัก
คุณดูและจัดการ Key Ring และคีย์เข้ารหัสลับได้ใน Cloud Console
เข้ารหัสเนื้อหาของอีเมลที่เราดาวน์โหลดไว้ก่อนหน้านี้โดยใช้ Cloud KMS บทแนะนำนี้ใช้เครื่องมือบรรทัดคำสั่ง gcloud
แต่คุณยังเข้ารหัสข้อมูลโดยใช้ Cloud KMS API ได้ด้วย
$ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file ./1. \ --ciphertext-file ./1.enc
ซึ่งจะสร้างไฟล์ใหม่ในดิสก์ 1.enc
ที่มีเนื้อหาของไฟล์ที่เข้ารหัส เมื่อเข้ารหัสข้อมูลด้วย Cloud KMS แล้ว ให้อัปโหลดไฟล์ที่เข้ารหัสไปยังที่เก็บข้อมูล Cloud Storage
$ gsutil cp ./1.enc gs://${BUCKET_NAME}
Cloud KMS ผสานรวมกับ Google Cloud Identity and Access Management (IAM) บทบาท IAM ของ Cloud KMS แบ่งออกเป็น 2 หมวดหมู่หลักๆ ดังนี้
- สิทธิ์ในการจัดการคีย์
- สิทธิ์ในการใช้คีย์
เช่น roles/cloudkms.admin
บทบาทช่วยให้ผู้ถือสร้างคีย์ริง คีย์การเข้ารหัส ตั้งค่านโยบาย IAM และดำเนินการที่เกี่ยวข้องกับการจัดการได้ roles/cloudkms.cryptoKeyEncrypterDecrypter
ให้สิทธิ์ผู้ถือในการเข้ารหัสและถอดรหัสข้อมูล แต่ไม่รวมสิทธิ์การจัดการ
บทบาท IAM จะรับช่วงต่อจากทรัพยากรระดับบนสุด หากผู้ใช้มีroles/cloudkms.admin
บทบาทในโปรเจ็กต์ Google Cloud ผู้ใช้จะเป็นผู้ดูแลระบบของคีย์ทั้งหมดในโปรเจ็กต์นั้น หากมี roles/cloudkms.admin
ในคีย์ริง แสดงว่าผู้ใช้เป็นผู้ดูแลระบบของคีย์ทั้งหมดในคีย์ริงนั้น หากมี roles/cloudkms.admin
ในคีย์การเข้ารหัสเดียว ผู้ใช้จะเป็นผู้ดูแลระบบของคีย์นั้นเท่านั้น
สำหรับการฝึกนี้ ให้ใช้ข้อมูลประจำตัวของคุณ
$ export MY_IDENTITY=you@gmail.com # or you@example.com
มอบหมายความสามารถในการจัดการทรัพยากร Cloud KMS ในคีย์ริงที่สร้างไว้ข้างต้นให้กับข้อมูลประจำตัวโดยใช้เครื่องมือบรรทัดคำสั่ง gcloud
ดังนี้
$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \ --location "global" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.admin"
บทบาทroles/cloudkms.admin
ไม่มีสิทธิ์ใช้คีย์ แต่มีสิทธิ์จัดการคีย์เท่านั้น หากต้องการให้ข้อมูลประจำตัวของคุณมีความสามารถในการเข้ารหัสและถอดรหัสข้อมูลโดยใช้ enron-emails
CryptoKey ให้ทำดังนี้
$ gcloud kms keys add-iam-policy-binding "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --member "user:${MY_IDENTITY}" \ --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"
โปรดทราบว่าคำสั่งแรกจะให้บทบาท roles/cloudkms.admin
ในพวงกุญแจ ซึ่งจะรวมถึงทรัพยากรคีย์การเข้ารหัสย่อยด้วย คำสั่งที่ 2 จะให้สิทธิ์ roles/cloudkms.cryptoKeyEncrypterDecrypter
แต่เฉพาะใน CryptoKey enron-emails
เท่านั้น
นอกจากนี้ คุณยังดูและมอบหมายบทบาทใน Cloud KMS UI ใน Cloud Console ได้ด้วย
นอกจากการเข้ารหัสไฟล์เดียวแล้ว คุณยังเข้ารหัสคอลเล็กชันไฟล์ได้ด้วยการใช้สคริปต์บางอย่าง ตัวอย่างนี้จะสตรีมอีเมลทั้งหมดสำหรับ allen-p เข้ารหัสอีเมล และอัปโหลดค่าที่เข้ารหัสแล้วไปยังที่เก็บข้อมูล Cloud Storage
DIR="gs://enron_emails/allen-p" for file in $(gsutil ls ${DIR}/**); do ENC_NAME="$(basename ${file}).enc" gsutil cat ${file} \ | \ gcloud kms encrypt \ --location "global" \ --keyring "my-keyring" \ --key "enron-emails" \ --plaintext-file - \ --ciphertext-file - \ | \ gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME} echo "Copied ${ENC_NAME}" done
ซึ่งจะวนซ้ำไฟล์ทั้งหมดในไดเรกทอรีที่ระบุในที่เก็บข้อมูล Cloud Storage ตัวอย่าง เข้ารหัสโดยใช้ Cloud KMS และอัปโหลดไปยัง Google Cloud Storage
หลังจากสคริปต์ทำงานเสร็จแล้ว คุณจะดูไฟล์ที่เข้ารหัสได้ใน Cloud Storage UI คุณควรเห็นข้อความคล้ายกับข้อความต่อไปนี้
Cloud Audit Logging มีสตรีมบันทึก 2 รายการ ได้แก่ บันทึกกิจกรรมของผู้ดูแลระบบและบันทึกการเข้าถึงข้อมูล ซึ่งบริการของ Google Cloud จะสร้างขึ้นเพื่อช่วยตอบคำถามที่ว่า "ใครทำอะไร ที่ไหน และเมื่อใด" ภายในโปรเจ็กต์ Google Cloud Platform
หากต้องการดูกิจกรรมของทรัพยากรใน KMS ให้คลิกพวงกุญแจแล้วเลือกดูกิจกรรม ซึ่งจะนำคุณไปยัง UI กิจกรรมในระบบคลาวด์ ซึ่งคุณควรเห็นการสร้างและการแก้ไขทั้งหมดที่ทำกับ KeyRing
คุณเข้ารหัสข้อมูลโดยใช้ Cloud KMS และจัดเก็บข้อมูลที่เข้ารหัสไว้ใน Cloud Storage เรียบร้อยแล้ว
การล้างข้อมูล
ปล่อยทรัพยากรที่สร้างขึ้นในระหว่างบทแนะนำนี้ ลบที่เก็บข้อมูล Cloud Storage ที่สร้างไว้ก่อนหน้านี้
$ gsutil rm -r gs://${BUCKET_NAME}
ลบทรัพยากร Cloud KMS ไม่ได้ อย่างไรก็ตาม คุณสามารถทำลายเนื้อหาของคีย์เพื่อไม่ให้ใช้ได้อีกโดยทำดังนี้
$ gcloud kms keys versions destroy "1" \ --location "global" \ --key "enron-emails" \ --keyring "my-keyring"
เราได้พูดถึง
- การใช้ Cloud IAM เพื่อจัดการสิทธิ์ Cloud KMS
- การใช้ Cloud KMS เพื่อเข้ารหัสข้อมูล
- การใช้ Cloud Storage เพื่อจัดเก็บข้อมูลที่เข้ารหัส
- การใช้ Cloud Audit Logging เพื่อดูกิจกรรมทั้งหมดสำหรับคีย์และพวงกุญแจ
ขั้นตอนถัดไป
- ใช้ Cloud KMS เพื่อเข้ารหัสคอลัมน์ในฐานข้อมูล เช่น BigQuery
- ตั้งค่ากำหนดการหมุนเวียนอัตโนมัติในคีย์ Cloud KMS
ดูข้อมูลเพิ่มเติม
- ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีหมุนเวียนคีย์การเข้ารหัส
- ดูข้อมูลเกี่ยวกับการเข้ารหัสสองชั้น
- อ่านเกี่ยวกับการเข้ารหัสฝั่งเซิร์ฟเวอร์สำหรับที่เก็บข้อมูล Cloud Storage
- โพสต์คำถามและค้นหาคำตอบใน Stackoverflow โดยใช้แท็ก google-cloud-kms
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตครีเอทีฟคอมมอนส์สำหรับยอมรับสิทธิของผู้สร้าง (Creative Commons Attribution License) 2.0 แบบทั่วไป