เกี่ยวกับ Codelab นี้
1 บทนำ
ภาพรวม
Cloud Functions เป็นโซลูชันการประมวลผลที่ใช้งานง่ายสำหรับนักพัฒนาซอฟต์แวร์ในการสร้างฟังก์ชันสแตนด์อโลนวัตถุประสงค์เดียวที่ตอบสนองต่อเหตุการณ์ระบบคลาวด์ โดยไม่จำเป็นต้องจัดการเซิร์ฟเวอร์หรือสภาพแวดล้อมรันไทม์
คุณสามารถใช้คีย์การเข้ารหัสที่จัดการโดยลูกค้า (CMEK) ของ Cloud Key Management Service เพื่อปกป้อง Cloud Functions และข้อมูลที่จัดเก็บไว้ที่เกี่ยวข้อง การทำให้ฟังก์ชันที่มี CMEK ใช้งานได้ช่วยปกป้องข้อมูลที่เชื่อมโยงกับฟังก์ชันดังกล่าวโดยใช้คีย์การเข้ารหัสที่อยู่ในการควบคุมอย่างเต็มรูปแบบ การเข้ารหัสประเภทนี้ช่วยให้คุณปฏิบัติตามข้อกําหนดในการปฏิบัติตามข้อกําหนดในบางอุตสาหกรรม เช่น บริการทางการเงิน เนื่องจากคุณเป็นเจ้าของคีย์และ Google ไม่ได้ควบคุมคีย์ ไม่มีใคร (รวมถึงตัวคุณเอง) จะเข้าถึงข้อมูลที่คีย์การเข้ารหัสเหล่านี้ปกป้องอยู่ได้เมื่อคีย์ถูกปิดใช้หรือถูกทำลาย
สำหรับ Cloud Functions นั้น CMEK จะเข้ารหัสข้อมูลต่อไปนี้
- โค้ดต้นทางของฟังก์ชันที่อัปโหลดเพื่อทำให้ใช้งานได้และ Google จัดเก็บไว้ใน Cloud Storage ซึ่งใช้ในกระบวนการบิลด์
- ผลลัพธ์ของกระบวนการบิลด์ฟังก์ชัน รวมถึงอิมเมจคอนเทนเนอร์ที่สร้างขึ้นจากซอร์สโค้ดของฟังก์ชัน และอินสแตนซ์แต่ละรายการของฟังก์ชันที่มีการทำให้ใช้งานได้
- ข้อมูลที่จัดเก็บไว้สำหรับช่องทางการนำส่งเหตุการณ์ภายใน (รุ่นที่ 1 เท่านั้น)
ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลที่เข้ารหัสได้ในเอกสารประกอบ CMEK ของ Cloud Function
สิ่งที่คุณจะสร้าง
Codelab นี้แสดงวิธีทำให้ Cloud Function (รุ่นที่ 1 หรือ 2) ใช้งานได้ซึ่งเข้ารหัสโดยใช้ CMEK โค้ดแล็บนี้ใช้ Cloud Function สาธารณะ ซึ่งไม่จําเป็นต้องตรวจสอบสิทธิ์ เพื่อวัตถุประสงค์ในการสาธิต คุณสามารถเรียกใช้ฟังก์ชันที่เปิดใช้ CMEK ที่มีการตรวจสอบสิทธิ์ได้เช่นเดียวกับ Cloud Function อื่นๆ ที่ต้องผ่านการตรวจสอบสิทธิ์
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างคีย์ CMEK บนคีย์ริงแบบสมมาตรที่มีอยู่
- วิธีสร้างที่เก็บ Artifact Registry
- วิธีกำหนดค่า CMEK ใน Cloud Function ทั้งรุ่นที่ 1 และ 2
2 การตั้งค่าและข้อกําหนด
ข้อกำหนดเบื้องต้น
- คุณเข้าสู่ระบบ Cloud Console แล้ว
- คุณได้ติดตั้งใช้งาน Cloud Function ที่ทริกเกอร์ HTTP ไว้ก่อนหน้านี้ (เพื่อยืนยันว่าคุณเปิดใช้บทบาทและ API ที่เหมาะสมแล้ว)
เปิดใช้งาน Cloud Shell
- จาก Cloud Console ให้คลิกเปิดใช้งาน Cloud Shell
หากเริ่มต้นใช้งาน Cloud Shell เป็นครั้งแรก คุณจะเห็นหน้าจอตรงกลางที่อธิบายว่านี่คืออะไร หากเห็นหน้าจอตรงกลาง ให้คลิกต่อไป
การจัดสรรและเชื่อมต่อกับ Cloud Shell ใช้เวลาเพียงไม่กี่นาที
เครื่องเสมือนนี้โหลดเครื่องมือการพัฒนาที่จำเป็นทั้งหมดไว้แล้ว ซึ่งจะมีไดเรกทอรีหลักขนาด 5 GB ถาวรและทำงานใน Google Cloud ซึ่งช่วยเพิ่มประสิทธิภาพเครือข่ายและการรับรองได้อย่างมีประสิทธิภาพ คุณทํางานส่วนใหญ่หรือทั้งหมดในโค้ดแล็บนี้ได้โดยใช้เบราว์เซอร์
เมื่อเชื่อมต่อกับ 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
ก่อนอื่น ให้สร้างตัวแปรสภาพแวดล้อมเพื่อใส่ชื่อคีย์ริง ชื่อคีย์ ภูมิภาค และตัวแปรอื่นๆ ที่ใช้ในโค้ดแล็บนี้
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 (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 auth list
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
) ตัวแทนบริการเหล่านี้ใช้เพื่อรับสิทธิ์เข้าถึงซอร์สโค้ดที่จัดเก็บไว้ใน 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 ไว้แล้ว โปรดไปที่ส่วนถัดไป
คุณต้องให้สิทธิ์ Agent บริการหลายตัวในการเข้าถึงคีย์ดังกล่าวโดยมอบบทบาท 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 มีดังนี้
สร้างซอร์สโค้ดของฟังก์ชัน
แม้ว่าโค้ดแล็บนี้จะใช้ Node.js แต่คุณใช้รันไทม์ที่รองรับใดก็ได้
ก่อนอื่น ให้สร้างไดเรกทอรีและ cd ไปยังไดเรกทอรีนั้น
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 Functions รุ่นที่ 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 $REGION | grep kmsKeyName
ทดสอบฟังก์ชันรุ่นที่ 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
แม้ว่าโค้ดแล็บนี้จะใช้ Node.js แต่คุณใช้รันไทม์ที่รองรับใดก็ได้
ก่อนอื่น ให้สร้างไดเรกทอรีและ cd ไปยังไดเรกทอรีนั้น
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 $REGION | grep kmsKeyName
ทดสอบฟังก์ชันรุ่นที่ 1
คุณทดสอบฟังก์ชันได้โดยการทำให้ม้วนฟังก์ชันต่อไปนี้
FUNCTION_URL="$(gcloud functions describe $FUNCTION_NAME --region $REGION --format='get(httpsTrigger.url)')" curl $FUNCTION_URL
ซึ่งส่งผลให้เกิดสิ่งต่อไปนี้
Hello World!
ตราบใดที่คีย์การเข้ารหัสเปิดใช้งานอยู่ ฟังก์ชันจะแสดงผลลัพธ์ "สำเร็จ" แก่ผู้เรียก อย่างไรก็ตาม เมื่อปิดใช้คีย์การเข้ารหัส ผู้โทรจะได้รับข้อผิดพลาด
ในส่วนถัดไป คุณจะเห็นสิ่งที่จะเกิดขึ้นเมื่อเรียกใช้ฟังก์ชันหลังจากปิดใช้คีย์แล้ว
9 เรียกใช้ฟังก์ชันที่เข้ารหัส CMEK เมื่อปิดใช้คีย์การเข้ารหัส
ในส่วนสุดท้ายนี้ คุณจะลบล้างคีย์และเรียกใช้ฟังก์ชันอีกครั้งเพื่อดูข้อผิดพลาดที่เกิดขึ้น
ปิดใช้คีย์การเข้ารหัส
คุณเรียกใช้คําสั่งนี้เพื่อปิดใช้คีย์ได้ เนื่องจากโค้ดแล็บนี้สร้างคีย์เพียงเวอร์ชันเดียว คุณจึงจะปิดใช้เวอร์ชัน 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 Functions
ดูข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Functions และ CMEK ได้ในลิงก์ต่อไปนี้
- บทความการรักษาความปลอดภัยของ Cloud Functions โดยใช้ CMEK
- เอกสารประกอบเกี่ยวกับคีย์การเข้ารหัสที่จัดการโดยลูกค้า