इस पेज पर, Cloud Firestore with MongoDB compatibility के लिए, ग्राहक के मैनेज किए गए एन्क्रिप्शन कुंजियों (सीएमईके) से जुड़े टास्क पूरे करने का तरीका बताया गया है. CMEK के बारे में ज़्यादा जानने के लिए, Cloud KMS का दस्तावेज़ पढ़ें. इसमें यह भी बताया गया है कि इसे कब और क्यों चालू करना चाहिए.
CMEK कुंजियां तैयार करना
MongoDB के साथ काम करने वाला, सीएमईके से सुरक्षित Cloud Firestore डेटाबेस बनाने से पहले, आपको यह तरीका अपनाना होगा:
- Cloud Firestore के साथ MongoDB के साथ काम करने वाली सीएमईके सुविधा का ऐक्सेस पाने का अनुरोध करें.
- MongoDB के साथ काम करने वाले Cloud Firestore के सेवा एजेंट को बनाएं या उसे वापस पाएं.
- CMEK कुंजी बनाना.
- उस कुंजी के लिए IAM सेटिंग कॉन्फ़िगर करें.
हर उस प्रोजेक्ट के लिए यह तरीका अपनाएं जिसमें सीएमईके से सुरक्षित Cloud Firestore with MongoDB compatibility डेटाबेस शामिल होंगे. अगर बाद में कोई नई सीएमईके कुंजी बनाई जाती है, तो आपको उस कुंजी के लिए आईएएम सेटिंग कॉन्फ़िगर करनी होंगी.
ऐक्सेस मांगें
MongoDB के साथ काम करने वाले Cloud Firestore सेवा एजेंट को बनाने से पहले, ऐक्सेस का अनुरोध करने वाला फ़ॉर्म भरकर, CMEK सुविधा के ऐक्सेस का अनुरोध करें.
MongoDB के साथ काम करने वाले Cloud Firestore सेवा एजेंट को बनाना
सीएमईके कुंजी बनाने से पहले, आपके पास MongoDB के साथ काम करने वाला Cloud Firestore सेवा एजेंट होना चाहिए. यह Google मैनेज करता है. Cloud Firestore with MongoDB compatibility, इस सेवा खाते का इस्तेमाल करके कुंजी को ऐक्सेस करता है.
services identity create कमांड चलाकर, सेवा एजेंट बनाएं. Cloud Firestore with MongoDB compatibility, इस सेवा एजेंट का इस्तेमाल करके आपकी ओर से सीएमईके कुंजी को ऐक्सेस करता है. अगर सेवा खाता पहले से मौजूद नहीं है, तो यह कमांड उसे बनाती है. इसके बाद, उसे दिखाती है.
gcloud beta services identity create \
--service=firestore.googleapis.com \
--project FIRESTORE_PROJECT
FIRESTORE_PROJECT
को उस प्रोजेक्ट से बदलें जिसका इस्तेमाल आपको Cloud Firestore with MongoDB compatibility डेटाबेस के लिए करना है.
इस कमांड से, सर्विस एजेंट का आईडी दिखता है. यह आईडी, ईमेल पते के तौर पर फ़ॉर्मैट किया जाता है. आउटपुट ईमेल स्ट्रिंग रिकॉर्ड करें, क्योंकि आपको इसका इस्तेमाल बाद के चरण में करना होगा.
Service identity created:
service-xxx@gcp-sa-firestore.
कुंजी बनाना
क्लाउड केएमएस (KMS) में सीधे तौर पर बनाई गई कुंजी का इस्तेमाल किया जा सकता है. इसके अलावा, बाहरी तौर पर मैनेज की गई ऐसी कुंजी का इस्तेमाल किया जा सकता है जिसे Cloud External Key Manager की मदद से उपलब्ध कराया गया हो.
Cloud KMS की कुंजी की जगह, Cloud Firestore with MongoDB compatibility डेटाबेस की जगह के जैसी होनी चाहिए.
क्षेत्रीय डेटाबेस की लोकेशन के लिए, की रिंग, कुंजी, और डेटाबेस के लिए एक ही लोकेशन का नाम इस्तेमाल करें. ऐसा इसलिए, क्योंकि लोकेशन के नामों की वन-टू-वन मैपिंग होती है.
उदाहरण के लिए, अगर आपको
us-west1
में CMEK से सुरक्षित डेटाबेस बनाना है, तोus-west1
में एक की रिंग और कुंजी बनाएं.एक से ज़्यादा क्षेत्रों में डेटाबेस की लोकेशन के लिए, केएमएस की एक से ज़्यादा क्षेत्रों में मौजूद लोकेशन का नाम इस्तेमाल करें:
Cloud KMS के लिए,
us
मल्टी-रीजन लोकेशन का इस्तेमाल करें. साथ ही, Cloud Firestore with MongoDB compatibility के लिए,nam5
मल्टी-रीजन लोकेशन का इस्तेमाल करें.Cloud KMS के लिए,
europe
मल्टी-रीजन लोकेशन का इस्तेमाल करें. साथ ही, Cloud Firestore with MongoDB compatibility के लिए,eur3
मल्टी-रीजन लोकेशन का इस्तेमाल करें.
आपको जिस Google Cloud प्रोजेक्ट में अपनी कुंजियां मैनेज करनी हैं उसमें यह काम करें:
इनमें से किसी एक विकल्प का इस्तेमाल करके, कोई की-रिंग और की बनाएं:
- क्लाउड केएमएस (KMS) में सीधे तौर पर की-रिंग और कुंजी बनाएं.
- बाहरी तौर पर मैनेज की गई कुंजी का इस्तेमाल करें. बाहरी कुंजी बनाएं. इसके बाद, Cloud EKM कुंजी बनाएं, ताकि कुंजी को Cloud KMS के ज़रिए उपलब्ध कराया जा सके.
कुंजी के लिए IAM सेटिंग कॉन्फ़िगर करना
कंसोल
अपने सर्विस एजेंट को Cloud KMS की भूमिका असाइन करने के लिए, यह तरीका अपनाएं. अगर आपको कम ग्रेन्यूलरिटी चाहिए, तो बटन या की-रिंग के लेवल पर भी अनुमति दी जा सकती है.
Google Cloud Console में, IAM पेज पर जाएं.
जोड़ें पर क्लिक करें.
Cloud Firestore with MongoDB compatibility सेवा एजेंट के लिए, ईमेल के फ़ॉर्मैट में आईडी डालें.
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_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 से सुरक्षित डेटाबेस बनाया जा सकता है. MongoDB के साथ काम करने वाले मौजूदा Cloud Firestore डेटाबेस, Google के डिफ़ॉल्ट एन्क्रिप्शन से सुरक्षित होते हैं. इन्हें CMEK का इस्तेमाल करने के लिए नहीं बदला जा सकता.
CMEK की सुविधा वाले डेटाबेस को बनाते समय ही, एन्क्रिप्शन का टाइप और कुंजी चुनी जा सकती है.
कंसोल
Google Cloud Console में, डेटाबेस पेज पर जाएं.
Firestore डेटाबेस बनाएं पर क्लिक करें.
डेटाबेस आईडी डालें.
Enterprise Edition चुनें.
अपने डेटाबेस के लिए कोई जगह चुनें.
एन्क्रिप्शन के विकल्प दिखाएं पर क्लिक करें. इसके बाद, Cloud KMS कुंजी को चुनें.
उस सीएमईके कुंजी के लिए संसाधन का नाम चुनें या डालें जिसका इस्तेमाल आपको डेटाबेस के लिए करना है.
कुंजियों की सूची में, सिर्फ़ मौजूदा Google Cloud प्रोजेक्ट और आपके चुने गए डेटाबेस की जगह की जानकारी होती है. किसी दूसरे Google Cloud प्रोजेक्ट की कुंजी का इस्तेमाल करने के लिए, प्रोजेक्ट बदलें या कुंजी को मैन्युअल तरीके से डालें पर क्लिक करें.
अगर आपसे Cloud Firestore with MongoDB compatibility सेवा खाते को कुंजी की अनुमति देने के लिए कहा जाए, तो अनुमति दें पर क्लिक करें. सीएमईके डेटाबेस बनाने के लिए, Cloud Firestore with MongoDB compatibility सेवा खाते को
cloudkms.cryptoKeyEncrypterDecrypter
भूमिका दी जानी चाहिए.मोबाइल और वेब क्लाइंट के लिए सुरक्षा नियम चुनें.
डेटाबेस बनाएं पर क्लिक करें.
डेटाबेस बन जाने के बाद, यह पुष्टि की जा सकती है कि डेटाबेस में CMEK की सुविधा चालू है या नहीं. इसके लिए, डेटाबेस की जानकारी देखें:
- अगर आपका डेटाबेस, सीएमईके से सुरक्षित है, तो एन्क्रिप्शन का टाइप फ़ील्ड में ग्राहक की ओर से मैनेज किया गया दिखेगा. साथ ही, एन्क्रिप्शन की फ़ील्ड में, Cloud KMS और इस डेटाबेस को सुरक्षित रखने के लिए इस्तेमाल किए गए कुंजी वर्शन की जानकारी दिखेगी.
- अगर आपका डेटाबेस, सीएमईके से सुरक्षित नहीं है, तो एन्क्रिप्शन टाइप फ़ील्ड में Google-managed दिखेगा.
gcloud
Google Cloud CLI की मदद से, सीएमईके की सुविधा वाला डेटाबेस बनाने से पहले, 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 with MongoDB compatibility डेटाबेस के लिए किया जा सके
CMEK से सुरक्षित किए गए डेटाबेस को ऐक्सेस करना
CMEK से सुरक्षित किए गए डेटाबेस में भेजे गए सभी रीड, राइट, और क्वेरी ऑपरेशन, Google के डिफ़ॉल्ट रूप से एन्क्रिप्ट किए गए डेटाबेस की तरह ही काम करने चाहिए. उदाहरण के लिए, आपको हर अनुरोध के लिए कुंजी देने की ज़रूरत नहीं है.
CMEK से सुरक्षित किए गए डेटाबेस को वापस लाना
सीएमईके से सुरक्षित किए गए डेटाबेस को बैकअप से वापस लाने से पहले:
- तय करें कि आपको डेटाबेस को सीएमईके एन्क्रिप्शन, Google के डिफ़ॉल्ट एन्क्रिप्शन (नॉन-सीएमईके) या बैकअप के तौर पर इस्तेमाल किए गए एन्क्रिप्शन पर वापस लाना है.
कुंजी (प्राइमरी-वर्शन) और उस कुंजी के वर्शन को तैयार करें जिसका इस्तेमाल आपने बैकअप को एन्क्रिप्ट करने के लिए किया था. कुंजी और कुंजी का वर्शन, दोनों चालू करें.
gcloud
सीएमईके से सुरक्षित किए गए डेटाबेस को सीएमईके एन्क्रिप्शन पर वापस लाना
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 एन्क्रिप्शन को पहले जैसा करने के लिए, 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 with MongoDB compatibility डेटाबेस के लिए किया जा सकेFIRESTORE_LOCATION
के साथ, MongoDB के साथ काम करने वाले Cloud Firestore डेटाबेस की जगह की जानकारीBACKUP_ID
अपने बैकअप आईडी सेKMS_PROJECT
उस प्रोजेक्ट के साथ जिसमें आपकी CMEK कुंजी मौजूद हैKMS_LOCATION
में, सीएमईके की और की-रिंग की लोकेशनKMS_KEYRING_ID
को अपनी सीएमईके कुंजी रिंग के आईडी से बदलें
पुष्टि करें कि MongoDB के साथ काम करने वाला आपका वापस लाया गया Cloud Firestore डेटाबेस, सीएमईके से एन्क्रिप्ट (सुरक्षित) किया गया हो:
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 with MongoDB compatibility डेटाबेस के लिए किया जा सकेFIRESTORE_LOCATION
के साथ, MongoDB के साथ काम करने वाले Cloud Firestore डेटाबेस की जगह की जानकारीBACKUP_ID
अपने बैकअप आईडी से
CMEK की मदद से सुरक्षित किए गए डेटाबेस को उसी तरह के एन्क्रिप्शन में वापस लाना जैसा बैकअप में था
बैकअप के लिए इस्तेमाल किए गए एन्क्रिप्शन टाइप को वापस लाने के लिए, encryption-type
फ़्लैग को इस तरह सेट करें:
firebase firestore:databases:restore \
--database DATABASE_ID \
--backup 'projects/FIRESTORE_PROJECT/locations/FIRESTORE_LOCATION/backups/BACKUP_ID' \
--encryption-type USE_SOURCE_ENCRYPTION
इनकी जगह ये डालें:
DATABASE_ID
को अपने डेटाबेस के आईडी के साथFIRESTORE_PROJECT
के साथ लिंक करें, ताकि इसका इस्तेमाल Cloud Firestore with MongoDB compatibility डेटाबेस के लिए किया जा सकेFIRESTORE_LOCATION
के साथ, MongoDB के साथ काम करने वाले Cloud Firestore डेटाबेस की जगह की जानकारीBACKUP_ID
अपने बैकअप आईडी से
CMEK से सुरक्षित किए गए डेटाबेस की कॉपी बनाना
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
CMEK से सुरक्षित किए गए डेटाबेस को डिफ़ॉल्ट एन्क्रिप्शन में क्लोन करना
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
आपको जवाब में 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
: उस कुंजी का पूरा नाम जिसका इस्तेमाल, सीएमईके से सुरक्षित किए गए डेटाबेस को एन्क्रिप्ट (सुरक्षित) करने के लिए किया जाता है.activeKeyVersion
: सीएमईके से सुरक्षित किए गए डेटाबेस में इस्तेमाल किए जा रहे सभी कुंजी वर्शन की सूची. की रोटेशन के दौरान, आपके पास एक से ज़्यादा चालू की वर्शन हो सकते हैं. की रोटेशन के दौरान, कुंजी का पुराना वर्शन और नया वर्शन, दोनों उपलब्ध होने चाहिए. जब तक पुराना वर्शनactiveKeyVersion
फ़ील्ड में न दिखे, तब तक उसे बंद न करें.
REST API
एचटीटीपी अनुरोध:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
अनुरोध के मुख्य भाग में, 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"
]
},
...
}
किसी बटन को बंद करना
डेटाबेस से जुड़ी किसी कुंजी को बंद करने के लिए, यह तरीका अपनाएं:
- किसी डेटाबेस के लिए इस्तेमाल किए जा रहे मुख्य वर्शन देखना
- उन मुख्य वर्शन को बंद करें
- बदलाव लागू होने का इंतज़ार करें और देखें कि डेटा अब ऐक्सेस नहीं किया जा सकता है. आम तौर पर, बदलाव लागू होने में कुछ मिनट लगते हैं. हालांकि, कभी-कभी इसमें तीन घंटे भी लग सकते हैं.
जब डेटाबेस में इस्तेमाल की गई किसी कुंजी को बंद कर दिया जाता है, तो आपको गड़बड़ी के मैसेज में 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."
}
]
}
}
किसी बटन को चालू करना
डेटाबेस से जुड़ी किसी कुंजी को फिर से चालू करने के लिए, यह तरीका अपनाएं:
- किसी डेटाबेस के लिए इस्तेमाल किए जा रहे मुख्य वर्शन देखना
- कुंजी के उन वर्शन को चालू करें
- बदलाव लागू होने का इंतज़ार करें और देखें कि डेटा अब ऐक्सेस नहीं किया जा सकता है. आम तौर पर, बदलाव लागू होने में कुछ मिनट लगते हैं. हालांकि, कभी-कभी इसमें तीन घंटे भी लग सकते हैं.
Cloud KMS की किसी कुंजी के लिए ऑडिट लॉग देखना
Cloud KMS के डेटा ऐक्सेस के ऑडिट लॉग चालू करने से पहले, आपको Cloud Audit Logs के बारे में पता होना चाहिए.
Cloud KMS के डेटा ऐक्सेस के ऑडिट लॉग से पता चलता है कि MongoDB के साथ काम करने वाला Cloud Firestore या आपकी सीएमईके कुंजी का इस्तेमाल करने के लिए कॉन्फ़िगर किए गए अन्य प्रॉडक्ट, Cloud KMS को एन्क्रिप्ट या डिक्रिप्ट करने के लिए कब कॉल करते हैं. MongoDB के साथ काम करने वाला Cloud Firestore, हर डेटा अनुरोध पर एन्क्रिप्ट (सुरक्षित) या डिक्रिप्ट करने का कॉल जारी नहीं करता. इसके बजाय, यह एक पोलर को बनाए रखता है, जो समय-समय पर कुंजी की जांच करता है. पोलिंग के नतीजे, ऑडिट लॉग में दिखते हैं.
Google Cloud Console में जाकर, ऑडिट लॉग सेट अप किए जा सकते हैं और उनसे इंटरैक्ट किया जा सकता है:
पक्का करें कि आपके प्रोजेक्ट में Cloud KMS API के लिए, लॉगिंग की सुविधा चालू हो.
Google Cloud Console में Cloud Logging पर जाएं.
क्वेरी बिल्डर में ये लाइनें जोड़कर, लॉग एंट्री को अपनी 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
में सीएमईके की का नामKMS_KEYRING
केएमएस की उस की-रिंग के साथ जिसमें कुंजी मौजूद है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."
ऑडिट लॉग को समझने के बारे में ज़्यादा जानने के लिए, ऑडिट लॉग को समझना लेख पढ़ें.
सीएमईके की सुविधा वाली संगठन की नीति को कॉन्फ़िगर करना
अपने संगठन में, MongoDB के साथ काम करने वाले Cloud Firestore डेटाबेस के लिए, एन्क्रिप्शन से जुड़ी ज़रूरी शर्तों को तय करने के लिए, CMEK संगठन की नीति से जुड़ी पाबंदी का इस्तेमाल करें.
CMEK की सुरक्षा ज़रूरी है
Cloud Firestore के साथ MongoDB के साथ काम करने वाले डेटाबेस को बनाने के लिए, constraints/gcp.restrictNonCmekServices
को कॉन्फ़िगर करें, ताकि सीएमईके की ज़रूरत पड़े. पाबंदी को 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."
}
]
सीएमईके के लिए कुंजियों के इस्तेमाल को सीमित करना
यह तय करने के लिए कि CMEK सुरक्षा के लिए किन Cloud KMS कुंजियों का इस्तेमाल किया जाए, constraints/gcp.restrictCmekCryptoKeyProjects
कंस्ट्रेंट को कॉन्फ़िगर करें.
सूची से जुड़े प्रतिबंध के तौर पर, स्वीकार की गई वैल्यू, संसाधन के क्रम के हिसाब से इंडिकेटर होती हैं. उदाहरण के लिए, projects/PROJECT_ID
, under:folders/FOLDER_ID
, और under:organizations/ORGANIZATION_ID
. इस प्रतिबंध का इस्तेमाल करने के लिए, संसाधन के क्रम के हिसाब से इंडिकेटर की सूची कॉन्फ़िगर करें और प्रतिबंध को अनुमति दें पर सेट करें.
इस कॉन्फ़िगरेशन से, उन सेवाओं पर पाबंदी लगाई जाती है जिनके साथ सीएमईके कुंजियों का इस्तेमाल किया जा सकता है. इससे यह पक्का किया जा सकता है कि सीएमईके कुंजियों को सिर्फ़ सूची में दिए गए प्रोजेक्ट, फ़ोल्डर, और संगठनों से चुना जा सकता है. कॉन्फ़िगर की गई सेवाओं में सीएमईके से सुरक्षित किए गए संसाधन बनाने के अनुरोध तब तक पूरे नहीं किए जा सकते, जब तक कि अनुमति वाले किसी संसाधन से Cloud Firestore with MongoDB compatibility की कुंजी न मिल जाए.
यहां दिए गए उदाहरण में, सिर्फ़ 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."
}
]
}
]
}
}