Cloud KMS เป็นบริการจัดการคีย์ที่โฮสต์ในระบบคลาวด์ ซึ่งช่วยให้คุณจัดการคีย์การเข้ารหัสสําหรับบริการระบบคลาวด์ได้ด้วยวิธีเดียวกับที่คุณดําเนินการภายในองค์กร โดยรวมถึงการรองรับการเข้ารหัส การถอดรหัส การรับรอง และการรับรองโดยใช้คีย์และแหล่งที่มาประเภทต่างๆ รวมถึง Cloud HSM สําหรับคีย์ที่มีฮาร์ดแวร์รองรับ
ในบทแนะนํานี้ คุณจะได้เรียนรู้วิธีใช้ฟีเจอร์ขั้นสูงของ Cloud Security and Privacy API ซึ่งรวมถึง
- การตั้งค่าที่เก็บข้อมูล Cloud Storage ที่ปลอดภัย
- การจัดการคีย์และข้อมูลที่เข้ารหัสโดยใช้ Cloud KMS
- กําลังดูบันทึกการตรวจสอบของ Cloud Storage
คุณจะนําข้อมูลฉบับย่อจาก Enron Corpus มาเข้ารหัสและโหลดลงใน Cloud Storage
สิ่งที่คุณจะได้เรียนรู้
- วิธีเข้ารหัสข้อมูลและจัดการคีย์การเข้ารหัสโดยใช้ Key Management Service (KMS)
คุณจะใช้
- Cloud KMS
- Cloud Storage
- Cloud SDK
การตั้งค่าสภาพแวดล้อมด้วยตนเอง
หากยังไม่มีบัญชี Google (Gmail หรือ Google Apps) คุณต้องสร้างบัญชี ลงชื่อเข้าใช้คอนโซล Google Cloud Platform (console.cloud.google.com) และสร้างโปรเจ็กต์ใหม่ ดังนี้
โปรดทราบว่ารหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ํากันสําหรับโปรเจ็กต์ Google Cloud ทั้งหมด (ชื่อข้างต้นมีผู้อื่นนําไปใช้แล้ว ขออภัยในความไม่สะดวก) และจะเรียกใน Codelab นี้ว่า PROJECT_ID
ในภายหลัง
จากนั้นคุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากรของ Google Cloud
การเรียกใช้ Codelab นี้ไม่ควรมีค่าใช้จ่ายเกิน 2-3 ดอลลาร์ แต่อาจมากกว่านั้นหากคุณตัดสินใจใช้ทรัพยากรเพิ่มเติมหรือปล่อยให้ทรัพยากรทํางาน (ดู "cleanup" ในตอนท้ายของเอกสารนี้)
ผู้ใช้ใหม่ของ Google Cloud Platform มีสิทธิ์รับช่วงทดลองใช้ฟรี$300
เริ่มต้น Cloud Shell
ใน Codelab นี้ คุณจะใช้ Cloud Shell ซึ่งเป็นสภาพแวดล้อมเสมือนจริงฟรีที่ทํางานใน Google Cloud จากคอนโซล GCP ให้คลิกไอคอน Cloud Shell บนแถบเครื่องมือด้านขวาบน ดังนี้
ใช้เวลาเพียงครู่เดียวในการจัดสรรและเชื่อมต่อกับสภาพแวดล้อม เมื่อเสร็จสิ้นแล้ว คุณจะเห็นข้อมูลดังนี้
เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่คุณต้องการ โดยมีไดเรกทอรีหน้าแรกขนาด 5 GB ถาวรและทํางานอยู่ใน Google Cloud ซึ่งช่วยปรับปรุงประสิทธิภาพและการตรวจสอบสิทธิ์ของเครือข่ายได้อย่างมาก เรียกใช้คําสั่งทั้งหมดจาก Shell นี้เว้นแต่จะระบุไว้เป็นอย่างอื่น
หากต้องการจัดเก็บข้อมูลสําหรับบทแนะนํานี้ ให้สร้างที่เก็บข้อมูล 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 ได้ ขั้นตอนนี้ต้องดําเนินการเพียงครั้งเดียวต่อโปรเจ็กต์ หากต้องการเปิดใช้งานบริการ 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"
ตอนนี้ ให้สร้างคีย์ Crypto ที่ชื่อว่า enron-emails
โดยมีวัตถุประสงค์ encryption
ในคีย์ริงที่คุณเพิ่งสร้าง
$ gcloud kms keys create "enron-emails" \ --location "global" \ --keyring "my-keyring" \ --purpose "encryption"
เปิด Web Cryptographic Keys Web และดูทรัพยากรที่สร้างขึ้นใหม่ ซึ่งอยู่ในส่วน IAM & Admin ในเมนูหลัก
คุณดูและจัดการคีย์ริงและคีย์ Crypto ได้ใน 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) บทบาท Cloud KMS IAM ส่วนใหญ่แบ่งออกเป็น 2 หมวดหมู่ ดังนี้
- สิทธิ์ในการจัดการคีย์
- สิทธิ์ในการใช้คีย์
ตัวอย่างเช่น บทบาทroles/cloudkms.admin
ช่วยให้เจ้าของสร้างคีย์ริง คีย์คริปโต ตั้งค่านโยบาย IAM และดําเนินการที่เกี่ยวข้องกับการจัดการได้ roles/cloudkms.cryptoKeyEncrypterDecrypter
ให้สิทธิ์ข้อมูลที่เข้ารหัสและถอดรหัสแก่เจ้าของ แต่ไม่รวมสิทธิ์การจัดการ
บทบาท IAM จะรับช่วงมาจากทรัพยากรระดับบนสุด หากมีบทบาทบทบาทroles/cloudkms.admin
ในโปรเจ็กต์ Google Cloud บุคคลนั้นจะเป็นผู้ดูแลระบบคีย์ทั้งหมดในโปรเจ็กต์นั้น หากมี roles/cloudkms.admin
ในคีย์ริง ผู้ดูแลระบบจะเป็นผู้ดูแลคีย์ทั้งหมดในคีย์ริงดังกล่าว หากมี roles/cloudkms.admin
ในคีย์ Crypto เดียว ผู้ดูแลระบบจะเป็นผู้ดูแลเฉพาะคีย์นั้นเท่านั้น
สําหรับแบบฝึกหัดนี้ ให้ใช้ข้อมูลประจําตัวของคุณ ดังนี้
$ 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
ไม่มีสิทธิ์ใช้คีย์ แต่จัดการคีย์ได้เท่านั้น หากต้องการมอบความสามารถในการเข้ารหัสและถอดรหัสข้อมูลโดยใช้คีย์ Crypto Key ของ enron-emails
ให้ทําดังนี้
$ 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
ในคีย์ริง ซึ่งจะรวมทรัพยากร Crypto Key ย่อยทั้งหมด คําสั่งที่ 2 จะให้ roles/cloudkms.cryptoKeyEncrypterDecrypter
แต่ใช้เฉพาะคีย์ Crypto 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 ของกิจกรรมระบบคลาวด์ ซึ่งคุณควรจะเห็นการสร้างนี้และการแก้ไขทั้งหมดที่ทํากับคีย์ริง
คุณเข้ารหัสข้อมูลโดยใช้ 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
- โพสต์คําถามและค้นหาคําตอบใน Stackflow โดยใช้แท็ก google-cloud-kms
ใบอนุญาต
ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตทั่วไปของ Creative Commons Attribution 2.0