इस पेज पर, Cloud Firestore के लिए, 'ग्राहक-मैनेज की जाने वाली एन्क्रिप्शन पासकोड (CMEK)' से जुड़े टास्क करने का तरीका बताया गया है. सीएमईके के बारे में ज़्यादा जानकारी के लिए, Cloud KMS का दस्तावेज़ देखें. इसमें, इसे कब और क्यों चालू करना है, इस बारे में भी जानकारी मिलती है.
सीएमईके कुंजियां तैयार करना
सीएमईके से सुरक्षित Cloud Firestore डेटाबेस बनाने से पहले, आपको ये चरण पूरे करने होंगे:
- Cloud Firestore CMEK सुविधा के ऐक्सेस का अनुरोध करें.
- Cloud Firestore सेवा एजेंट बनाएं (या वापस पाएं).
- सीएमईके पासकोड बनाएं.
- उस कुंजी के लिए IAM सेटिंग कॉन्फ़िगर करें.
हर उस प्रोजेक्ट के लिए यह तरीका अपनाएं जिसमें सीएमईके से सुरक्षित किए गए Cloud Firestore डेटाबेस शामिल होंगे. अगर बाद में कोई नई सीएमईके पासकोड बनाई जाती है, तो आपको उस पासकोड के लिए IAM सेटिंग कॉन्फ़िगर करनी होंगी.
ऐक्सेस मांगें
Cloud Firestore सेवा एजेंट बनाने से पहले, यह फ़ॉर्म भरकर सीएमईके सुविधा का ऐक्सेस पाने का अनुरोध करें.
Cloud Firestore सेवा एजेंट बनाना
सीएमईके पासकोड बनाने से पहले, आपके पास 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 डेटाबेस की जगह के बराबर होनी चाहिए जिसका इस्तेमाल इसके साथ किया जाएगा.
रीजनल डेटाबेस की जगहों के लिए, की रिंग, पासकोड, और डेटाबेस के लिए एक ही जगह का नाम इस्तेमाल करें. ऐसा इसलिए, क्योंकि जगहों के नामों की एक-एक मैपिंग होती है.
उदाहरण के लिए, अगर आपको
us-west1
में CMEK से सुरक्षित डेटाबेस बनाना है, तोus-west1
में की रिंग और पासकोड बनाएं.एक से ज़्यादा क्षेत्रों में मौजूद डेटाबेस की जगहों के लिए, एक से ज़्यादा क्षेत्रों में मौजूद केएमएस (KMS) की जगह का नाम इस्तेमाल करें:
- Cloud Firestore
nam5
की एक से ज़्यादा जगहों पर मौजूद लोकेशन के लिए, क्लाउड केएमएस (KMS) कीus
की एक से ज़्यादा जगहों पर मौजूद लोकेशन का इस्तेमाल करें. - Cloud Firestore
eur3
की एक से ज़्यादा जगहों पर मौजूद लोकेशन के लिए, क्लाउड केएमएस (KMS) कीeurope
की एक से ज़्यादा जगहों पर मौजूद लोकेशन का इस्तेमाल करें.
- Cloud Firestore
जिस Google Cloud प्रोजेक्ट में आपको अपनी कुंजियां मैनेज करनी हैं उसमें यह तरीका अपनाएं:
इनमें से किसी एक विकल्प का इस्तेमाल करके, की-रिंग और की बनाएं:
- की-रिंग और कुंजी को सीधे क्लाउड केएमएस (KMS) में बनाएं.
- बाहरी तौर पर मैनेज की जाने वाली कुंजी का इस्तेमाल करें. बाहरी कुंजी बनाएं और फिर Cloud EKM कुंजी बनाएं, ताकि कुंजी को Cloud KMS के ज़रिए उपलब्ध कराया जा सके.
कुंजी के लिए IAM सेटिंग कॉन्फ़िगर करना
कंसोल
अपने सर्विस एजेंट को Cloud KMS की भूमिका देने के लिए, ये काम करें. अगर आपको ज़्यादा जानकारी नहीं चाहिए, तो पासकोड या पासकोड की रिंग के लेवल पर भी अनुमति दी जा सकती है.
Google Cloud Console में, IAM पेज पर जाएं.
जोड़ें पर क्लिक करें.
अपने Cloud Firestore सेवा एजेंट के लिए, ईमेल फ़ॉर्मैट में आईडी डालें.
Cloud KMS CryptoKey एन्क्रिप्टर/डिक्रिप्टर की भूमिका चुनें.
सेव करें पर क्लिक करें.
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.iam.gserviceaccount.com
role: roles/cloudkms.cryptoKeyEncrypterDecrypter
सीएमईके की सुविधा वाला डेटाबेस बनाना
CMEK पासकोड बनाने और उन्हें कॉन्फ़िगर करने के बाद, CMEK से सुरक्षित किया गया डेटाबेस बनाया जा सकता है. Google के डिफ़ॉल्ट एन्क्रिप्शन (सुरक्षित करने का तरीका) से सुरक्षित किए गए मौजूदा Cloud Firestore डेटाबेस को, CMEK का इस्तेमाल करने के लिए बदला नहीं जा सकता.
एन्क्रिप्शन का टाइप और कुंजी सिर्फ़ तब चुनी जा सकती है, जब CMEK की सुविधा वाला डेटाबेस बनाया जाता है.
कंसोल
Google Cloud Console में, डेटाबेस पेज पर जाएं.
डेटाबेस बनाएं पर क्लिक करें.
अपना डेटाबेस मोड चुनें. जारी रखें पर क्लिक करें.
अपना डेटाबेस कॉन्फ़िगर करें पेज पर, डेटाबेस आईडी डालें.
कोई जगह चुनें.
एन्क्रिप्शन के विकल्प दिखाएं पर क्लिक करें. इसके बाद, Cloud KMS पासकोड चुनें.
उस सीएमईके पासकोड के लिए संसाधन का नाम चुनें या डालें जिसका इस्तेमाल आपको डेटाबेस के लिए करना है.
कुंजियों की सूची, मौजूदा Google Cloud प्रोजेक्ट और आपके चुने गए डेटाबेस की जगह तक ही सीमित है. किसी दूसरे Google Cloud प्रोजेक्ट की कुंजी का इस्तेमाल करने के लिए, प्रोजेक्ट स्विच करें या कुंजी को मैन्युअल तरीके से डालें पर क्लिक करें.
अगर आपसे Cloud Firestore सेवा खाते को पासकोड की अनुमति देने के लिए कहा जाए, तो अनुमति दें पर क्लिक करें. सीएमईके डेटाबेस बनाने के लिए, आपके Cloud Firestore सेवा खाते को
cloudkms.cryptoKeyEncrypterDecrypter
भूमिका दी जानी चाहिए.मोबाइल और वेब क्लाइंट के लिए सुरक्षा नियम चुनें.
डेटाबेस बनाएं पर क्लिक करें.
डेटाबेस बन जाने के बाद, डेटाबेस की जानकारी देखकर यह पुष्टि की जा सकती है कि डेटाबेस में सीएमईके की सुविधा चालू है या नहीं:
- अगर आपके डेटाबेस को CMEK से सुरक्षित किया गया है, तो एन्क्रिप्शन का टाइप फ़ील्ड ग्राहक मैनेज करता है के तौर पर दिखता है. साथ ही, एन्क्रिप्शन कुंजी फ़ील्ड में, उससे जुड़ा क्लाउड केएमएस और कुंजी का वह वर्शन दिखता है जिसका इस्तेमाल इस डेटाबेस को सुरक्षित करने के लिए किया जाता है.
- अगर आपका डेटाबेस CMEK से सुरक्षित नहीं है, तो एन्क्रिप्शन टाइप फ़ील्ड Google मैनेज करता है के तौर पर दिखता है.
gcloud
Google Cloud CLI की मदद से सीएमईके की सुविधा वाला डेटाबेस बनाने से पहले, नया वर्शन इंस्टॉल करें और gcloud CLI को अनुमति दें. ज़्यादा जानकारी के लिए, gcloud सीएलआई इंस्टॉल करना लेख पढ़ें.
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 API
एचटीटीपी अनुरोध:
POST https://firestore.googleapis.com/v1/projects/{FIRESTORE_PROJECT}/databases
अनुरोध के मुख्य हिस्से में, cmek_config.kms_key_name
फ़ील्ड में सीएमईके को कॉन्फ़िगर करें.
Cloud KMS की 'की' के पूरे संसाधन आईडी पर सेट करें. सिर्फ़ उसी जगह पर मौजूद कुंजी का इस्तेमाल किया जा सकता है जहां यह डेटाबेस मौजूद है.
यह वैल्यू, projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
फ़ॉर्मैट में Cloud KMS की कुंजी का संसाधन आईडी होनी चाहिए
अन्य फ़ील्ड के बारे में ज़्यादा जानकारी के लिए, 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-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
उस लोकेशन के साथ जो आपकी सीएमईके कुंजी और की-रिंग से जुड़ी हैKMS_KEYRING_ID
को अपनी सीएमईके की रिंग के आईडी से बदलेंFIRESTORE_PROJECT
प्रोजेक्ट के साथ, अपने Cloud Firestore डेटाबेस के लिए इस्तेमाल करें
पुष्टि करें कि आपका Cloud Firestore डेटाबेस, Firebase CLI की मदद से सुरक्षित है:
firebase firestore:databases:get DATABASE_ID --project FIRESTORE_PROJECT
जवाब वाले मैसेज में, सीएमईके की यह जानकारी दिखती है:
- केएमएस पासकोड का नाम फ़ील्ड, पासकोड के संसाधन का पूरा नाम दिखाता है. इसका इस्तेमाल आपके Cloud Firestore सीएमईके डेटाबेस को एन्क्रिप्ट करने के लिए किया जाता है.
- चालू पासकोड के वर्शन फ़ील्ड में, उन सभी पासकोड के वर्शन की सूची होती है जिनका इस्तेमाल फ़िलहाल इस सीएमईके डेटाबेस में किया जा रहा है. की रोटेशन के दौरान, आपके पास एक से ज़्यादा चालू कुंजी वर्शन हो सकते हैं.
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
उस लोकेशन के साथ जो आपकी सीएमईके कुंजी और की-रिंग से जुड़ी हैKMS_KEYRING_ID
को अपनी सीएमईके की रिंग के आईडी से बदलें
पुष्टि करें कि आपका वापस लाया गया 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 डेटाबेस के लिए इस्तेमाल करें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
डेटाबेस के CMEK कॉन्फ़िगरेशन की पुष्टि करने के लिए, 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
: CMEK की मदद से सुरक्षित किए गए डेटाबेस में, फ़िलहाल इस्तेमाल किए जा रहे सभी कुंजी वर्शन की सूची. की रोटेशन के दौरान, आपके पास एक से ज़्यादा चालू कुंजी वर्शन हो सकते हैं. पासकोड बदलने के दौरान, पासकोड का पुराना और नया वर्शन, दोनों उपलब्ध होने चाहिए. पासकोड के पुराने वर्शन को तब तक बंद न करें, जब तक वहactiveKeyVersion
फ़ील्ड में न दिखे.
REST API
एचटीटीपी अनुरोध:
GET https://firestore.googleapis.com/v1/{name=projects/FIRESTORE_PROJECT/databases/DATABASE_ID}
अनुरोध के मुख्य हिस्से में, cmek_config.kms_key_name
फ़ील्ड में सीएमईके को कॉन्फ़िगर करें.
Cloud KMS की 'की' के पूरे संसाधन आईडी पर सेट करें. सिर्फ़ उसी जगह पर मौजूद कुंजी का इस्तेमाल किया जा सकता है जहां यह डेटाबेस मौजूद है.
यह वैल्यू, projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
फ़ॉर्मैट में Cloud KMS की कुंजी का संसाधन आईडी होनी चाहिए
अन्य फ़ील्ड के बारे में ज़्यादा जानकारी के लिए, 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"
]
},
……
}
किसी बटन को बंद करना
किसी डेटाबेस से जुड़ी कुंजी को बंद करने के लिए, यह तरीका अपनाएं:
- किसी डेटाबेस के लिए इस्तेमाल किए जा रहे मुख्य वर्शन देखना.
- इस्तेमाल में मौजूद पासकोड के इन वर्शन को बंद करें.
- बदलाव लागू होने का इंतज़ार करें और देखें कि डेटा अब ऐक्सेस किया जा सकता है या नहीं. आम तौर पर, बदलाव लागू होने में कुछ मिनट लगते हैं. हालांकि, इसमें तीन घंटे भी लग सकते हैं.
जब किसी डेटाबेस में इस्तेमाल की गई कोई कुंजी बंद हो जाती है, तो आपको गड़बड़ी के मैसेज में ज़्यादा जानकारी के साथ 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)" } ] } }
कोई बटन चालू करना
किसी डेटाबेस से जुड़ी कुंजी को फिर से चालू करने के लिए, यह तरीका अपनाएं:
- डेटाबेस के लिए इस्तेमाल किए जा रहे मुख्य वर्शन देखना
- इस्तेमाल में चल रही कुंजियों के इन वर्शन को चालू करना
- बदलाव लागू होने का इंतज़ार करें और देखें कि डेटा अब ऐक्सेस किया जा सकता है या नहीं. आम तौर पर, बदलाव लागू होने में कुछ मिनट लगते हैं. हालांकि, इसमें तीन घंटे भी लग सकते हैं.
Cloud KMS की किसी पासकोड के लिए ऑडिट लॉग देखना
Cloud KMS के डेटा ऐक्सेस ऑडिट लॉग चालू करने से पहले, आपको Cloud के ऑडिट लॉग के बारे में पता होना चाहिए.
क्लाउड केएमएस (KMS) के डेटा ऐक्सेस के ऑडिट लॉग से पता चलता है कि Cloud Firestore या आपकी सीएमईके कुंजी का इस्तेमाल करने के लिए कॉन्फ़िगर किए गए किसी अन्य प्रॉडक्ट ने, क्लाउड केएमएस (KMS) को एन्क्रिप्ट (सुरक्षित)/डिक्रिप्ट (अनचाहे कोड को मूल कोड में बदलना) करने के लिए कब कॉल किया. 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.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"
ऑडिट लॉग को समझने के बारे में जानकारी के लिए, ऑडिट लॉग को समझना लेख पढ़ें.
सीएमईके संगठन की नीति कॉन्फ़िगर करना
अपने संगठन के Cloud Firestore डेटाबेस के लिए, एन्क्रिप्शन से जुड़ी शर्तों के बारे में बताने के लिए, सीएमईके के लिए संगठन की नीति से जुड़ी पाबंदी का इस्तेमाल करें.
CMEK सुरक्षा की ज़रूरत है
constraints/gcp.restrictNonCmekServices
को कॉन्फ़िगर करें, ताकि 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." } ]
सीएमईके के लिए कुंजियों के इस्तेमाल को सीमित करना
CMEK सुरक्षा के लिए, किन Cloud KMS कुंजियों का इस्तेमाल किया जाए, यह तय करने के लिए,
constraints/gcp.restrictCmekCryptoKeyProjects
शर्त को कॉन्फ़िगर करें.
सूची की पाबंदी के तौर पर, रिसॉर्स हैरारकी इंडिकेटर (उदाहरण के लिए, projects/PROJECT_ID
, under:folders/FOLDER_ID
, और under:organizations/ORGANIZATION_ID
) वैल्यू स्वीकार की जाती हैं. रिसॉर्स हैरारकी इंडिकेटर की सूची कॉन्फ़िगर करके और पाबंदी को अनुमति दें पर सेट करके, इस पाबंदी का इस्तेमाल करें.
इस कॉन्फ़िगरेशन से, काम करने वाली सेवाओं पर पाबंदी लगती है, ताकि सीएमईके पासकोड सिर्फ़ सूची में शामिल प्रोजेक्ट, फ़ोल्डर, और संगठनों से चुने जा सकें. कॉन्फ़िगर की गई सेवाओं में, सीएमईके से सुरक्षित संसाधन बनाने के अनुरोध, अनुमति वाले किसी संसाधन से मिली Cloud Firestore कुंजी के बिना पूरे नहीं होते.
यहां दिए गए उदाहरण में, दिए गए प्रोजेक्ट में CMEK से सुरक्षित डेटाबेस के लिए, सिर्फ़ 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." } ] } ] } }