1. บทนำ
ภาพรวม
Cloud Functions เป็นโซลูชันการประมวลผลแบบเบาสำหรับนักพัฒนาซอฟต์แวร์ในการสร้างฟังก์ชันแบบสแตนด์อโลนที่มีวัตถุประสงค์เดียวซึ่งตอบสนองต่อเหตุการณ์ในระบบคลาวด์โดยไม่จำเป็นต้องจัดการเซิร์ฟเวอร์หรือสภาพแวดล้อมรันไทม์
คุณสามารถใช้คีย์การเข้ารหัสที่จัดการโดยลูกค้า (CMEK) ของ Cloud Key Management Service เพื่อปกป้อง Cloud Functions และข้อมูลที่เกี่ยวข้องที่ไม่มีการเคลื่อนไหว การติดตั้งใช้งานฟังก์ชันด้วย CMEK จะปกป้องข้อมูลที่เชื่อมโยงกับฟังก์ชันนั้นโดยใช้คีย์การเข้ารหัสที่คุณควบคุมได้อย่างเต็มที่ การเข้ารหัสประเภทนี้ช่วยให้คุณปฏิบัติตามข้อกำหนดด้านการปฏิบัติตามข้อกำหนดในบางอุตสาหกรรม เช่น บริการทางการเงิน เนื่องจากคุณเป็นเจ้าของคีย์และ Google ไม่ได้ควบคุมคีย์ดังกล่าว จึงไม่มีใคร (รวมถึงคุณ) สามารถเข้าถึงข้อมูลที่ได้รับการปกป้องโดยคีย์การเข้ารหัสเหล่านี้ได้เมื่อคีย์ถูกปิดใช้หรือทำลาย
สำหรับ Cloud Functions นั้น CMEK จะเข้ารหัสรายการต่อไปนี้
- ซอร์สโค้ดของฟังก์ชันที่อัปโหลดเพื่อการติดตั้งใช้งานและจัดเก็บโดย Google ใน Cloud Storage ซึ่งใช้ในกระบวนการบิลด์
- ผลลัพธ์ของกระบวนการสร้างฟังก์ชัน รวมถึงอิมเมจคอนเทนเนอร์ที่สร้างจากซอร์สโค้ดของฟังก์ชัน แต่ละอินสแตนซ์ของฟังก์ชันที่ได้รับการติดตั้งใช้งาน
- ข้อมูลที่ไม่ได้ใช้งานสำหรับช่องทางการส่งเหตุการณ์ภายใน (รุ่นที่ 1 เท่านั้น)
ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อมูลที่เข้ารหัสได้ในเอกสารประกอบ CMEK ของ Cloud Functions
สิ่งที่คุณจะสร้าง
Codelab นี้แสดงวิธีทำให้ Cloud Functions (รุ่นที่ 1 หรือรุ่นที่ 2) ที่เข้ารหัสโดยใช้ CMEK ใช้งานได้ Codelab นี้ใช้ Cloud Functions สาธารณะ ซึ่งไม่จำเป็นต้องมีการตรวจสอบสิทธิ์เพื่อวัตถุประสงค์ในการสาธิต คุณเรียกใช้ฟังก์ชันที่เปิดใช้ CMEK ที่มีการตรวจสอบสิทธิ์ได้เช่นเดียวกับ Cloud Functions อื่นๆ ที่ต้องมีการตรวจสอบสิทธิ์
สิ่งที่คุณจะได้เรียนรู้
- วิธีสร้างคีย์ 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 คืออะไร หากเห็นหน้าจอระดับกลาง ให้คลิกต่อไป

การจัดสรรและเชื่อมต่อกับ 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 ที่เปิดใช้ CMEK ในรูปแบบ Docker
ในส่วนนี้ คุณจะสร้างที่เก็บในรูปแบบ 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
และมอบบทบาทให้กับผู้ที่จะสร้างที่เก็บใน Artifact Registry เช่น บัญชีที่ใช้งานอยู่ในปัจจุบัน คุณยืนยันบัญชีที่ใช้งานอยู่ปัจจุบันได้โดยเรียกใช้ 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 ไว้แล้ว โปรดไปที่ส่วนถัดไป
คุณต้องให้สิทธิ์เข้าถึงคีย์แก่ตัวแทนบริการหลายรายโดยการให้บทบาท IAM ของผู้เข้ารหัส/ผู้ถอดรหัส CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) ตัวแทนบริการเหล่านี้ใช้เพื่อรับสิทธิ์เข้าถึงซอร์สโค้ดที่จัดเก็บไว้ใน 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. สร้างฟังก์ชัน (รุ่นที่ 2) ที่เข้ารหัสด้วย CMEK
ส่วนนี้จะครอบคลุมการสร้างฟังก์ชันรุ่นที่ 2 คุณไปยังส่วนถัดไปเพื่อดูวิธีการสำหรับรุ่นที่ 1 ได้
ตอนนี้คุณได้กำหนดค่าที่เก็บ Artifact Registry โดยเปิดใช้ CMEK และให้สิทธิ์เข้าถึงคีย์แก่ Cloud Functions แล้ว คุณจึงสามารถทําให้ฟังก์ชันที่เข้ารหัสโดยใช้คีย์ CMEK ใช้งานได้
ขั้นตอนสำหรับฟังก์ชันรุ่นที่ 2 มีดังนี้
สร้างซอร์สโค้ดสำหรับฟังก์ชัน
แม้ว่า Codelab นี้จะใช้ 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 functions describe $FUNCTION_NAME –region $REGION | grep kmsKeyName
ทดสอบฟังก์ชันรุ่นที่ 2
คุณทดสอบฟังก์ชันได้โดยใช้คำสั่ง curl ดังนี้
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 แต่คุณสามารถใช้รันไทม์ที่รองรับได้
ก่อนอื่น ให้สร้างไดเรกทอรีแล้วใช้คำสั่ง 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 Functions รุ่นที่ 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 functions describe $FUNCTION_NAME –region $REGION | grep kmsKeyName
ทดสอบฟังก์ชันรุ่นที่ 1
คุณทดสอบฟังก์ชันได้โดยใช้คำสั่ง curl ดังนี้
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 Functions
ดูข้อมูลเพิ่มเติม
ดูข้อมูลเพิ่มเติมเกี่ยวกับ Cloud Functions และ CMEK ได้ที่ลิงก์ต่อไปนี้