1. บทนำ
ภาพรวม
Cloud Functions เป็นโซลูชันประมวลผลที่ใช้งานง่ายสำหรับนักพัฒนาแอปในการสร้างฟังก์ชันแบบสแตนด์อโลนวัตถุประสงค์เดียวที่ตอบสนองต่อเหตุการณ์ระบบคลาวด์ โดยไม่ต้องจัดการเซิร์ฟเวอร์หรือสภาพแวดล้อมรันไทม์
คุณสามารถใช้คีย์การเข้ารหัสที่จัดการโดยลูกค้า (CMEK) ของบริการการจัดการคีย์ระบบคลาวด์เพื่อปกป้อง Cloud Functions และข้อมูลที่เกี่ยวข้องเมื่อไม่มีการเคลื่อนไหว การทำให้ฟังก์ชันที่มี CMEK ใช้งานได้ช่วยปกป้องข้อมูลที่เชื่อมโยงกับฟังก์ชันดังกล่าวโดยใช้คีย์การเข้ารหัสที่อยู่ในการควบคุมอย่างเต็มรูปแบบ การเข้ารหัสประเภทนี้ช่วยให้คุณสามารถปฏิบัติตามข้อกำหนดในบางอุตสาหกรรม เช่น บริการทางการเงิน เนื่องจากคีย์เป็นของคุณและ Google ไม่ได้ควบคุมคีย์ดังกล่าว จึงไม่มีผู้ใด (รวมถึงตัวคุณเอง) เข้าถึงข้อมูลที่ได้รับการปกป้องโดยคีย์การเข้ารหัสเหล่านี้ได้เมื่อปิดใช้หรือทำลายคีย์ดังกล่าว
สำหรับ Cloud Functions นั้น CMEK จะเข้ารหัสข้อมูลต่อไปนี้
- ซอร์สโค้ดของฟังก์ชันที่อัปโหลดเพื่อการติดตั้งใช้งานและจัดเก็บไว้โดย Google ใน Cloud Storage ซึ่งใช้ในกระบวนการบิลด์
- ผลลัพธ์ของกระบวนการบิลด์ฟังก์ชัน รวมถึงอิมเมจคอนเทนเนอร์ที่สร้างขึ้นจากซอร์สโค้ดของฟังก์ชัน และอินสแตนซ์แต่ละรายการของฟังก์ชันที่มีการทำให้ใช้งานได้
- ข้อมูลที่ไม่มีการเคลื่อนไหวสำหรับช่องทางการส่งกิจกรรมภายใน (รุ่นที่ 1 เท่านั้น)
ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลที่เข้ารหัสได้ในเอกสารประกอบของ Cloud Function CMEK
สิ่งที่คุณจะสร้าง
Codelab นี้แสดงวิธีทำให้ Cloud Function (รุ่นที่ 1 หรือรุ่นที่ 2) ที่เข้ารหัสโดยใช้ CMEK ได้ Codelab นี้ใช้ Cloud Function สาธารณะ กล่าวคือเป็นฟังก์ชันที่ไม่ต้องมีการตรวจสอบสิทธิ์ในการสาธิต คุณสามารถเรียกใช้ฟังก์ชันที่เปิดใช้ CMEK ที่ตรวจสอบสิทธิ์แล้วได้เช่นเดียวกับ Cloud Function อื่นๆ ที่ต้องมีการตรวจสอบสิทธิ์
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างคีย์ CMEK บนคีย์ริงแบบสมมาตรที่มีอยู่
- วิธีสร้างที่เก็บ Artifact Registry
- วิธีกำหนดค่า CMEK บน Cloud Function สำหรับทั้งรุ่นที่ 1 และ 2
2. การตั้งค่าและข้อกำหนด
ข้อกำหนดเบื้องต้น
- คุณเข้าสู่ระบบ Cloud Console แล้ว
- ก่อนหน้านี้คุณได้ทำให้ Cloud Function ที่ทริกเกอร์ HTTP ใช้งานได้ (เพื่อยืนยันว่าคุณเปิดใช้บทบาทและ API ที่เหมาะสม)
เปิดใช้งาน Cloud Shell
- คลิกเปิดใช้งาน Cloud Shell
จาก Cloud Console
หากเริ่มต้นใช้งาน Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอตรงกลางที่อธิบายว่านี่คืออะไร หากระบบแสดงหน้าจอตรงกลาง ให้คลิกต่อไป
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
เครื่องเสมือนนี้โหลดด้วยเครื่องมือการพัฒนาทั้งหมดที่จำเป็น โดยมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพของเครือข่ายและการตรวจสอบสิทธิ์ได้อย่างมาก งานส่วนใหญ่ใน Codelab นี้สามารถทำได้โดยใช้เบราว์เซอร์
เมื่อเชื่อมต่อกับ Cloud Shell แล้ว คุณควรเห็นข้อความตรวจสอบสิทธิ์และโปรเจ็กต์ได้รับการตั้งค่าเป็นรหัสโปรเจ็กต์แล้ว
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคุณได้รับการตรวจสอบสิทธิ์แล้ว
gcloud auth list
เอาต์พุตจากคำสั่ง
Credentialed Accounts ACTIVE ACCOUNT * <my_account>@<my_domain.com> To set the active account, run: $ gcloud config set account `ACCOUNT`
- เรียกใช้คำสั่งต่อไปนี้ใน Cloud Shell เพื่อยืนยันว่าคำสั่ง gcloud รู้เกี่ยวกับโปรเจ็กต์ของคุณ
gcloud config list project
เอาต์พุตจากคำสั่ง
[core] project = <PROJECT_ID>
หากไม่ใช่ ให้ตั้งคำสั่งด้วยคำสั่งนี้
gcloud config set project <PROJECT_ID>
เอาต์พุตจากคำสั่ง
Updated property [core/project].
3. สร้างคีย์ริงและคีย์ใหม่สำหรับ Cloud Functions
ตรวจสอบว่า Cloud KMS API เปิดใช้อยู่โดยเรียกใช้คำสั่งต่อไปนี้
gcloud services enable cloudkms.googleapis.com
ก่อนอื่น ให้สร้างตัวแปรสภาพแวดล้อมเพื่อให้มีชื่อคีย์ริง ชื่อคีย์ ภูมิภาค และตัวแปรอื่นๆ ที่ใช้ใน Codelab นี้
KEYRING_NAME="keyring-functions" REGION="us-central1" KEY_NAME="key-encrypted-function" PROJECT_ID=$(gcloud config get-value project) PROJECT_NUMBER="$(gcloud projects describe $PROJECT_ID --format='value(projectNumber)')" USER_EMAIL="$(gcloud config list account --format "value(core.account)")"
จากนั้นสร้างคีย์ริง ซึ่งเป็นทรัพยากรรูทสำหรับคีย์ Cloud KMS และเวอร์ชันคีย์
gcloud kms keyrings create $KEYRING_NAME --location $REGION
สุดท้ายนี้ ตอนนี้คุณสร้างคีย์แบบสมมาตรในคีย์ริงใหม่ภายใน Cloud KMS ได้แล้ว
gcloud kms keys create $KEY_NAME --keyring $KEYRING_NAME --location $REGION --purpose "encryption"
4. สร้างที่เก็บ Artifact Registry รูปแบบ Docker ที่เปิดใช้ CMEK
ในส่วนนี้ คุณจะสร้างที่เก็บที่มีรูปแบบ Docker ใน Artifact Registry ที่เปิดใช้ CMEK คีย์นี้จะเป็นคีย์เดียวกับที่ใช้ในการทำให้ Cloud Function ใช้งานได้
ก่อนอื่น คุณจะต้องมีบัญชีบริการสำหรับ Artifact Registry คุณสร้างแท็กได้โดยเรียกใช้คำสั่งนี้
gcloud beta services identity create --service=artifactregistry.googleapis.com --project=$PROJECT_ID
ใช้คำสั่งต่อไปนี้เพื่อมอบบทบาท IAM สำหรับ CryptoKey Encrypter/Derypter IAM (roles/cloudkms.cryptoKeyEncrypterDecrypter
) ให้กับบัญชีบริการ Artifact Registry เพื่อให้มีสิทธิ์เข้าถึงคีย์
gcloud kms keys add-iam-policy-binding \ $KEY_NAME --location $REGION --keyring=$KEYRING_NAME \ --member serviceAccount:service-$PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
และให้บทบาทกับหลักการที่จะสร้างที่เก็บในรีจิสทรีอาร์ติแฟกต์ เช่น บัญชีที่ใช้งานอยู่ในปัจจุบัน คุณยืนยันบัญชีที่ใช้งานอยู่ในปัจจุบันได้โดยเรียกใช้รายการการตรวจสอบสิทธิ์ gcloud
gcloud kms keys add-iam-policy-binding \ $KEY_NAME --location $REGION --keyring=$KEYRING_NAME \ --member user:$USER_EMAIL \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
ตอนนี้คุณสร้างที่เก็บในรูปแบบ Docker ที่เปิดใช้ CMEK ได้แล้ว
หมายเหตุ: ภูมิภาคต้องเป็นภูมิภาคเดียวกับคีย์ CMEK
REPO_NAME=my-cmek-encrypted-repo KEY_FULLPATH=projects/"$PROJECT_ID"/locations/"$REGION"/keyRings/"$KEYRING_NAME"/cryptoKeys/"$KEY_NAME" gcloud artifacts repositories create $REPO_NAME \ --repository-format=docker \ --location=$REGION \ --kms-key=$KEY_FULLPATH \ --async
คุณจะดูที่เก็บ Artifact Registry ใหม่ได้โดยใช้คำสั่งนี้
gcloud artifacts repositories describe $REPO_NAME --location=$REGION
5. ให้สิทธิ์เข้าถึงคีย์แก่บัญชีบริการ (รุ่นที่ 2)
ส่วนนี้จะครอบคลุมการสร้างบัญชีบริการสำหรับฟังก์ชันรุ่นที่ 2 หากคุณกำลังสร้างฟังก์ชันรุ่นที่ 1 โปรดไปยังส่วนถัดไป
คุณต้องให้สิทธิ์เข้าถึงคีย์แก่ตัวแทนบริการหลายรายโดยมอบบทบาท IAM ผู้เข้ารหัส/ผู้ถอดรหัส CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter
) Agent บริการเหล่านี้ใช้เพื่อเข้าถึงซอร์สโค้ดที่จัดเก็บไว้ใน Cloud Storage จัดเก็บอิมเมจฟังก์ชันในที่เก็บที่มีการป้องกันด้วย CMEK ใน Artifact Registry และเพื่อติดตั้งใช้งาน Cloud Function ที่เข้ารหัส CMEK
ขั้นตอนสำหรับฟังก์ชันรุ่นที่ 2
- ให้สิทธิ์เข้าถึงคีย์แก่ Agent บริการ Cloud Run ด้วยคำสั่งต่อไปนี้
CLOUDRUN_SA=service-$PROJECT_NUMBER@serverless-robot-prod.iam.gserviceaccount.com gcloud kms keys add-iam-policy-binding $KEY_NAME \ --keyring=$KEYRING_NAME \ --location=$REGION \ --member=serviceAccount:$CLOUDRUN_SA \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
- มอบสิทธิ์เข้าถึงคีย์ให้แก่ Agent บริการ Eventarc ดังนี้
EVENTARC_SA=service-$PROJECT_NUMBER@gcp-sa-eventarc.iam.gserviceaccount.com gcloud kms keys add-iam-policy-binding $KEY_NAME \ --keyring=$KEYRING_NAME \ --location=$REGION \ --member=serviceAccount:$EVENTARC_SA \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
- มอบสิทธิ์เข้าถึงคีย์ให้แก่ Agent บริการ Artifact Registry
AR_SA=service-$PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com gcloud kms keys add-iam-policy-binding $KEY_NAME \ --keyring=$KEYRING_NAME \ --location=$REGION \ --member=serviceAccount:$AR_SA \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
- มอบสิทธิ์เข้าถึงคีย์ให้แก่ Agent บริการ Cloud Storage
STORAGE_SA=service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com gcloud kms keys add-iam-policy-binding $KEY_NAME \ --keyring=$KEYRING_NAME \ --location=$REGION \ --member=serviceAccount:$STORAGE_SA \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
ในส่วนถัดไป คุณจะเห็นวิธีสร้างและทำให้ฟังก์ชันที่เข้ารหัส CMEK ใช้งานได้
6. ให้สิทธิ์เข้าถึงคีย์แก่บัญชีบริการ (รุ่นที่ 1)
ส่วนนี้จะครอบคลุมการสร้างบัญชีบริการสำหรับฟังก์ชันรุ่นที่ 1 หากเคยสร้างบัญชีบริการสำหรับฟังก์ชันรุ่นที่ 2 ไว้แล้ว โปรดไปที่ส่วนถัดไป
คุณต้องให้สิทธิ์เข้าถึงคีย์แก่ตัวแทนบริการหลายรายโดยมอบบทบาท IAM ผู้เข้ารหัส/ผู้ถอดรหัส CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter
) Agent บริการเหล่านี้ใช้เพื่อเข้าถึงซอร์สโค้ดที่จัดเก็บไว้ใน Cloud Storage จัดเก็บอิมเมจฟังก์ชันในที่เก็บที่มีการป้องกันด้วย CMEK ใน Artifact Registry และเพื่อติดตั้งใช้งาน Cloud Function ที่เข้ารหัส CMEK
ขั้นตอนสำหรับฟังก์ชันรุ่นที่ 1
- มอบสิทธิ์เข้าถึงคีย์ให้แก่ Agent บริการ Cloud Functions
FUNCTION_SA=service-$PROJECT_NUMBER@gcf-admin-robot.iam.gserviceaccount.com gcloud kms keys add-iam-policy-binding $KEY_NAME \ --keyring=$KEYRING_NAME \ --location=$REGION \ --member=serviceAccount:$FUNCTION_SA \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
- มอบสิทธิ์เข้าถึงคีย์ให้แก่ Agent บริการ Artifact Registry
AR_SA=service-$PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com gcloud kms keys add-iam-policy-binding $KEY_NAME \ --keyring=$KEYRING_NAME \ --location=$REGION \ --member=serviceAccount:$AR_SA \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
- มอบสิทธิ์เข้าถึงคีย์ให้แก่ Agent บริการ Cloud Storage
STORAGE_SA=service-$PROJECT_NUMBER@gs-project-accounts.iam.gserviceaccount.com gcloud kms keys add-iam-policy-binding $KEY_NAME \ --keyring=$KEYRING_NAME \ --location=$REGION \ --member=serviceAccount:$STORAGE_SA \ --role=roles/cloudkms.cryptoKeyEncrypterDecrypter
ในส่วนถัดไป คุณจะเห็นวิธีสร้างและทำให้ฟังก์ชันที่เข้ารหัส CMEK ใช้งานได้
7. สร้างฟังก์ชันที่เข้ารหัส CMEK (รุ่นที่ 2)
ส่วนนี้จะครอบคลุมการสร้างฟังก์ชันรุ่นที่ 2 คุณสามารถดำเนินการต่อในหัวข้อถัดไปเพื่อดูวิธีสำหรับรุ่นที่ 1
ตอนนี้คุณมีที่เก็บ Artifact Registry ที่กำหนดค่าด้วย CMEK และให้สิทธิ์เข้าถึง Cloud Functions กับคีย์แล้ว ตอนนี้คุณทำให้ฟังก์ชันที่เข้ารหัสโดยใช้คีย์ CMEK ใช้งานได้แล้ว
ขั้นตอนสำหรับฟังก์ชันรุ่นที่ 2 มีดังนี้
สร้างซอร์สโค้ดสำหรับฟังก์ชัน
แม้ว่า Codelab นี้จะใช้ Node.js แต่คุณก็ใช้รันไทม์ที่รองรับเวอร์ชันใดก็ได้
ขั้นแรก ให้สร้างไดเรกทอรีและซีดีลงในไดเรกทอรีนั้น
mkdir ~/cmek-function-2ndgen && cd $_
จากนั้นสร้างไฟล์package.json
touch package.json echo '{ "dependencies": { "@google-cloud/functions-framework": "^2.1.0" } } ' > package.json
ต่อไป ให้สร้างไฟล์ต้นฉบับ index.js
touch index.js echo 'const functions = require("@google-cloud/functions-framework"); functions.http("helloWorld", (req, res) => { res.send(`Hello ${req.query.name || req.body.name || "World"}!`); });' > index.js
ทำให้ Cloud Function รุ่นที่ 2 ใช้งานได้โดยใช้การเข้ารหัส CMEK
หมายเหตุ: ตัวอย่างด้านล่างแสดงวิธีทำให้ฟังก์ชันใช้งานได้โดยใช้แหล่งที่มาจากไดเรกทอรีปัจจุบัน ตรวจสอบว่าคุณอยู่ในไดเรกทอรีเดียวกับซอร์สโค้ดสำหรับฟังก์ชัน
FUNCTION_NAME=protect-me-cmek-2ndgen ENTRY_POINT=helloWorld REPO_FULLPATH=projects/"$PROJECT_ID"/locations/"$REGION"/repositories/$REPO_NAME gcloud beta functions deploy $FUNCTION_NAME \ --gen2 \ --region $REGION \ --kms-key $KEY_FULLPATH \ --docker-repository $REPO_FULLPATH \ --source . \ --trigger-http \ --allow-unauthenticated \ --runtime nodejs16 \ --entry-point $ENTRY_POINT
คุณสามารถดูคีย์ CMEK จากผลลัพธ์ที่ปรากฏขึ้นโดยการเรียกใช้คำสั่งนี้
ฟังก์ชัน gcloud อธิบาย $FUNCTION_NAME –ภูมิภาค $REGION | ชื่อคีย์ grep kms
ทดสอบฟังก์ชันรุ่นที่ 2
คุณทดสอบฟังก์ชันได้โดยการทำให้ม้วนฟังก์ชันต่อไปนี้
FUNCTION_URL="$(gcloud functions describe $FUNCTION_NAME --region $REGION --format='get(serviceConfig.uri)')" curl $FUNCTION_URL
ซึ่งส่งผลให้เกิดสิ่งต่อไปนี้
Hello World!
หากเปิดใช้คีย์การเข้ารหัสอยู่ ฟังก์ชันนี้จะส่งคืนให้ผู้โทรดำเนินการสำเร็จ อย่างไรก็ตาม เมื่อปิดใช้คีย์การเข้ารหัสแล้ว ผู้โทรจะได้รับข้อผิดพลาด
ในส่วนถัดไป คุณจะเห็นสิ่งที่จะเกิดขึ้นเมื่อเรียกใช้ฟังก์ชันหลังจากปิดใช้คีย์
8. สร้างฟังก์ชันที่เข้ารหัส CMEK (รุ่นที่ 1)
ส่วนนี้จะครอบคลุมการสร้างฟังก์ชันรุ่นที่ 1 หากคุณได้สร้างฟังก์ชันรุ่นที่ 2 ไว้ก่อนหน้านี้ โปรดไปยังส่วนถัดไป
ตอนนี้คุณมีที่เก็บ Artifact Registry ที่กำหนดค่าด้วย CMEK และให้สิทธิ์เข้าถึง Cloud Functions กับคีย์แล้ว ตอนนี้คุณทำให้ฟังก์ชันที่เข้ารหัสโดยใช้คีย์ CMEK ใช้งานได้แล้ว
ขั้นตอนสำหรับฟังก์ชันรุ่นที่ 1 มีดังนี้
สร้างซอร์สโค้ดสำหรับฟังก์ชันรุ่นที่ 1
แม้ว่า Codelab นี้จะใช้ Node.js แต่คุณก็ใช้รันไทม์ที่รองรับเวอร์ชันใดก็ได้
ขั้นแรก ให้สร้างไดเรกทอรีและซีดีลงในไดเรกทอรีนั้น
mkdir ~/cmek-function-1stgen && cd $_
ต่อไป ให้สร้างไฟล์package.json
touch package.json echo '{ "name": "function-cmek-codelab", "version": "0.0.1" }' > package.json
จากนั้นสร้างไฟล์ต้นฉบับ index.js
touch index.js echo "exports.helloWorld = (req, res) => { let message = req.query.message || req.body.message || 'Hello World!'; res.status(200).send(message); };" > index.js
ทำให้ Cloud Function รุ่นที่ 1 ใช้งานได้โดยใช้การเข้ารหัส CMEK
หมายเหตุ: ตัวอย่างด้านล่างแสดงวิธีทำให้ฟังก์ชันใช้งานได้โดยใช้แหล่งที่มาจากไดเรกทอรีปัจจุบัน ตรวจสอบว่าคุณอยู่ในไดเรกทอรีเดียวกับซอร์สโค้ดสำหรับฟังก์ชัน
FUNCTION_NAME=protect-me-cmek-1stgen ENTRY_POINT=helloWorld REPO_FULLPATH=projects/"$PROJECT_ID"/locations/"$REGION"/repositories/$REPO_NAME gcloud functions deploy $FUNCTION_NAME \ --region $REGION \ --kms-key $KEY_FULLPATH \ --docker-repository $REPO_FULLPATH \ --source . \ --trigger-http \ --allow-unauthenticated \ --runtime nodejs16 \ --entry-point $ENTRY_POINT
คุณสามารถดูคีย์ CMEK จากผลลัพธ์ที่ปรากฏขึ้นโดยการเรียกใช้คำสั่งนี้
ฟังก์ชัน gcloud อธิบาย $FUNCTION_NAME –ภูมิภาค $REGION | ชื่อคีย์ grep kms
ทดสอบฟังก์ชันรุ่นที่ 1
คุณทดสอบฟังก์ชันได้โดยการทำให้ม้วนฟังก์ชันต่อไปนี้
FUNCTION_URL="$(gcloud functions describe $FUNCTION_NAME --region $REGION --format='get(httpsTrigger.url)')" curl $FUNCTION_URL
ซึ่งส่งผลให้เกิดสิ่งต่อไปนี้
Hello World!
หากเปิดใช้คีย์การเข้ารหัสอยู่ ฟังก์ชันนี้จะส่งคืนให้ผู้โทรดำเนินการสำเร็จ อย่างไรก็ตาม เมื่อปิดใช้คีย์การเข้ารหัสแล้ว ผู้โทรจะได้รับข้อผิดพลาด
ในส่วนถัดไป คุณจะเห็นสิ่งที่จะเกิดขึ้นเมื่อเรียกใช้ฟังก์ชันหลังจากปิดใช้คีย์
9. เรียกใช้ฟังก์ชันที่เข้ารหัส CMEK เมื่อปิดใช้คีย์การเข้ารหัส
ในส่วนสุดท้ายนี้ คุณจะทำให้คีย์เป็นโมฆะและเรียกใช้ฟังก์ชันอีกครั้งเพื่อดูข้อผิดพลาดที่เกิดขึ้น
ปิดใช้คีย์การเข้ารหัส
โดยคุณจะเรียกใช้คำสั่งนี้เพื่อปิดใช้คีย์ได้ เนื่องจาก Codelab นี้จะสร้างคีย์เพียงเวอร์ชันเดียว คุณจะต้องปิดใช้เวอร์ชัน 1
gcloud kms keys versions disable 1 \ --key=$KEY_NAME \ --keyring=$KEYRING_NAME \ --location=$REGION
และคุณควรเห็นข้อมูลผลลัพธ์
algorithm: GOOGLE_SYMMETRIC_ENCRYPTION createTime: '2023-04-11T03:30:49.111832653Z' generateTime: '2023-04-11T03:30:49.111832653Z' name: projects/dogfood-gcf-saraford/locations/us-central1/keyRings/myKeyRing/cryptoKeys/encrypted-function/cryptoKeyVersions/1 protectionLevel: SOFTWARE state: DISABLED
เรียกใช้ฟังก์ชันด้วยแป้นที่ปิดใช้
ตอนนี้ให้curl
ฟังก์ชันอีกครั้ง
curl $FUNCTION_URL
และคุณจะไม่ได้รับการตอบกลับ Hello World ในครั้งนี้
ในบันทึกสำหรับ Cloud Function คุณจะเห็น
User's CMEK key has been disabled. CMEK key: projects/<PROJECT-NAME>/locations/us-central1/keyRings/myKeyRing/cryptoKeys/encrypted-function
พยายามดูทรัพยากรเมื่อปิดใช้คีย์ CMEK
ในส่วนนี้ คุณจะเห็นทรัพยากรต่อไปนี้ซึ่งจะใช้งานไม่ได้เมื่อปิดใช้คีย์ CMEK
- ซอร์สโค้ดของฟังก์ชัน
- บิลด์อิมเมจคอนเทนเนอร์จากซอร์สโค้ด
เช่น การไปที่แท็บแหล่งที่มาของ Cloud Function จะแสดงข้อผิดพลาดขณะดึงข้อมูลที่เก็บถาวร คุณจะได้รับข้อผิดพลาดที่คล้ายกันหากพยายามดูไฟล์ .zip ที่มีซอร์สโค้ดโดยตรงใน Cloud Storage
นอกจากนี้ คุณจะไม่สามารถใช้อิมเมจคอนเทนเนอร์สำหรับฟังก์ชันจาก Artifact Registry ได้ เช่น หากพยายามทำให้อิมเมจคอนเทนเนอร์ดังกล่าวใช้งานได้ใน Cloud Run คุณจะได้รับข้อผิดพลาดว่าไม่พบอิมเมจ
โปรดดูเอกสารฟังก์ชัน CMEK เพื่อดูรายการทรัพยากรที่เข้ารหัสทั้งหมด
10. ขอแสดงความยินดี
ยินดีด้วย คุณศึกษา Codelab จบแล้ว
หัวข้อที่ครอบคลุม
- วิธีสร้างคีย์ CMEK บนคีย์ริงแบบสมมาตรที่มีอยู่
- วิธีสร้างที่เก็บ Artifact Registry
- วิธีกำหนดค่า CMEK บน Cloud Function
สำหรับข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Functions และ CMEK ได้ในลิงก์ต่อไปนี้
- บทความการรักษาความปลอดภัยของ Cloud Functions โดยใช้ CMEK
- เอกสารประกอบเกี่ยวกับคีย์การเข้ารหัสที่จัดการโดยลูกค้า