หน้านี้อธิบายวิธีทำงานที่เกี่ยวข้องกับคีย์การเข้ารหัสที่จัดการโดยลูกค้า (CMEK) สำหรับ Cloud Firestore ที่มีความเข้ากันได้กับ MongoDB ดูข้อมูลเพิ่มเติมเกี่ยวกับ CMEK โดยทั่วไป รวมถึงเวลาและเหตุผลในการเปิดใช้ได้ที่เอกสารประกอบของ Cloud KMS
เตรียมคีย์ CMEK
ก่อนที่จะสร้าง Cloud Firestore ที่มีการปกป้องด้วย CMEK ที่มีฐานข้อมูลที่เข้ากันได้กับ MongoDB คุณ ต้องทำตามขั้นตอนต่อไปนี้ให้เสร็จสมบูรณ์
- ขอสิทธิ์เข้าถึงฟีเจอร์ CMEK ที่เข้ากันได้กับ MongoDB ใน Cloud Firestore
- สร้าง (หรือเรียก) Agent บริการ Cloud Firestore ที่เข้ากันได้กับ MongoDB
- สร้างคีย์ CMEK
- กำหนดการตั้งค่า IAM สำหรับคีย์นั้น
ทำตามขั้นตอนเหล่านี้สำหรับแต่ละโปรเจ็กต์ที่จะมี Cloud Firestore ที่มีการป้องกันด้วย CMEK พร้อมฐานข้อมูลที่เข้ากันได้กับ MongoDB หากสร้างคีย์ CMEK ใหม่ในภายหลัง คุณจะต้อง กำหนดค่าการตั้งค่า IAM สำหรับคีย์นั้น
ขอสิทธิ์เข้าถึง
ก่อนสร้าง Cloud Firestore ที่มีตัวแทนบริการความเข้ากันได้ของ MongoDB ให้ขอสิทธิ์เข้าถึง ฟีเจอร์ CMEK โดยกรอกแบบฟอร์มคำขอสิทธิ์เข้าถึง
สร้าง Agent บริการ Cloud Firestore ที่เข้ากันได้กับ MongoDB
ก่อนสร้างคีย์ CMEK คุณต้องมีตัวแทนบริการ Cloud Firestore ที่มีความเข้ากันได้กับ MongoDB ซึ่งเป็นบัญชีบริการประเภทหนึ่งที่ Google จัดการ ซึ่ง Cloud Firestore ที่มีความเข้ากันได้กับ MongoDB ใช้เพื่อเข้าถึงคีย์
เรียกใช้คำสั่ง services identity create เพื่อสร้าง Service Agent ที่ Cloud Firestore ที่มีความเข้ากันได้กับ MongoDB ใช้เพื่อเข้าถึงคีย์ CMEK ในนามของคุณ คำสั่งนี้จะสร้างบัญชีบริการหากยังไม่มี จากนั้นจะแสดงบัญชีบริการ
gcloud beta services identity create \
--service=firestore.googleapis.com \
--project FIRESTORE_PROJECT
แทนที่ FIRESTORE_PROJECT
ด้วยโปรเจ็กต์ที่คุณวางแผนจะใช้
สำหรับฐานข้อมูล Cloud Firestore ที่เข้ากันได้กับ MongoDB
คำสั่งจะแสดงรหัสตัวแทนบริการซึ่งจัดรูปแบบเหมือนอีเมล บันทึกสตริงอีเมลเอาต์พุตเนื่องจากคุณจะต้องใช้ในขั้นตอนต่อๆ ไป
Service identity created:
service-xxx@gcp-sa-firestore.
สร้างคีย์
คุณใช้คีย์ที่สร้างใน Cloud KMS โดยตรงหรือคีย์ที่จัดการภายนอกซึ่งคุณทำให้พร้อมใช้งานด้วย Cloud External Key Manager ได้
ตำแหน่งคีย์ Cloud KMS ต้องเหมือนกับตำแหน่งของฐานข้อมูล Cloud Firestore ที่เข้ากันได้กับ MongoDB ที่จะใช้
สำหรับตำแหน่งฐานข้อมูลระดับภูมิภาค ให้ใช้ชื่อตำแหน่งเดียวกัน สำหรับพวงกุญแจ คีย์ และฐานข้อมูล เนื่องจากชื่อตำแหน่งมีการ แมปแบบหนึ่งต่อหนึ่ง
ตัวอย่างเช่น หากต้องการสร้างฐานข้อมูลที่ได้รับการปกป้องด้วย CMEK ใน
us-west1
ให้สร้างพวงกุญแจและคีย์ในus-west1
สำหรับตำแหน่งฐานข้อมูลแบบหลายภูมิภาค ให้ใช้ชื่อตำแหน่ง ของตำแหน่งแบบหลายภูมิภาคของ KMS ดังนี้
ใช้
us
ตำแหน่งแบบหลายภูมิภาคของ Cloud KMS สำหรับตำแหน่งแบบหลายภูมิภาคของ Cloud Firestore ที่เข้ากันได้กับ MongoDBnam5
ใช้
europe
ตำแหน่งแบบหลายภูมิภาคของ Cloud KMS สำหรับตำแหน่งแบบหลายภูมิภาคของ Cloud Firestore ที่เข้ากันได้กับ MongoDBeur3
ในGoogle Cloudโปรเจ็กต์ที่คุณต้องการจัดการคีย์ ให้ทำดังนี้
สร้างคีย์ริงและคีย์โดยใช้ตัวเลือกใดตัวเลือกหนึ่งต่อไปนี้
- สร้างคีย์ริงและคีย์ใน Cloud KMS โดยตรง
- ใช้คีย์ที่จัดการภายนอก สร้างคีย์ภายนอก จากนั้นสร้างคีย์ Cloud EKM เพื่อให้คีย์ พร้อมใช้งานผ่าน Cloud KMS
กำหนดการตั้งค่า IAM สำหรับคีย์
คอนโซล
หากต้องการมอบบทบาท Cloud KMS ให้กับ Agent บริการ ให้ทำ ดังนี้ นอกจากนี้ คุณยังให้สิทธิ์ในระดับคีย์หรือพวงกุญแจได้หากต้องการความละเอียดที่ต่ำกว่า
ในคอนโซล Google Cloud ให้ไปที่หน้า IAM
คลิกเพิ่ม
ป้อนรหัสในรูปแบบอีเมลสำหรับตัวแทนบริการ Cloud Firestore ที่เข้ากันได้กับ MongoDB
เลือกบทบาทผู้เข้ารหัส/ผู้ถอดรหัส Cloud KMS CryptoKey
คลิกบันทึก
gcloud
มอบบทบาท cloudkms.cryptoKeyEncrypterDecrypter
ให้กับตัวแทนบริการโดยทำดังนี้
gcloud kms keys add-iam-policy-binding KMS_KEY \
--keyring KMS_KEYRING\
--location KMS_LOCATION \
--member serviceAccount:SERVICE_AGENT_EMAIL \
--role roles/cloudkms.cryptoKeyEncrypterDecrypter \
--project KMS_PROJECT
แทนที่ค่าต่อไปนี้
KMS_KEY
โดยมีชื่อที่คุณกำหนดให้กับคีย์KMS_KEYRING
ที่มีคีย์ริง KMS ที่มีคีย์KMS_LOCATION
ที่มีภูมิภาคที่มีคีย์ริงSERVICE_AGENT_EMAIL
พร้อมตัวระบุรูปแบบอีเมล สำหรับตัวแทนบริการที่คุณให้สิทธิ์เข้าถึงKMS_PROJECT
ที่มีโปรเจ็กต์ที่มีคีย์
เทอร์มินัลควรแสดงการตอบกลับที่คล้ายกับตัวอย่างต่อไปนี้
Updated IAM policy for key KMS_KEY.
bindings:
- members:
- serviceAccount:
service-{project-number}@gcp-sa-firestore.
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
สร้างฐานข้อมูลที่เปิดใช้ CMEK
หลังจากสร้างและกำหนดค่าคีย์ CMEK แล้ว คุณจะสร้างฐานข้อมูลที่ป้องกันด้วย CMEK ได้ ระบบจะแปลงฐานข้อมูล Cloud Firestore ที่มีอยู่ซึ่งเข้ากันได้กับ MongoDB ที่ได้รับการปกป้องโดยการเข้ารหัสเริ่มต้นของ Google ให้ใช้ CMEK ไม่ได้
คุณจะเลือกประเภทการเข้ารหัสและคีย์ได้ก็ต่อเมื่อสร้างฐานข้อมูลที่เปิดใช้ CMEK เท่านั้น
คอนโซล
ในคอนโซล Google Cloud ให้ไปที่หน้าฐานข้อมูล
คลิกสร้างฐานข้อมูล Firestore
ป้อนรหัสฐานข้อมูล
เลือกรุ่น Enterprise
เลือกตำแหน่งสำหรับฐานข้อมูล
คลิกแสดงตัวเลือกการเข้ารหัส แล้วเลือกคีย์ Cloud KMS
เลือกหรือป้อนชื่อทรัพยากรสำหรับคีย์ CMEK ที่ต้องการใช้ สำหรับฐานข้อมูล
รายการคีย์จะจำกัดเฉพาะโปรเจ็กต์ Google Cloud ปัจจุบัน และตำแหน่งฐานข้อมูลที่คุณเลือก หากต้องการใช้คีย์จากGoogle Cloudโปรเจ็กต์อื่น ให้คลิกเปลี่ยนโปรเจ็กต์หรือ ป้อนคีย์ด้วยตนเอง
หากระบบแจ้งให้คุณให้สิทธิ์คีย์แก่บัญชีบริการ Cloud Firestore ที่เข้ากันได้กับ MongoDB ให้คลิกให้สิทธิ์ หากต้องการสร้างฐานข้อมูล CMEK บัญชีบริการ Cloud Firestore ที่เข้ากันได้กับ MongoDB ต้องได้รับ
cloudkms.cryptoKeyEncrypterDecrypter
บทบาทเลือกกฎความปลอดภัยสำหรับไคลเอ็นต์บนอุปกรณ์เคลื่อนที่และเว็บ
คลิกสร้างฐานข้อมูล
หลังจากสร้างฐานข้อมูลแล้ว คุณสามารถยืนยันว่าฐานข้อมูลได้เปิดใช้ CMEK โดยดูรายละเอียดฐานข้อมูลได้ดังนี้
- หากฐานข้อมูลได้รับการปกป้องโดย CMEK ฟิลด์ประเภทการเข้ารหัสจะแสดงเป็นจัดการโดยลูกค้า และฟิลด์คีย์การเข้ารหัสจะแสดง Cloud KMS ที่เกี่ยวข้องและเวอร์ชันคีย์ที่ใช้เพื่อปกป้องฐานข้อมูลนี้
- หากฐานข้อมูลไม่ได้ป้องกันด้วย CMEK ฟิลด์ประเภทการเข้ารหัส จะแสดงเป็นจัดการโดย Google
gcloud
ก่อนสร้างฐานข้อมูลที่เปิดใช้ CMEK ด้วย Google Cloud CLI ให้ติดตั้ง เวอร์ชันล่าสุดและให้สิทธิ์ gcloud CLI ดูข้อมูลเพิ่มเติมได้ที่ติดตั้ง gcloud CLI
gcloud firestore databases create \
--location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--edition=enterprise \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
แทนที่ค่าต่อไปนี้
FIRESTORE_DATABASE_LOCATION
โดยมีตำแหน่งของ ฐานข้อมูลDATABASE_ID
ที่มีรหัสสำหรับฐานข้อมูลKMS_KEY_NAME
โดยใช้ชื่อที่คุณกำหนดให้กับคีย์ ใช้ ชื่อทรัพยากรแบบเต็มสำหรับคีย์ในรูปแบบต่อไปนี้projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
FIRESTORE_PROJECT
กับโปรเจ็กต์ที่จะใช้สำหรับ Cloud Firestore ที่มีฐานข้อมูลความเข้ากันได้กับ MongoDB
เข้าถึงฐานข้อมูลที่ได้รับการปกป้องด้วย CMEK
การดำเนินการอ่าน เขียน และค้นหาทั้งหมดที่ส่งไปยังฐานข้อมูลที่ป้องกันด้วย CMEK ควรทำงานเหมือนกับฐานข้อมูลที่เข้ารหัสเริ่มต้นของ Google เช่น คุณไม่จำเป็นต้องระบุคีย์สำหรับคำขอแต่ละรายการ
กู้คืนฐานข้อมูลที่ป้องกันด้วย CMEK
ก่อนที่จะกู้คืนฐานข้อมูลที่ป้องกันด้วย CMEK จากข้อมูลสำรอง ให้ทำดังนี้
- ตัดสินใจว่าต้องการกู้คืนฐานข้อมูลเป็นการเข้ารหัส CMEK เป็นการเข้ารหัสเริ่มต้นของ Google (ไม่ใช่ CMEK) หรือเป็นการเข้ารหัสเดียวกับข้อมูลสำรอง
เตรียมคีย์ (เวอร์ชันหลัก) และเวอร์ชันคีย์ที่คุณใช้เพื่อเข้ารหัสข้อมูลสำรอง เปิดใช้ทั้งคีย์และเวอร์ชันคีย์
gcloud
กู้คืนฐานข้อมูลที่ได้รับการปกป้องด้วย CMEK ไปยังการเข้ารหัส CMEK
หากต้องการกู้คืนเป็นการเข้ารหัส CMEK ให้เรียกใช้คำสั่ง
gcloud firestore databases restore
พร้อมด้วยแฟล็ก encryption-type
และ kms-key-name
ที่ไม่บังคับเพื่อ
กำหนดค่าประเภทการเข้ารหัสสำหรับฐานข้อมูลที่กู้คืน หากไม่ได้ระบุประเภทการเข้ารหัส ฐานข้อมูลที่กู้คืนจะใช้การกำหนดค่าการเข้ารหัสเดียวกันกับข้อมูลสำรอง
gcloud firestore databases restore \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME
แทนที่ KMS_KEY_NAME
ด้วยชื่อที่คุณกำหนดให้กับ
คีย์ ใช้ชื่อทรัพยากรแบบเต็มสำหรับคีย์ในรูปแบบต่อไปนี้
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
กู้คืนฐานข้อมูลที่ป้องกันด้วย CMEK ไปเป็นการเข้ารหัสเริ่มต้น
หากต้องการกู้คืนเป็นการเข้ารหัสเริ่มต้นของ Google (ไม่ใช่ CMEK)
ให้ตั้งค่า Flag encryption-type
ดังนี้
gcloud firestore databases restore \
--encryption-type=google-default-encryption
กู้คืนฐานข้อมูลที่ป้องกันด้วย CMEK ไปยังการเข้ารหัสประเภทเดียวกับข้อมูลสำรอง
หากต้องการกู้คืนไปยังการเข้ารหัสประเภทเดียวกับข้อมูลสำรอง ให้ตั้งค่าแฟล็ก
encryption-type
ในลักษณะต่อไปนี้
gcloud firestore databases restore --encryption-type=use-source-encryption
Firebase CLI
กู้คืนฐานข้อมูลที่ได้รับการปกป้องด้วย CMEK ไปยังการเข้ารหัส CMEK
หากต้องการกู้คืนเป็นการเข้ารหัส CMEK ให้ใช้แฟล็ก encryption-type
และ
kms-key-name
ซึ่งเป็นแฟล็กที่ไม่บังคับ หากไม่ได้ระบุประเภทการเข้ารหัส ฐานข้อมูลที่กู้คืนจะใช้การกำหนดค่าการเข้ารหัสเดียวกับข้อมูลสำรอง
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type CUSTOMER_MANAGED_ENCRYPTION \
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID \
--project FIRESTORE_PROJECT
แทนที่ค่าต่อไปนี้
DATABASE_ID
โดยใช้รหัสของฐานข้อมูลFIRESTORE_PROJECT
กับโปรเจ็กต์ที่จะใช้สำหรับ Cloud Firestore ที่มีฐานข้อมูลความเข้ากันได้กับ MongoDBFIRESTORE_LOCATION
โดยมีตำแหน่งของ Cloud Firestore ที่มีฐานข้อมูลที่เข้ากันได้กับ MongoDBBACKUP_ID
โดยใช้รหัสของข้อมูลสำรองKMS_PROJECT
ที่มีโปรเจ็กต์ที่มีคีย์ CMEKKMS_LOCATION
ที่มีตำแหน่งที่เก็บคีย์และคีย์ริง CMEKKMS_KEYRING_ID
ด้วยรหัสของพวงกุญแจ CMEK
ยืนยันว่าฐานข้อมูล Cloud Firestore ที่กู้คืนซึ่งเข้ากันได้กับ MongoDB ได้รับการเข้ารหัส CMEK โดยทำดังนี้
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
กู้คืนฐานข้อมูลที่ป้องกันด้วย CMEK ไปเป็นการเข้ารหัสเริ่มต้น
หากต้องการกู้คืนเป็นการเข้ารหัสเริ่มต้นของ Google (ไม่ใช่ CMEK)
ให้ตั้งค่า Flag encryption-type
ดังนี้
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type GOOGLE_DEFAULT_ENCRYPTION \
--project FIRESTORE_PROJECT
แทนที่ค่าต่อไปนี้
DATABASE_ID
โดยใช้รหัสของฐานข้อมูลFIRESTORE_PROJECT
กับโปรเจ็กต์ที่จะใช้สำหรับ Cloud Firestore ที่มีฐานข้อมูลความเข้ากันได้กับ MongoDBFIRESTORE_LOCATION
โดยมีตำแหน่งของ Cloud Firestore ที่มีฐานข้อมูลที่เข้ากันได้กับ MongoDBBACKUP_ID
โดยใช้รหัสของข้อมูลสำรอง
กู้คืนฐานข้อมูลที่ป้องกันด้วย CMEK ไปยังการเข้ารหัสประเภทเดียวกับข้อมูลสำรอง
หากต้องการกู้คืนไปยังการเข้ารหัสประเภทเดียวกับข้อมูลสำรอง ให้ตั้งค่าแฟล็ก
encryption-type
ในลักษณะต่อไปนี้
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
แทนที่ค่าต่อไปนี้
DATABASE_ID
โดยใช้รหัสของฐานข้อมูลFIRESTORE_PROJECT
กับโปรเจ็กต์ที่จะใช้สำหรับ Cloud Firestore ที่มีฐานข้อมูลความเข้ากันได้กับ MongoDBFIRESTORE_LOCATION
โดยมีตำแหน่งของ Cloud Firestore ที่มีฐานข้อมูลที่เข้ากันได้กับ MongoDBBACKUP_ID
โดยใช้รหัสของข้อมูลสำรอง
โคลนฐานข้อมูลที่ได้รับการปกป้องด้วย CMEK
ก่อนที่จะโคลนฐานข้อมูลที่ป้องกันด้วย CMEK ให้ทำดังนี้
- ตัดสินใจว่าต้องการโคลนฐานข้อมูลเป็นการเข้ารหัส CMEK, การเข้ารหัสเริ่มต้นของ Google (ไม่ใช่ CMEK) หรือการเข้ารหัสเดียวกันกับฐานข้อมูลต้นทาง
เตรียมคีย์ (เวอร์ชันหลัก) และเวอร์ชันคีย์ที่คุณใช้เข้ารหัสฐานข้อมูลต้นทาง เปิดใช้ทั้งคีย์และเวอร์ชันคีย์
gcloud
โคลนฐานข้อมูลที่ป้องกันด้วย CMEK ไปยังการเข้ารหัส CMEK
หากต้องการโคลนไปยังการเข้ารหัส CMEK ให้เรียกใช้คำสั่ง
gcloud alpha firestore databases clone
พร้อมด้วยแฟล็ก encryption-type
และ kms-key-name
ที่ไม่บังคับเพื่อกำหนดค่า
ประเภทการเข้ารหัสสำหรับฐานข้อมูลที่โคลน หากไม่ได้ระบุประเภทการเข้ารหัส ฐานข้อมูลที่โคลนจะใช้การกำหนดค่าการเข้ารหัสเดียวกับฐานข้อมูลต้นทาง
gcloud alpha firestore databases clone \
--encryption-type=customer-managed-encryption \
--kms-key-name=KMS_KEY_NAME
แทนที่ KMS_KEY_NAME
ด้วยชื่อที่คุณกำหนดให้กับ
คีย์ ใช้ชื่อทรัพยากรแบบเต็มสำหรับคีย์ในรูปแบบต่อไปนี้
projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
โคลนฐานข้อมูลที่ป้องกันด้วย CMEK ไปเป็นการเข้ารหัสเริ่มต้น
หากต้องการโคลนไปยังการเข้ารหัสเริ่มต้นของ Google (ไม่ใช่ CMEK) ให้ตั้งค่า
Flag encryption-type
ในลักษณะต่อไปนี้
gcloud alpha firestore databases clone \
--encryption-type=google-default-encryption
โคลนฐานข้อมูลที่ป้องกันด้วย CMEK ให้มีการเข้ารหัสประเภทเดียวกับฐานข้อมูลต้นทาง
หากต้องการโคลนไปยังการเข้ารหัสประเภทเดียวกับฐานข้อมูลต้นทาง ให้ตั้งค่า
encryption-type
ในลักษณะต่อไปนี้
gcloud alpha firestore databases clone \
--encryption-type=use-source-encryption
ดูกุญแจที่ใช้งานอยู่
gcloud
คุณใช้คำสั่ง databases describe gcloud CLI เพื่อยืนยันการกำหนดค่า CMEK ของฐานข้อมูลได้
gcloud firestore databases describe \
--database=DATABASE_ID \
--project=FIRESTORE_PROJECT
คุณควรเห็นข้อมูล CMEK ในช่อง cmekConfig
ในการตอบกลับ
ซึ่งคล้ายกับข้อมูลต่อไปนี้
cmekConfig:
activeKeyVersion:
- projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME/cryptoKeyVersions/1
kmsKeyName: projects/PROJECT_ID/locations/us/keyRings/KEYRING_NAME/cryptoKeys/KEY_NAME
locationId: nam5
name: projects/PROJECT_ID/databases/DATABASE_ID
การตอบกลับจะมีข้อมูลต่อไปนี้
kmsKeyName
: ชื่อทรัพยากรคีย์แบบเต็มของคีย์ที่ใช้เข้ารหัส ฐานข้อมูลที่ป้องกันด้วย CMEKactiveKeyVersion
: รายการเวอร์ชันคีย์ทั้งหมดที่ฐานข้อมูลที่ป้องกันด้วย CMEK ใช้ ในระหว่างการหมุนเวียนคีย์ คุณจะมีคีย์หลายเวอร์ชันที่ใช้งานอยู่ได้ ทั้งเวอร์ชันคีย์เก่าและเวอร์ชันคีย์ใหม่ต้องพร้อมใช้งานในระหว่างการหมุนเวียนคีย์ อย่าปิดใช้คีย์เวอร์ชันเก่าจนกว่าคีย์นั้นจะไม่ปรากฏในช่องactiveKeyVersion
อีก
REST API
คำขอ HTTP:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
ในเนื้อความของคำขอ ให้กำหนดค่า CMEK ในฟิลด์ cmek_config.kms_key_name
ตั้งค่าเป็นรหัสทรัพยากรแบบเต็มของคีย์ Cloud KMS อนุญาตให้ใช้ได้เฉพาะคีย์ที่อยู่ในตำแหน่งเดียวกับฐานข้อมูลนี้
ค่านี้ควรรหัสทรัพยากรคีย์ Cloud KMS ในรูปแบบ
projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
ดูรายละเอียดเพิ่มเติมสำหรับฟิลด์อื่นๆ ได้ที่หน้าdatabase create
ตัวอย่างคำขอ
curl 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json"
ตัวอย่างการตอบกลับ
{
"name": "projects/FIRESTORE_PROJECT/databases/{DATABASE_ID}",
"locationId": "{FIRESTORE_DATABASE_LOCATION}",
"type": "FIRESTORE_NATIVE",
"cmekConfig": {
"kmsKeyName": "projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}",
"activeKeyVersion": [
"projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1"
]
},
...
}
ปิดใช้คีย์
หากต้องการปิดใช้คีย์ที่เชื่อมโยงกับฐานข้อมูล ให้ทำดังนี้
- ดูเวอร์ชันคีย์ที่ใช้สำหรับฐานข้อมูล
- ปิดใช้เวอร์ชันคีย์เหล่านั้น
- รอให้การเปลี่ยนแปลงมีผลและตรวจสอบว่าข้อมูลเข้าถึงไม่ได้อีกต่อไปหรือไม่ โดยทั่วไปการเปลี่ยนแปลงจะมีผลภายในเวลาไม่กี่นาที แต่ก็อาจใช้เวลาถึง 3 ชั่วโมง
เมื่อปิดใช้คีย์ที่ฐานข้อมูลใช้ คุณจะได้รับINVALID_ARGUMENT
ข้อยกเว้นพร้อมรายละเอียดเพิ่มเติมในข้อความแสดงข้อผิดพลาด
เช่น
{
"error": {
"code": 400,
"message": "Failed: (InvalidArgument) The customer-managed encryption key required by the requested resource is not accessible. Error reason: projects/{FIRESTORE_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1 is not enabled, current state is: DISABLED.",
"status": "INVALID_ARGUMENT",
"details": [
{
"@type": "type.googleapis.com/google.rpc.DebugInfo",
"detail": "Failed: (InvalidArgument) The customer-managed encryption key required by the requested resource is not accessible. Error reason: projects/{FIRESTORE_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}/cryptoKeyVersions/1 is not enabled, current state is: DISABLED."
}
]
}
}
เปิดใช้คีย์
หากต้องการเปิดใช้คีย์ที่เชื่อมโยงกับฐานข้อมูลอีกครั้ง ให้ทำดังนี้
- ดูเวอร์ชันคีย์ที่ใช้สำหรับฐานข้อมูล
- เปิดใช้เวอร์ชันคีย์เหล่านั้น
- รอให้การเปลี่ยนแปลงมีผลและตรวจสอบว่าข้อมูลเข้าถึงไม่ได้อีกต่อไปหรือไม่ โดยทั่วไปการเปลี่ยนแปลงจะมีผลภายในเวลาไม่กี่นาที แต่ก็อาจใช้เวลาถึง 3 ชั่วโมง
ดูบันทึกการตรวจสอบสำหรับคีย์ Cloud KMS
ก่อนเปิดใช้บันทึกการตรวจสอบการเข้าถึงข้อมูลของ Cloud KMS คุณควรทำความคุ้นเคยกับ Cloud Audit Logs
บันทึกการตรวจสอบการเข้าถึงข้อมูลของ Cloud KMS จะแสดงให้คุณเห็นเมื่อ Cloud Firestore ที่มีความเข้ากันได้กับ MongoDB หรือผลิตภัณฑ์อื่นๆ ที่กำหนดค่าให้ใช้คีย์ CMEK ของคุณทำการเรียกเข้ารหัสหรือถอดรหัสไปยัง Cloud KMS Cloud Firestore ที่มีความเข้ากันได้กับ MongoDB จะไม่ส่งคำสั่งเรียกเข้ารหัสหรือถอดรหัสในทุกคำขอข้อมูล แต่จะใช้ Poller ที่ตรวจสอบคีย์เป็นระยะๆ แทน ผลการสำรวจจะปรากฏในบันทึกการตรวจสอบ
คุณสามารถตั้งค่าและโต้ตอบกับบันทึกการตรวจสอบในคอนโซล Google Cloud ได้โดยทำดังนี้
ตรวจสอบว่าเปิดใช้การบันทึกสำหรับ Cloud KMS API ในโปรเจ็กต์
ไปที่ Cloud Logging ในคอนโซล Google Cloud
จำกัดรายการบันทึกไว้ที่คีย์ Cloud KMS โดยเพิ่มบรรทัดต่อไปนี้ลงในเครื่องมือสร้างคำค้นหา
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY resource.labels.location=KMS_LOCATION
แทนที่ค่าต่อไปนี้
KMS_KEY
โดยมีชื่อคีย์ CMEKKMS_KEYRING
ที่มีคีย์ริง KMS ที่มีคีย์KMS_LOCATION
พร้อมตำแหน่งของคีย์และคีย์ริง
บันทึกจะแสดงรายการบันทึก 2 รายการทุกๆ 5 นาทีต่อฐานข้อมูล รายการบันทึกจะมีลักษณะคล้ายกับตัวอย่างต่อไปนี้
Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore. audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore." Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/firestore-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-firestore. audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore."
ดูรายละเอียดเกี่ยวกับการตีความบันทึกการตรวจสอบได้ที่หัวข้อทำความเข้าใจบันทึกการตรวจสอบ
กำหนดค่านโยบายองค์กร CMEK
หากต้องการระบุข้อกำหนดด้านการปฏิบัติตามข้อกำหนดการเข้ารหัสสำหรับฐานข้อมูล Cloud Firestore ที่เข้ากันได้กับ MongoDB ในองค์กร ให้ใช้ข้อจำกัดด้านนโยบายขององค์กร CMEK
ต้องใช้การปกป้องด้วย CMEK
กำหนดค่า constraints/gcp.restrictNonCmekServices
เพื่อกำหนดให้ใช้ CMEK สำหรับ
Cloud Firestore ที่มีการสร้างฐานข้อมูลที่เข้ากันได้กับ MongoDB ตั้งค่าข้อจำกัดเป็น deny
และ
เพิ่ม firestore.googleapis.com
ลงในรายการปฏิเสธ เช่น
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
แทนที่ FIRESTORE_PROJECT
ด้วยโปรเจ็กต์ที่จะจำกัด
ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดค่านโยบายขององค์กรได้ที่การสร้างและแก้ไขนโยบาย
หลังจากนโยบายมีผลบังคับใช้ คุณจะได้รับFAILED_PRECONDITION
ข้อยกเว้น
และข้อความแสดงข้อผิดพลาดหากพยายามสร้างฐานข้อมูลที่ไม่ใช่ CMEK ในโปรเจ็กต์ที่ได้รับผลกระทบ
ตัวอย่างเช่น ข้อยกเว้นจะมีลักษณะดังนี้
{
"error": {
"code": 400,
"message": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "constraints/gcp.restrictNonCmekServices",
"subject": "orgpolicy:projects/FIRESTORE_PROJECT",
"description": "Constraint 'constraints/gcp.restrictNonCmekServices' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'firestore.googleapis.com'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
}
]
จำกัดการใช้คีย์สำหรับ CMEK
หากต้องการจำกัดคีย์ Cloud KMS ที่ใช้สำหรับการป้องกัน CMEK ให้กำหนดค่าข้อจำกัด constraints/gcp.restrictCmekCryptoKeyProjects
ค่าที่ยอมรับได้ในข้อจำกัดของรายการคือตัวบ่งชี้ลำดับชั้นของทรัพยากร (เช่น projects/PROJECT_ID
, under:folders/FOLDER_ID
และ under:organizations/ORGANIZATION_ID
) ใช้ข้อจำกัดนี้โดยกำหนดค่ารายการตัวบ่งชี้ลำดับชั้นของทรัพยากรและตั้งค่าข้อจำกัดเป็นอนุญาต
การกำหนดค่านี้จะจำกัดบริการที่รองรับเพื่อให้เลือกคีย์ CMEK ได้จากโปรเจ็กต์ โฟลเดอร์ และองค์กรที่ระบุไว้เท่านั้น คำขอสร้างทรัพยากรที่ได้รับการปกป้องด้วย CMEK ในบริการที่กำหนดค่าจะไม่สำเร็จหากไม่มีคีย์ Cloud Firestore ที่เข้ากันได้กับ MongoDB จากทรัพยากรที่อนุญาต
ตัวอย่างต่อไปนี้อนุญาตเฉพาะคีย์จาก ALLOWED_KEY_PROJECT_ID สำหรับฐานข้อมูลที่ได้รับการปกป้องด้วย CMEK ใน โปรเจ็กต์ที่ระบุ
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \
under:projects/<var>ALLOWED_KEY_PROJECT_ID</var> \
--project=<var>FIRESTORE_PROJECT</var>
หลังจากนโยบายมีผลบังคับใช้ คุณจะได้รับFAILED_PRECONDITION
ข้อยกเว้น
และข้อความแสดงข้อผิดพลาดหากละเมิดข้อจำกัด ข้อยกเว้น
มีลักษณะดังนี้
{
"error": {
"code": 400,
"message": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.",
"status": "FAILED_PRECONDITION",
"details": [
{
"@type": "type.googleapis.com/google.rpc.PreconditionFailure",
"violations": [
{
"type": "constraints/gcp.restrictCmekCryptoKeyProjects",
"subject": "orgpolicy:projects/FIRESTORE_PROJECT",
"description": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information."
}
]
}
]
}
}