توضِّح هذه الصفحة كيفية تنفيذ المهام المتعلّقة ب مفاتيح التشفير المُدارة من قِبل العميل (CMEK) في Cloud Firestore. لمزيد من المعلومات عن إدارة مفاتيح التشفير من جهة العميل بشكل عام، بما في ذلك حالات تفعيلها وسبب تفعيلها، يُرجى الاطّلاع على مستندات Cloud KMS.
إعداد مفاتيح CMEK
قبل أن تتمكّن من إنشاء قاعدة بيانات Cloud Firestore محمية بميزة "إدارة مفاتيح التشفير من جهة العميل"، يجب إكمال الخطوات التالية:
- طلب الوصول إلى Cloud Firestore ميزة CMEK
- أنشئ (أو استردّ) وكيل خدمة Cloud Firestore.
- أنشئ مفتاح CMEK.
- ضبط إعدادات "إدارة الهوية وإمكانية الوصول" لهذا المفتاح
أكمِل هذه الخطوات لكل مشروع سيحتوي على قواعد بيانات Cloud Firestore محمية بـ CMEK. إذا أنشأت لاحقًا مفتاح CMEK جديدًا، يجب ضبط إعدادات إدارة الهوية وإمكانية الوصول لهذا المفتاح.
طلب الدخول
قبل إنشاء وكيل خدمة Cloud Firestore، يُرجى طلب الوصول إلى ميزة CMEK من خلال ملء هذا النموذج.
إنشاء وكيل خدمة Cloud Firestore
قبل إنشاء مفتاح CMEK، يجب أن يكون لديك Cloud Firestore وكيل خدمة، وهو نوع من حسابات الخدمة المُدارة من Google التي يستخدمها Cloud Firestore للوصول إلى المفتاح.
نفِّذ الأمر services identity create لإنشاء موظّف خدمة يستخدمه Cloud Firestore للوصول إلى مفتاح "التشفير من جهة العميل" نيابةً عنك. ينشئ هذا الأمر حساب الخدمة إذا لم يكن متوفّرًا، ثم يعرضه.
gcloud beta services identity create \ --service=firestore.googleapis.com \ --project FIRESTORE_PROJECT
استبدِل FIRESTORE_PROJECT
بالمشروع الذي تخطّط
لاستخدامه لقواعد بيانات Cloud Firestore.
يعرض الأمر رقم تعريف موظّف الدعم، والذي يتم تنسيقه مثل عنوان البريد الإلكتروني. سجِّل سلسلة البريد الإلكتروني الناتجة، لأنّك ستستخدمها في خطوة لاحقة.
Service identity created: service-xxx@gcp-sa-firestore.iam.gserviceaccount.com
إنشاء مفتاح
يمكنك استخدام مفتاح تم إنشاؤه مباشرةً في Cloud KMS أو مفتاح تديره خارجيًا وتفعله من خلال Cloud External Key Manager.
يجب أن يكون الموقع الجغرافي للمفتاح في Cloud KMS هو نفسه الموقع الجغرافي لقاعدة بيانات Cloud Firestore التي سيتم استخدامه معها.
بالنسبة إلى مواقع قواعد البيانات الإقليمية، استخدِم اسم الموقع الجغرافي نفسه لسلسلة المفاتيح والمفتاح وقاعدة البيانات لأنّ أسماء المواقع الجغرافية تتم ربطها بشكلٍ مباشر.
على سبيل المثال، إذا أردت إنشاء قاعدة بيانات محمية بمفاتيح التشفير المُدارة للعميل (CMEK) في
us-west1
، أنشئ سلسلة مفاتيح ومفتاحًا فيus-west1
.بالنسبة إلى المواقع الجغرافية لقواعد البيانات في مناطق متعدّدة، استخدِم اسم الموقع الجغرافي للموقع الجغرافي المتعدّد المناطق في خدمة KMS:
- استخدِم الموقع الجغرافي المتعدّد المناطق
us
لخدمة Cloud KMS في الموقع الجغرافي المتعدّد المناطق Cloud Firestorenam5
. - استخدِم الموقع الجغرافي المتعدّد المناطق
europe
لخدمة Cloud KMS في الموقع الجغرافي المتعدّد المناطق Cloud Firestoreeur3
.
- استخدِم الموقع الجغرافي المتعدّد المناطق
في مشروع Google Cloud الذي تريد إدارة مفاتيحك فيه، أكمِل ما يلي:
أنشئ سلسلة مفاتيح ومفتاحًا باستخدام أحد الخيارَين التاليَين:
- أنشئ سلسلة المفاتيح والمفتاح مباشرةً في Cloud KMS.
- استخدام مفتاح مُدار خارجيًا أنشئ المفتاح الخارجي ثم أنشئ مفتاح Cloud EKM لإتاحة المفتاح من خلال Cloud KMS.
ضبط إعدادات "إدارة الهوية وإمكانية الوصول" للمفتاح
وحدة التحكم
لمنح دور Cloud KMS لموظّف الدعم، اتّبِع الخطوات التالية: يمكنك أيضًا منح الإذن على مستوى المفتاح أو ملف تعريف المفتاح إذا كنت تريد دقة أقل.
في Google Cloud Console، انتقِل إلى صفحة إدارة الهوية وإمكانية الوصول.
انقر على إضافة.
أدخِل رقم التعريف بتنسيق البريد الإلكتروني لموظّف Cloud Firestore الدعم.
اختَر دور المشفِّر/أداة فك التشفير لمفتاح التشفير في Cloud KMS.
انقر على حفظ.
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.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
إنشاء قاعدة بيانات مفعَّلة فيها ميزة "إدارة مفاتيح التشفير من جهة العميل"
بعد إنشاء مفاتيح CMEK وضبطها، يمكنك إنشاء قاعدة بيانات محمية باستخدام مفاتيح CMEK. لا يمكن تحويل قواعد بيانات Cloud Firestore الحالية المحمية باستخدام ميزة التشفير التلقائي من Google لاستخدام مفاتيح التشفير التي يديرها العميل.
لا يمكنك اختيار نوع التشفير ومفتاحه إلا عند إنشاء قاعدة بيانات مفعَّل فيها أسلوب "مفتاح التشفير الذي يديره العميل".
وحدة التحكم
في وحدة تحكّم Google Cloud، انتقِل إلى صفحة قواعد البيانات.
انقر على إنشاء قاعدة بيانات.
اختَر وضع قاعدة البيانات. انقر على متابعة.
في صفحة ضبط قاعدة البيانات، أدخِل معرّف قاعدة بيانات.
حدد موقعًا.
انقر على عرض خيارات التشفير، ثم اختَر مفتاح Cloud KMS.
اختَر اسم المورد لمفتاح CMEK الذي تريد استخدامه لقاعدة البيانات أو أدخِله.
تقتصر قائمة المفاتيح على مشروع Google Cloud الحالي وموقع قاعدة البيانات الذي اخترته. لاستخدام مفتاح من مشروع Google Cloud مختلف، انقر على تبديل المشروع أو إدخال المفتاح يدويًا.
إذا طُلب منك منح إذن الوصول إلى المفتاح لحساب الخدمة Cloud Firestore، انقر على منح. لإنشاء قاعدة بيانات إدارة مفاتيح التشفير من جهة العميل، يجب منح حساب الخدمة Cloud Firestore دور
cloudkms.cryptoKeyEncrypterDecrypter
.اختَر قواعد الأمان لعملاء الويب والأجهزة الجوّالة.
انقر على إنشاء قاعدة بيانات.
بعد إنشاء قاعدة البيانات، يمكنك التأكّد من تفعيل ميزة "إدارة مفاتيح التشفير من جهة العميل" في قاعدة البيانات من خلال عرض تفاصيل قاعدة البيانات:
- إذا كانت قاعدة بياناتك محمية باستخدام "مفاتيح التشفير التي يديرها العميل"، يظهر الحقل نوع التشفير على أنّه مُدار من قِبل العميل ويسرد الحقل مفتاح التشفير خدمة Cloud KMS المقابلة وإصدار المفتاح المستخدَم لحماية قاعدة البيانات هذه.
- إذا لم تكن قاعدة بياناتك محمية باستخدام مفاتيح التشفير المُدارة للعميل (CMEK)، سيظهر حقل نوع التشفير على أنّه تُديره Google.
gcloud
قبل إنشاء قاعدة بيانات مزوّدة بميزة "إدارة مفاتيح التشفير من جهة العميل" باستخدام Google Cloud CLI، ثبِّت الإصدار الأحدث وأذِنgcloud CLI. لمزيد من المعلومات، يُرجى الاطّلاع على تثبيت gcloud CLI.
gcloud firestore databases create --location=FIRESTORE_DATABASE_LOCATION \
--database=DATABASE_ID \
--kms-key-name=KMS_KEY_NAME \
--project=FIRESTORE_PROJECT
استبدِل ما يلي:
-
FIRESTORE_DATABASE_LOCATION
مع الموقع الجغرافي Cloud Firestore لقاعدة البيانات DATABASE_ID
مع معرّف لقاعدة البياناتKMS_KEY_NAME
بالاسم الذي حدّدته للمفتاح. استخدِم اسم المرجع الكامل للمفتاح بالتنسيق التالي:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
FIRESTORE_PROJECT
مع المشروع الذي تريد استخدامه لقاعدة بيانات Cloud Firestore
واجهة برمجة تطبيقات REST
طلب HTTP:
POST https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
في نص الطلب، اضبط 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 -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
"type":"FIRESTORE_NATIVE",
"locationId":"{FIRESTORE_DATABASE_LOCATION}",
"cmekConfig": {
"kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
}
}'
Firebase CLI
لإنشاء قاعدة بيانات مفعَّلة فيها ميزة "التشفير الذي يديره العميل"، استخدِم حقل اسم مفتاح KMS. في حال عدم تحديد المَعلمة --kms-key-name
، تنشئ Cloud Firestore قاعدة بيانات غير متوافقة مع تنسيق "مفتاح التشفير المشترَك" تلقائيًا.
firebase firestore:databases:create DATABASE_ID
--location LOCATION
--kms-key-name projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
--project FIRESTORE_PROJECT
استبدِل ما يلي:
DATABASE_ID
مع رقم تعريف قاعدة بياناتكLOCATION
مع الموقع الجغرافي لقاعدة بياناتكKMS_PROJECT
مع المشروع الذي يحتوي على مفتاح CMEKKMS_LOCATION
مع الموقع الجغرافي الذي يحتوي على مفتاح CMEK وسلسلة المفاتيحKMS_KEYRING_ID
مع معرّف سلسلة مفاتيح CMEKFIRESTORE_PROJECT
مع المشروع الذي تريد استخدامه لقاعدة بيانات Cloud Firestore
تأكَّد من حماية قاعدة بيانات Cloud Firestore باستخدام واجهة برمجة التطبيقات Firebase CLI:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
تظهر معلومات CMEK التالية في رسالة الردّ:
- يوفّر حقل اسم مفتاح إدارة الخدمات الرئيسية (KMS) اسم مورد المفتاح الكامل الذي يتم استخدامه لتشفير قاعدة بيانات CMEK في Cloud Firestore.
- يوفّر حقل إصدارات المفاتيح النشطة قائمة بجميع إصدارات المفاتيح المستخدَمة حاليًا في قاعدة بيانات CMEK هذه. أثناء تبديل المفاتيح، يمكنك الحصول على نُسخ متعدّدة من المفاتيح النشطة.
Terraform
لإنشاء قاعدة بيانات مفعَّلة فيها ميزة "إدارة مفاتيح التشفير من جهة العميل"، استخدِم المرجع google_firestore_database
. لمزيد من المعلومات والأمثلة، يُرجى الاطّلاع على
google_firestore_database
.
resource "google_firestore_database" "database" {
project = "FIRESTORE_PROJECT"
name = "DATABASE_ID"
location_id = "FIRESTORE_DATABASE_LOCATION"
type = "DATABASE_TYPE"
cmek_config {
kms_key_name = "KMS_KEY_NAME"
}
}
استبدِل ما يلي:
FIRESTORE_PROJECT
مع المشروع الذي تريد استخدامه لقاعدة بيانات Cloud FirestoreDATABASE_ID
مع معرّف لقاعدة البيانات-
FIRESTORE_DATABASE_LOCATION
مع الموقع الجغرافي Cloud Firestore لقاعدة البيانات DATABASE_TYPE
معFIRESTORE_NATIVE
للوضع "مدمَج مع المحتوى" أوDATASTORE_MODE
للوضع "مساحة تخزين البيانات"KMS_KEY_NAME
بالاسم الذي حدّدته للمفتاح. استخدِم اسم المرجع الكامل للمفتاح بالتنسيق التالي:projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID
الوصول إلى قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة للعميل (CMEK)
من المفترض أن تعمل جميع عمليات القراءة والكتابة وطلبات البحث المُرسَلة إلى قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة للعميل (CMEK) بالطريقة نفسها التي تعمل بها قاعدة البيانات المشفَّرة التلقائية من Google. على سبيل المثال، لا تحتاج إلى تقديم مفتاح لكل طلب.
استعادة قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة للعميل (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 (غير مزوّد بميزة "إدارة مفاتيح التشفير من جهة العميل")، اضبط العلامة 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 FirestoreFIRESTORE_LOCATION
مع الموقع الجغرافي لقاعدة بيانات Cloud FirestoreBACKUP_ID
مع رقم تعريف النسخة الاحتياطيةKMS_PROJECT
مع المشروع الذي يحتوي على مفتاح CMEKKMS_LOCATION
مع الموقع الجغرافي الذي يحتوي على مفتاح CMEK وسلسلة المفاتيحKMS_KEYRING_ID
مع معرّف سلسلة مفاتيح CMEK
تأكَّد من أنّ قاعدة بيانات Cloud Firestore التي تم استعادتها مشفَّرة باستخدام مفتاح إدارة التشفير (CMK):
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
استعادة قاعدة بيانات محمية بمفاتيح التشفير المُدارة للعميل (CMEK) إلى التشفير التلقائي
لاستعادة التشفير التلقائي من Google (غير مزوّد بميزة "إدارة مفاتيح التشفير")، اضبط العلامة 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 FirestoreFIRESTORE_LOCATION
مع الموقع الجغرافي لقاعدة بيانات Cloud FirestoreBACKUP_ID
مع رقم تعريف النسخة الاحتياطية
استعادة قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة للعميل (CMEK) إلى نوع التشفير نفسه المستخدَم في النسخة الاحتياطية
لاستعادة نوع التشفير نفسه المستخدَم في النسخة الاحتياطية، اضبط العلامة encryption-type
على النحو التالي:
firebase firestore:databases:restore \
--database DATABASE_IDD \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
استبدِل ما يلي:
DATABASE_ID
مع رقم تعريف قاعدة بياناتكFIRESTORE_PROJECT
مع المشروع الذي تريد استخدامه لقاعدة بيانات Cloud FirestoreFIRESTORE_LOCATION
مع الموقع الجغرافي لقاعدة بيانات Cloud FirestoreBACKUP_ID
مع رقم تعريف النسخة الاحتياطية
عرض المفتاح المستخدَم
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
طلب 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"
—----------------------------------------- Response —--------------------------------------------
{
"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 ساعات.
عند إيقاف مفتاح تستخدمه قاعدة بيانات، من المتوقّع أن تتلقّى استثناء
FAILED_PRECONDITION
يتضمّن تفاصيل إضافية في رسالة الخطأ،
على سبيل المثال:
{ "error": { "code": 400, "message": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist).", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "The customer-managed encryption key required by the requested resource is not accessible. Error reason: generic::permission_denied: Permission 'cloudkms.cryptoKeyVersions.useToEncrypt' denied on resource 'projects/FIRESTORE_PROJECT/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}' (or it may not exist)" } ] } }
تفعيل مفتاح
لإعادة تفعيل مفتاح مرتبط بقاعدة بيانات، أكمِل ما يلي:
- عرض إصدارات المفاتيح المستخدَمة في قاعدة بيانات
- تفعيل إصدارات المفاتيح هذه المُستخدَمة
- انتظِر حتى يتم تطبيق التغيير وتحقّق مما إذا كان لا يمكن الوصول إلى البيانات. عادةً ما تدخل التغييرات حيز التنفيذ خلال دقائق، ولكن قد تستغرق مدة تصل إلى 3 ساعات.
عرض سجلّات التدقيق لمفتاح Cloud KMS
قبل تفعيل سجلّات تدقيق الوصول إلى البيانات في Cloud KMS، يجب أن تكون على دراية بسجلّات تدقيق Cloud.
توضِّح لك سجلّات التدقيق في الوصول إلى البيانات في Cloud KMS الحالات التي يُجري فيها Cloud Firestore أو أي منتجات أخرى تم ضبطها لاستخدام مفتاح CMEK طلبات تشفير/فك تشفير إلى Cloud KMS. لا تُصدر Cloud Firestore طلب تشفير/فك تشفير عند كل طلب data ، ولكنّها تحافظ بدلاً من ذلك على أداة فحص تتحقّق من المفتاح بشكل دوري. تظهر نتائج الاستطلاع في سجلات التدقيق.
يمكنك إعداد سجلّات التدقيق والتفاعل معها في وحدة تحكّم Google Cloud:
تأكَّد من تفعيل التسجيل لواجهة برمجة التطبيقات Cloud KMS API في مشروعك.
انتقِل إلى Cloud Logging في Google Cloud Console.
يمكنك حصر إدخالات السجلّ بمفتاح 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
مع الموقع الجغرافي للمفتاح وسلسلة المفاتيح
يعرض السجلّ إدخالَين في السجلّ كل خمس دقائق تقريبًا لكل قاعدة بيانات. تبدو إدخالات السجلّ مشابهة للأمثلة التالية:
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.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-firestore.iam.gserviceaccount.com" 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.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-firestore.iam.gserviceaccount.com"
اطّلِع على فهم سجلّات التدقيق لمعرفة تفاصيل عنinterpreting audit logs.
ضبط سياسة مؤسسة إدارة مفاتيح التشفير (CMK)
لتحديد متطلبات الامتثال لميزة "التشفير من جهة العميل" Cloud Firestore لقواعد البيانات في مؤسستك، استخدِم قيد سياسة مؤسسة مفتاح تشفير المفتاح (CMEK).
طلب حماية مفاتيح التشفير المُدارة للعميل (CMEK)
اضبط constraints/gcp.restrictNonCmekServices
لطلب استخدام مفتاح إدارة الخدمات في السحابة الإلكترونية (CMK) لإنشاء قاعدة بيانات
Cloud Firestore. اضبط القيود على deny
و
أضِف firestore.googleapis.com
إلى القائمة المحظورة، على سبيل المثال:
gcloud resource-manager org-policies deny gcp.restrictNonCmekServices is:firestore.googleapis.com --project=FIRESTORE_PROJECT
استبدِل FIRESTORE_PROJECT
بالمشروع المطلوب حظره.
لمزيد من المعلومات عن ضبط سياسات المؤسسة، اطّلِع على مقالة إنشاء السياسات وتعديلها.
بعد سريان السياسة، ستتلقّى استثناء FAILED_PRECONDITION
ورسالة خطأ في حال محاولة إنشاء قاعدة بيانات غير مزوّدة بميزة "التشفير من جهة العميل" ضمن المشروع المتأثر. على سبيل المثال، يبدو الاستثناء على النحو التالي:
{ "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." } ]
تقييد استخدام مفاتيح "مفتاح ترميز مُدار للعميل"
لتقييد مفاتيح Cloud KMS المستخدَمة لحماية CMEK،
يمكنك ضبط قيد constraints/gcp.restrictCmekCryptoKeyProjects
.
بصفتها قيدًا على القائمة، تكون القيم المقبولة هي مؤشرات التسلسل الهرمي للموارد (مثل
projects/PROJECT_ID
وunder:folders/FOLDER_ID
و
under:organizations/ORGANIZATION_ID
). استخدِم هذا القيد من خلال ضبط
قائمة مؤشرات التسلسل الهرمي للموارد وضبط القيد على السماح.
يفرض هذا الإعداد قيودًا على الخدمات المتوافقة بحيث لا يمكن اختيار مفاتيح CMEK إلا من المشاريع والمجلدات والمؤسسات المدرَجة. لا تنجح طلبات إنشاء موارد محمية باستخدام "مفتاح إدارة الخدمات في السحابة الإلكترونية" (CMEK) في الخدمات التي تم ضبطها بدون مفتاح
Cloud Firestore من أحد الموارد المسموح بها.
لا يسمح المثال التالي إلا بالمفاتيح من ALLOWED_KEY_PROJECT_ID للوصول إلى قواعد البيانات المحمية بميزة "إدارة مفاتيح التشفير من جهة العميل" في المشروع المحدّد:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
بعد سريان السياسة، ستتلقّى استثناء 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." } ] } ] } }