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

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

إعداد مفاتيح التشفير المُدارة من قِبل العميل (CMEK)

قبل أن تتمكّن من إنشاء قاعدة بيانات Cloud Firestore متوافقة مع MongoDB ومحمية باستخدام مفتاح التشفير المُدارة من العميل (CMEK)، يجب إكمال الخطوات التالية:

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

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

طلب الدخول

قبل إنشاء وكيل خدمة متوافق مع Cloud Firestore وMongoDB، اطلب الوصول إلى ميزة "إدارة المفاتيح التي يوفّرها العميل" (CMEK) من خلال ملء نموذج طلب الوصول.

إنشاء وكيل خدمة متوافق مع MongoDB في Cloud Firestore

قبل إنشاء مفتاح CMEK، يجب أن يكون لديك وكيل خدمة في Cloud Firestore مع توافق MongoDB، وهو نوع من حسابات الخدمة التي تديرها Google وتستخدمها خدمة Cloud Firestore مع توافق MongoDB للوصول إلى المفتاح.

نفِّذ الأمر services identity create لإنشاء وكيل الخدمة الذي يستخدمه 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 التي سيتم استخدامها معها.

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

  1. فعِّل Cloud KMS API.

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

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

وحدة التحكم

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

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

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

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

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

  4. اختَر دور Cloud KMS CryptoKey Encrypter/Decrypter.

  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.
role: roles/cloudkms.cryptoKeyEncrypterDecrypter

إنشاء قاعدة بيانات مفعَّلة باستخدام مفتاح تشفير يديره العميل (CMEK)

بعد إنشاء مفاتيح CMEK وإعدادها، يمكنك إنشاء قاعدة بيانات محمية باستخدام CMEK. لا يمكن تحويل قواعد بيانات Cloud Firestore الحالية المتوافقة مع MongoDB والمحمية من خلال التشفير التلقائي من Google إلى استخدام مفاتيح التشفير التي يديرها العميل (CMEK).

يمكنك اختيار نوع التشفير والمفتاح فقط عند إنشاء قاعدة بيانات مفعَّلة باستخدام مفتاح تشفير يديره العميل (CMEK).

وحدة التحكم

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

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

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

  3. أدخِل رقم تعريف قاعدة البيانات.

  4. اختَر Enterprise Edition.

  5. اختَر موقعًا جغرافيًا لقاعدة البيانات.

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

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

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

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

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

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

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

  • إذا كانت قاعدة البيانات محمية باستخدام مفاتيح التشفير التي يديرها العميل (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) بالطريقة نفسها كما هو الحال مع قاعدة بيانات مشفّرة تلقائيًا من Google. على سبيل المثال، ليس عليك تقديم مفتاح لكل طلب.

استعادة قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة من قِبل العميل

قبل استعادة قاعدة بيانات محمية باستخدام مفتاح تشفير يديره العميل (CMEK) من نسخة احتياطية، يجب مراعاة ما يلي:

  • حدِّد ما إذا كنت تريد استعادة قاعدة البيانات إلى التشفير باستخدام مفاتيح التشفير المُدارة للعميل (CMEK) أو إلى التشفير التلقائي من Google (غير CMEK) أو إلى التشفير نفسه المستخدَم في النسخة الاحتياطية.
  • جهِّز المفتاح (الإصدار الأساسي) وإصدار المفتاح الذي استخدمته لتشفير النسخة الاحتياطية. فعِّل كلاً من المفتاح وإصدار المفتاح.

gcloud

استعادة قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة للعميل إلى التشفير باستخدام مفاتيح التشفير المُدارة للعميل

لاستعادة التشفير باستخدام مفاتيح التشفير التي يديرها العميل، شغِّل الأمر 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

استعادة قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة من قِبل العميل إلى التشفير التلقائي

لإعادة الضبط على تشفير Google التلقائي (غير CMEK)، اضبط العلامة encryption-type بالطريقة التالية:

gcloud firestore databases restore \
--encryption-type=google-default-encryption

استعادة قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة من قِبل العميل إلى نوع التشفير نفسه المستخدَم في النسخة الاحتياطية

لاستعادة النسخة الاحتياطية باستخدام نوع التشفير نفسه، اضبط العلامة encryption-type بالطريقة التالية:

gcloud firestore databases restore --encryption-type=use-source-encryption

