استخدام مفاتيح التشفير المُدارة للعميل (CMEK)

توضِّح هذه الصفحة كيفية تنفيذ المهام المتعلّقة ب مفاتيح التشفير المُدارة من قِبل العميل (CMEK) في Cloud Firestore. لمزيد من المعلومات عن إدارة مفاتيح التشفير من جهة العميل بشكل عام، بما في ذلك حالات تفعيلها وسبب تفعيلها، يُرجى الاطّلاع على مستندات Cloud KMS.

إعداد مفاتيح CMEK

قبل أن تتمكّن من إنشاء قاعدة بيانات Cloud Firestore محمية بميزة "إدارة مفاتيح التشفير من جهة العميل"، يجب إكمال الخطوات التالية:

  1. طلب الوصول إلى Cloud Firestore ميزة CMEK
  2. أنشئ (أو استردّ) وكيل خدمة Cloud Firestore.
  3. أنشئ مفتاح CMEK.
  4. ضبط إعدادات "إدارة الهوية وإمكانية الوصول" لهذا المفتاح

أكمِل هذه الخطوات لكل مشروع سيحتوي على قواعد بيانات 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 Firestore nam5.
    • استخدِم الموقع الجغرافي المتعدّد المناطق europe لخدمة Cloud KMS في الموقع الجغرافي المتعدّد المناطق Cloud Firestore eur3.

في مشروع Google Cloud الذي تريد إدارة مفاتيحك فيه، أكمِل ما يلي:

  1. فعِّل واجهة برمجة التطبيقات Cloud KMS API.

  2. أنشئ سلسلة مفاتيح ومفتاحًا باستخدام أحد الخيارَين التاليَين:

ضبط إعدادات "إدارة الهوية وإمكانية الوصول" للمفتاح

وحدة التحكم

لمنح دور Cloud KMS لموظّف الدعم، اتّبِع الخطوات التالية: يمكنك أيضًا منح الإذن على مستوى المفتاح أو ملف تعريف المفتاح إذا كنت تريد دقة أقل.

  1. في Google Cloud Console، انتقِل إلى صفحة إدارة الهوية وإمكانية الوصول.

    الانتقال إلى صفحة "إدارة الهوية وإمكانية الوصول"

  2. انقر على إضافة.

  3. أدخِل رقم التعريف بتنسيق البريد الإلكتروني لموظّف Cloud Firestore الدعم.

  4. اختَر دور المشفِّر/أداة فك التشفير لمفتاح التشفير في Cloud KMS.

  5. انقر على حفظ.

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 لاستخدام مفاتيح التشفير التي يديرها العميل.

لا يمكنك اختيار نوع التشفير ومفتاحه إلا عند إنشاء قاعدة بيانات مفعَّل فيها أسلوب "مفتاح التشفير الذي يديره العميل".

وحدة التحكم

  1. في وحدة تحكّم Google Cloud، انتقِل إلى صفحة قواعد البيانات.

    انتقِل إلى صفحة "قواعد البيانات".

  2. انقر على إنشاء قاعدة بيانات.

  3. اختَر وضع قاعدة البيانات. انقر على متابعة.

  4. في صفحة ضبط قاعدة البيانات، أدخِل معرّف قاعدة بيانات.

  5. حدد موقعًا.

  6. انقر على عرض خيارات التشفير، ثم اختَر مفتاح Cloud KMS.

  7. اختَر اسم المورد لمفتاح CMEK الذي تريد استخدامه لقاعدة البيانات أو أدخِله.

  8. تقتصر قائمة المفاتيح على مشروع Google Cloud الحالي وموقع قاعدة البيانات الذي اخترته. لاستخدام مفتاح من مشروع Google Cloud مختلف، انقر على تبديل المشروع أو إدخال المفتاح يدويًا.

  9. إذا طُلب منك منح إذن الوصول إلى المفتاح لحساب الخدمة Cloud Firestore، انقر على منح. لإنشاء قاعدة بيانات إدارة مفاتيح التشفير من جهة العميل، يجب منح حساب الخدمة Cloud Firestore دور cloudkms.cryptoKeyEncrypterDecrypter.

  10. اختَر قواعد الأمان لعملاء الويب والأجهزة الجوّالة.

  11. انقر على إنشاء قاعدة بيانات.

