توضّح هذه الصفحة كيفية تنفيذ المهام المتعلّقة بمفاتيح التشفير التي يديرها العميل (CMEK) في Cloud Firestore. لمزيد من المعلومات عن "مفاتيح التشفير التي يديرها العميل" بشكل عام، بما في ذلك حالات تفعيلها وأسباب ذلك، يُرجى الاطّلاع على مستندات Cloud KMS.
إعداد مفاتيح CMEK
قبل إنشاء قاعدة بيانات Cloud Firestore محمية بمفاتيح التشفير التي يديرها العميل، عليك إكمال الخطوات التالية:
- طلب الوصول إلى ميزة "مفتاح التشفير الذي يديره العميل" في Cloud Firestore
- أنشئ (أو استرِدّ) وكيل خدمة Cloud Firestore.
- أنشئ مفتاح CMEK.
- اضبط إعدادات "إدارة الهوية وإمكانية الوصول" لهذا المفتاح.
أكمِل هذه الخطوات لكل مشروع يحتوي على قواعد بيانات Cloud Firestore محمية بمفاتيح تشفير مُدارة من قِبل العميل (CMEK). إذا أنشأت لاحقًا مفتاح تشفير جديدًا مُدارًا من العميل، عليك ضبط إعدادات "إدارة الهوية وإمكانية الوصول" لهذا المفتاح.
طلب الدخول
قبل إنشاء وكيل خدمة Cloud Firestore، اطلب الوصول إلى ميزة "مفتاح التشفير الذي يديره العميل" من خلال ملء نموذج طلب الوصول.
إنشاء وكيل خدمة Cloud Firestore
قبل إنشاء مفتاح تشفير مُدار من العميل (CMEK)، يجب أن يكون لديك Cloud Firestore وكيل خدمة، وهو نوع من حسابات الخدمة التي تديرها Google والتي يستخدمها Cloud Firestore للوصول إلى المفتاح.
نفِّذ الأمر services identity create لإنشاء وكيل الخدمة الذي يستخدمه Cloud Firestore للوصول إلى مفتاح CMEK نيابةً عنك. ينشئ هذا الأمر حساب الخدمة إذا لم يكن موجودًا، ثم يعرضه.
gcloud beta services identity create \
--service=firestore.googleapis.com \
--project FIRESTORE_PROJECT
استبدِل FIRESTORE_PROJECT بالمشروع الذي تخطّط لاستخدامه
لقواعد بيانات Cloud Firestore.
يعرض الأمر رقم تعريف وكيل الخدمة، والذي يتم تنسيقه كعنوان بريد إلكتروني. سجِّل سلسلة البريد الإلكتروني الناتجة، لأنّك ستستخدمها في خطوة لاحقة.
Service identity created:
service-xxx@gcp-sa-firestore.
إنشاء مفتاح
يمكنك استخدام مفتاح تم إنشاؤه مباشرةً في Cloud KMS أو مفتاح مُدار خارجيًا تتيحه من خلال Cloud External Key Manager.
يجب أن يكون الموقع الجغرافي لمفتاح Cloud KMS مطابقًا للموقع الجغرافي لقاعدة بيانات Cloud Firestore التي سيتم استخدامه معها.
بالنسبة إلى المواقع الجغرافية الإقليمية لقواعد البيانات، استخدِم اسم الموقع الجغرافي نفسه لسلسلة المفاتيح والمفتاح وقاعدة البيانات لأنّ أسماء المواقع الجغرافية لها ربط واحد لواحد.
على سبيل المثال، إذا أردت إنشاء قاعدة بيانات محمية بمفاتيح التشفير التي يديرها العميل في
us-west1، أنشئ سلسلة مفاتيح ومفتاحًا فيus-west1.بالنسبة إلى المواقع الجغرافية لقواعد البيانات المتعدّدة المناطق، استخدِم اسم الموقع الجغرافي للموقع الجغرافي المتعدّد المناطق في KMS:
استخدِم الموقع الجغرافي المتعدّد المناطق
usفي Cloud KMS للموقع الجغرافي المتعدّد المناطق Cloud Firestorenam5.استخدِم الموقع الجغرافي المتعدّد المناطق
europeفي Cloud KMS للموقع الجغرافي المتعدّد المناطقeur3في Cloud Firestore.
في مشروع Google Cloud الذي تريد إدارة مفاتيحك فيه، أكمِل ما يلي:
أنشئ سلسلة مفاتيح ومفتاحًا باستخدام أحد الخيارات التالية:
- أنشئ سلسلة المفاتيح والمفتاح مباشرةً في Cloud KMS.
- استخدام مفتاح مُدار خارجيًا أنشئ المفتاح الخارجي ثم أنشئ مفتاح Cloud EKM لإتاحة المفتاح من خلال Cloud KMS.
ضبط إعدادات "إدارة الهوية وإمكانية الوصول" للمفتاح
وحدة التحكم
لمنح دور Cloud KMS إلى وكيل الخدمة، اتّبِع الخطوات التالية: يمكنك أيضًا منح الإذن على مستوى المفتاح أو سلسلة المفاتيح إذا أردت مستوى دقة أقل.
في وحدة تحكُّم Google Cloud، انتقِل إلى صفحة إدارة الهوية وإمكانية الوصول.
انقر على إضافة.
أدخِل المعرّف بتنسيق البريد الإلكتروني لوكيل خدمة Cloud Firestore.
اختَر دور Cloud KMS CryptoKey Encrypter/Decrypter.
انقر على حفظ.
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 الحالية المحمية بالتشفير التلقائي من Google لاستخدام "مفاتيح التشفير التي يديرها العميل".
يمكنك اختيار نوع التشفير والمفتاح فقط عند إنشاء قاعدة بيانات تم تفعيل ميزة "مفتاح التشفير الذي يديره العميل" فيها.
وحدة التحكم
في وحدة تحكّم Google Cloud، انتقِل إلى صفحة قواعد البيانات.
انقر على إنشاء قاعدة بيانات Firestore.
أدخِل معرّف قاعدة بيانات.
اختَر Enterprise Edition.
اختَر موقعًا جغرافيًا لقاعدة بياناتك.
انقر على عرض خيارات التشفير، ثم اختَر مفتاح Cloud KMS.
اختَر أو أدخِل اسم المورد لمفتاح CMEK الذي تريد استخدامه لقاعدة البيانات.
تقتصر قائمة المفاتيح على مشروع Google Cloud الحالي وموقع قاعدة البيانات الذي اخترته. لاستخدام مفتاح من مشروع مختلف على Google Cloud، انقر على تبديل المشروع أو إدخال المفتاح يدويًا.
إذا طُلب منك منح إذن المفتاح لحساب خدمة Cloud Firestore، انقر على منح. لإنشاء قاعدة بيانات CMEK، يجب منح حساب خدمة "Cloud Firestore" دور "
cloudkms.cryptoKeyEncrypterDecrypter".اختَر قواعد الأمان لعملاء الأجهزة الجوّالة والويب.
انقر على إنشاء قاعدة بيانات (Create Database).
بعد إنشاء قاعدة البيانات، يمكنك التأكّد من أنّها تستخدم مفاتيح CMEK من خلال الاطّلاع على تفاصيل قاعدة البيانات:
- إذا كانت قاعدة بياناتك محمية باستخدام مفاتيح التشفير التي يديرها العميل (CMEK)، سيظهر حقل نوع التشفير على أنّه مُدار من قِبل العميل، وسيعرض حقل مفتاح التشفير خدمة Cloud KMS المقابلة وإصدار المفتاح المستخدَم لحماية قاعدة البيانات هذه.
- إذا لم تكن قاعدة بياناتك محمية باستخدام مفاتيح التشفير التي يديرها العميل، سيظهر حقل نوع التشفير على أنّه مُدار من 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_IDFIRESTORE_PROJECTمع المشروع لاستخدامها في قاعدة بيانات Cloud Firestore
الوصول إلى قاعدة بيانات محمية بمفتاح تشفير مُدار من العميل (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 التلقائي (غير المستنِد إلى مفاتيح التشفير التي تديرها العميل)،
اضبط العلامة 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 إلى تشفير 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 Firestore-
BACKUP_IDمع رقم تعريف النسخة الاحتياطية -
KMS_PROJECTمع المشروع الذي يحتوي على مفتاح CMEK -
KMS_LOCATIONبالموقع الجغرافي الذي يحتوي على مفتاح CMEK وسلسلة المفاتيح KMS_KEYRING_IDمع رقم تعريف سلسلة مفاتيح CMEK
تأكَّد من أنّ قاعدة بيانات Cloud Firestore التي تمت استعادتها مشفَّرة باستخدام مفتاح CMEK:
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 Firestore-
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 FirestoreFIRESTORE_LOCATIONبموقع قاعدة بيانات Cloud Firestore-
BACKUP_IDمع رقم تعريف النسخة الاحتياطية
استنساخ قاعدة بيانات محمية بمفتاح تشفير مُدار من العميل (CMEK)
قبل استنساخ قاعدة بيانات محمية بمفتاح تشفير مُدار من العميل:
- قرِّر ما إذا كنت تريد استنساخ قاعدة البيانات إلى تشفير CMEK أو إلى تشفير Google التلقائي (غير المستند إلى CMEK) أو إلى التشفير نفسه المستخدَم في قاعدة البيانات المصدر.
جهِّز المفتاح (الإصدار الأساسي) وإصدار المفتاح الذي استخدمته لتشفير قاعدة البيانات المصدر. فعِّل كلاً من المفتاح وإصدار المفتاح.
gcloud
استنساخ قاعدة بيانات محمية بمفاتيح تشفير يديرها العميل (CMEK) إلى تشفير CMEK
لاستنساخ تشفير CMEK، نفِّذ الأمر
gcloud firestore databases clone
باستخدام علامتَي encryption-type وkms-key-name الاختياريتَين لضبط
نوع التشفير لقاعدة البيانات المستنسَخة. إذا لم تحدّد نوع التشفير، ستستخدم قاعدة البيانات المستنسَخة إعدادات التشفير نفسها المستخدَمة في قاعدة البيانات المصدر.
gcloud 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 firestore databases clone \
--encryption-type=google-default-encryption
استنساخ قاعدة بيانات محمية بمفاتيح تشفير يديرها العميل (CMEK) إلى نوع التشفير نفسه المستخدَم في قاعدة البيانات المصدر
للاستنساخ إلى نوع التشفير نفسه المستخدَم في قاعدة البيانات المصدر، اضبط العلامة
encryption-type على النحو التالي:
gcloud firestore databases clone \
--encryption-type=use-source-encryption
وهذا هو أيضًا الإعداد التلقائي في حال عدم تحديد --encryption-type.
Firebase CLI
استنساخ قاعدة بيانات محمية بمفاتيح تشفير يديرها العميل (CMEK) إلى تشفير CMEK
لاستنساخ قاعدة البيانات باستخدام تشفير CMEK، شغِّل الأمر
firebase firestore:databases:clone
مع علامتَي encryption-type وkms-key-name الاختياريتَين لضبط
نوع التشفير لقاعدة البيانات المستنسَخة. إذا لم تحدّد نوع التشفير، ستستخدم قاعدة البيانات المستنسَخة إعدادات التشفير نفسها المستخدَمة في قاعدة البيانات المصدر.
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--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 على النحو التالي:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=GOOGLE_DEFAULT_ENCRYPTION
استنساخ قاعدة بيانات محمية بمفاتيح تشفير يديرها العميل (CMEK) إلى نوع التشفير نفسه المستخدَم في قاعدة البيانات المصدر
للاستنساخ إلى نوع التشفير نفسه المستخدَم في قاعدة البيانات المصدر، اضبط العلامة
encryption-type على النحو التالي:
firebase firestore:databases:clone \
SOURCE_DATABASE \
DESTINATION_DATABASE \
--encryption-type=USE_SOURCE_ENCRYPTION
وهذا هو أيضًا الإعداد التلقائي في حال عدم تحديد --encryption-type.
الاطّلاع على المفتاح المستخدَم
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 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.
تعرض لك سجلّات تدقيق الوصول إلى البيانات في Cloud KMS الحالات التي يُجري فيها "Cloud Firestore" أو أي منتجات أخرى تم ضبطها لاستخدام مفتاح CMEK طلبات تشفير أو فك تشفير إلى Cloud KMS. لا يُصدر Cloud Firestore طلب تشفير أو فك تشفير لكل طلب بيانات، بل يحتفظ بدلاً من ذلك ببرنامج استطلاع يتحقّق من المفتاح بشكل دوري. تظهر نتائج الاستطلاع في سجلات التدقيق.
يمكنك إعداد سجلّات التدقيق والتفاعل معها في وحدة تحكّم 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باسم مفتاح 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 في مؤسستك، استخدِم قيد سياسة المؤسسة لمفاتيح التشفير التي يديرها العميل.
طلب الحماية باستخدام مفاتيح التشفير التي يديرها العميل (CMEK)
اضبط إعدادات constraints/gcp.restrictNonCmekServices لطلب استخدام مفتاح تشفير مُدار من العميل (CMEK) لإنشاء قاعدة بيانات 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
ورسالة خطأ إذا حاولت إنشاء قاعدة بيانات لا تستخدم مفتاح 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 في الخدمات التي تم ضبطها بدون مفتاح Cloud Firestore من أحد الموارد المسموح بها.
يسمح المثال التالي فقط بالمفاتيح من ALLOWED_KEY_PROJECT_ID لقواعد البيانات المحمية بمفاتيح التشفير التي يديرها العميل في المشروع المحدّد:
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."
}
]
}
]
}
}