เริ่มต้นใช้งาน Cloud KMS

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) และสร้างโปรเจ็กต์ใหม่ ดังนี้

ภาพหน้าจอจาก 2016-02-10 12:45:26.png

โปรดทราบว่ารหัสโปรเจ็กต์ ซึ่งเป็นชื่อที่ไม่ซ้ํากันสําหรับโปรเจ็กต์ 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 เพื่อช่วยให้คุณตอบคําถามเกี่ยวกับ &quot ผู้ที่ สถานที่ สถานที่ และเวลาที่เป็นเจ้าของ ภายในโปรเจ็กต์ 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

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

ใบอนุญาต

ผลงานนี้ได้รับอนุญาตภายใต้สัญญาอนุญาตทั่วไปของ Creative Commons Attribution 2.0