Firebase CLI

استعادة قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة للعميل إلى التشفير باستخدام مفاتيح التشفير المُدارة للعميل

لاستعادة التشفير باستخدام مفتاح التشفير المُدارة من العميل (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 المتوافقة مع MongoDB
  • استبدِل FIRESTORE_LOCATION بموقع قاعدة بيانات Cloud Firestore المتوافقة مع MongoDB
  • استبدِل BACKUP_ID بمعرّف النسخة الاحتياطية
  • استبدِل KMS_PROJECT بالمشروع الذي يحتوي على مفتاح CMEK.
  • استبدِل KMS_LOCATION بالموقع الجغرافي الذي يحتوي على مفتاح CMEK وسلسلة المفاتيح
  • KMS_KEYRING_ID مع معرّف سلسلة مفاتيح CMEK

تأكَّد من أنّ قاعدة بيانات Cloud Firestore المتوافقة مع MongoDB التي تم استعادتها مشفَّرة باستخدام مفتاح التشفير المُدارة من العميل (CMEK):

firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT

استعادة قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة من قِبل العميل إلى التشفير التلقائي

لإعادة الضبط على تشفير Google التلقائي (غير CMEK)، اضبط العلامة 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 المتوافقة مع MongoDB
  • استبدِل FIRESTORE_LOCATION بموقع قاعدة بيانات Cloud Firestore المتوافقة مع MongoDB
  • استبدِل BACKUP_ID بمعرّف النسخة الاحتياطية

استعادة قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة من قِبل العميل إلى نوع التشفير نفسه المستخدَم في النسخة الاحتياطية

لاستعادة النسخة الاحتياطية باستخدام نوع التشفير نفسه، اضبط العلامة 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 المتوافقة مع MongoDB
  • استبدِل FIRESTORE_LOCATION بموقع قاعدة بيانات Cloud Firestore المتوافقة مع MongoDB
  • استبدِل BACKUP_ID بمعرّف النسخة الاحتياطية

استنساخ قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة من العميل

قبل استنساخ قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة من العميل (CMEK)، يجب مراعاة ما يلي:

  • حدِّد ما إذا كنت تريد استنساخ قاعدة البيانات إلى التشفير باستخدام مفاتيح التشفير المُدارة للعميل (CMEK) أو إلى التشفير التلقائي من Google (غير CMEK) أو إلى التشفير نفسه المستخدَم في قاعدة البيانات المصدر.
  • جهِّز المفتاح (الإصدار الأساسي) وإصدار المفتاح الذي استخدمته لتشفير قاعدة البيانات المصدر. فعِّل كلاً من المفتاح وإصدار المفتاح.

gcloud

استنساخ قاعدة بيانات محمية باستخدام مفاتيح التشفير المُدارة للعميل إلى مفاتيح التشفير المُدارة للعميل

للاستنساخ إلى تشفير 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

استنساخ قاعدة بيانات محمية باستخدام مفتاح تشفير مُدار من العميل إلى التشفير التلقائي

للاستنساخ إلى تشفير Google التلقائي (بدون استخدام مفتاح التشفير المُدارة من العميل)، اضبط العلامة 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 لتأكيد إعداد مفتاح التشفير الذي يديره العميل لقاعدة البيانات:

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"

مثال على الرد:

{
  "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 ساعات.

عند إيقاف مفتاح مستخدَم من قِبل قاعدة بيانات، من المتوقّع أن تتلقّى استثناء 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."
      }
    ]
  }
}

تفعيل مفتاح

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

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

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

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

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

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

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

  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.
    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).

طلب الحماية باستخدام مفاتيح التشفير المُدارة من العميل

اضبط constraints/gcp.restrictNonCmekServices لطلب استخدام مفتاح التشفير المُدارة من العميل عند إنشاء قاعدة بيانات متوافقة مع 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 ورسالة خطأ إذا حاولت إنشاء قاعدة بيانات غير مشفّرة باستخدام مفتاح تديره أنت ضمن المشروع المتأثر. على سبيل المثال، يبدو الاستثناء على النحو التالي:

{
  "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 المستخدَمة للحماية باستخدام مفاتيح التشفير التي يديرها العميل، اضبط قيد 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."
          }
        ]
      }
    ]
  }
}

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