بعد إنشاء قاعدة البيانات، يمكنك التأكّد من تفعيل ميزة "إدارة مفاتيح التشفير من جهة العميل" في قاعدة البيانات من خلال عرض تفاصيل قاعدة البيانات:

  • إذا كانت قاعدة بياناتك محمية باستخدام "مفاتيح التشفير التي يديرها العميل"، يظهر الحقل نوع التشفير على أنّه مُدار من قِبل العميل ويسرد الحقل مفتاح التشفير خدمة 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 مع المشروع الذي يحتوي على مفتاح CMEK
  • KMS_LOCATION مع الموقع الجغرافي الذي يحتوي على مفتاح CMEK وسلسلة المفاتيح
  • KMS_KEYRING_ID مع معرّف سلسلة مفاتيح CMEK
  • FIRESTORE_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 Firestore
  • DATABASE_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 Firestore
  • FIRESTORE_LOCATION مع الموقع الجغرافي لقاعدة بيانات Cloud Firestore
  • BACKUP_ID مع رقم تعريف النسخة الاحتياطية
  • KMS_PROJECT مع المشروع الذي يحتوي على مفتاح CMEK
  • KMS_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 Firestore
  • FIRESTORE_LOCATION مع الموقع الجغرافي لقاعدة بيانات Cloud Firestore
  • BACKUP_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 Firestore
  • FIRESTORE_LOCATION مع الموقع الجغرافي لقاعدة بيانات Cloud Firestore
  • BACKUP_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: اسم مورد المفتاح الكامل للمفتاح المستخدَم في تشفير قاعدة البيانات المحمية باستخدام مفتاح CMEK
  • activeKeyVersion: قائمة بجميع إصدارات المفاتيح المستخدَمة حاليًا من قِبل قاعدة البيانات المحمية بمفتاح 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"
    ]
  },
  ……
}

إيقاف مفتاح

لإيقاف مفتاح مرتبط بقاعدة بيانات، أكمِل ما يلي:

  1. عرض إصدارات المفاتيح المستخدَمة لقاعدة بيانات
  2. أوقِف إصدارات المفاتيح هذه المُستخدَمة.
  3. انتظِر حتى يتم تطبيق التغيير وتحقّق مما إذا كان لا يمكن الوصول إلى البيانات. عادةً ما تدخل التغييرات حيز التنفيذ خلال دقائق، ولكن قد تستغرق مدة تصل إلى 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)"
      }
    ]
  }
}

تفعيل مفتاح

لإعادة تفعيل مفتاح مرتبط بقاعدة بيانات، أكمِل ما يلي:

  1. عرض إصدارات المفاتيح المستخدَمة في قاعدة بيانات
  2. تفعيل إصدارات المفاتيح هذه المُستخدَمة
  3. انتظِر حتى يتم تطبيق التغيير وتحقّق مما إذا كان لا يمكن الوصول إلى البيانات. عادةً ما تدخل التغييرات حيز التنفيذ خلال دقائق، ولكن قد تستغرق مدة تصل إلى 3 ساعات.

عرض سجلّات التدقيق لمفتاح Cloud KMS

قبل تفعيل سجلّات تدقيق الوصول إلى البيانات في Cloud KMS، يجب أن تكون على دراية بسجلّات تدقيق Cloud.

توضِّح لك سجلّات التدقيق في الوصول إلى البيانات في Cloud KMS الحالات التي يُجري فيها Cloud Firestore أو أي منتجات أخرى تم ضبطها لاستخدام مفتاح CMEK طلبات تشفير/فك تشفير إلى Cloud KMS. لا تُصدر Cloud Firestore طلب تشفير/فك تشفير عند كل طلب data ، ولكنّها تحافظ بدلاً من ذلك على أداة فحص تتحقّق من المفتاح بشكل دوري. تظهر نتائج الاستطلاع في سجلات التدقيق.

يمكنك إعداد سجلّات التدقيق والتفاعل معها في وحدة تحكّم Google Cloud:

  1. تأكَّد من تفعيل التسجيل لواجهة برمجة التطبيقات Cloud KMS API في مشروعك.

  2. انتقِل إلى Cloud Logging في Google Cloud Console.

    الانتقال إلى Cloud Logging

  3. يمكنك حصر إدخالات السجلّ بمفتاح 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 مع اسم مفتاح CMEK
    • KMS_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."
          }
        ]
      }
    ]
  }
}

الخطوات التالية