इस पेज पर, Cloud Firestore के लिए, ग्राहक मैनेज की गई एन्क्रिप्शन कुंजियों (सीएमईके) से जुड़ी कार्रवाइयां करने का तरीका बताया गया है. सीएमईके के बारे में ज़्यादा जानकारी के लिए, Cloud KMS का दस्तावेज़ देखें. इसमें यह भी बताया गया है कि इसे कब और क्यों चालू करना चाहिए.
CMEK कुंजियां तैयार करना
सीएमईके से सुरक्षित Cloud Firestore डेटाबेस बनाने से पहले, आपको ये चरण पूरे करने होंगे:
- Cloud Firestore सीएमईके सुविधा का ऐक्सेस पाने का अनुरोध करें.
- Cloud Firestore सर्विस एजेंट बनाएं या उसे वापस पाएं.
- CMEK कुंजी बनाना.
- उस कुंजी के लिए IAM सेटिंग कॉन्फ़िगर करें.
सीएमईके से सुरक्षित Cloud Firestore डेटाबेस वाले हर प्रोजेक्ट के लिए, यह तरीका अपनाएं. अगर बाद में कोई नई सीएमईके कुंजी बनाई जाती है, तो आपको उस कुंजी के लिए IAM सेटिंग कॉन्फ़िगर करनी होंगी.
ऐक्सेस मांगें
Cloud Firestore सेवा एजेंट बनाने से पहले, यह फ़ॉर्म भरकर सीएमईके सुविधा का ऐक्सेस पाने का अनुरोध करें.
Cloud Firestore सर्विस एजेंट बनाना
CMEK कुंजी बनाने से पहले, आपके पास Cloud Firestore सेवा एजेंट होना चाहिए. यह Google के मैनेज किए गए सेवा खाते का एक टाइप है. Cloud Firestore इसका इस्तेमाल कुंजी को ऐक्सेस करने के लिए किया जाता है.
services identity create कमांड चलाकर, ऐसा सर्विस एजेंट बनाएं जिसका इस्तेमाल Cloud Firestore, आपकी ओर से सीएमईके कुंजी को ऐक्सेस करने के लिए करता है. अगर सेवा खाता पहले से मौजूद नहीं है, तो यह कमांड उसे बना देती है. इसके बाद, उसे दिखाती है.
gcloud beta services identity create \ --service=firestore.googleapis.com \ --project FIRESTORE_PROJECT
FIRESTORE_PROJECT
की जगह उस प्रोजेक्ट का नाम डालें जिसका इस्तेमाल आपको Cloud Firestore डेटाबेस के लिए करना है.
इस कमांड से सर्विस एजेंट का आईडी दिखता है. यह आईडी, ईमेल पते के फ़ॉर्मैट में होता है. आउटपुट ईमेल स्ट्रिंग रिकॉर्ड करें, क्योंकि आपको इसका इस्तेमाल बाद के चरण में करना होगा.
Service identity created: [email protected]
कुंजी बनाना
क्लाउड केएमएस (KMS) में सीधे तौर पर बनाई गई कुंजी का इस्तेमाल किया जा सकता है. इसके अलावा, बाहरी तौर पर मैनेज की गई ऐसी कुंजी का इस्तेमाल किया जा सकता है जिसे Cloud External Key Manager की मदद से उपलब्ध कराया गया हो.
Cloud KMS की कुंजी की लोकेशन, उस Cloud Firestore डेटाबेस की लोकेशन के जैसी होनी चाहिए जिसके साथ इसका इस्तेमाल किया जाएगा.
क्षेत्रीय डेटाबेस की जगहों के लिए, की-रिंग, कुंजी, और डेटाबेस के लिए एक ही जगह का नाम इस्तेमाल करें. ऐसा इसलिए, क्योंकि जगहों के नामों की वन-टू-वन मैपिंग होती है.
उदाहरण के लिए, अगर आपको
us-west1
में CMEK से सुरक्षित डेटाबेस बनाना है, तोus-west1
में एक की रिंग और कुंजी बनाएं.एक से ज़्यादा क्षेत्रों में मौजूद डेटाबेस की लोकेशन के लिए, केएमएस की एक से ज़्यादा क्षेत्रों में मौजूद लोकेशन का नाम इस्तेमाल करें:
- Cloud Firestore
nam5
मल्टी-रीजन लोकेशन के लिए, Cloud KMSus
मल्टी-रीजन लोकेशन का इस्तेमाल करें. - Cloud Firestore
eur3
मल्टी-रीजन लोकेशन के लिए, Cloud KMSeurope
मल्टी-रीजन लोकेशन का इस्तेमाल करें.
- Cloud Firestore
जिस Google Cloud प्रोजेक्ट में आपको कुंजियां मैनेज करनी हैं उसमें यह तरीका अपनाएं:
इनमें से किसी एक विकल्प का इस्तेमाल करके, कोई की-रिंग और की बनाएं:
- क्लाउड केएमएस (KMS) में सीधे तौर पर की-रिंग और कुंजी बनाएं.
- बाहरी तौर पर मैनेज की गई कुंजी का इस्तेमाल करें. बाहरी कुंजी बनाएं. इसके बाद, Cloud EKM कुंजी बनाएं, ताकि कुंजी को Cloud KMS के ज़रिए उपलब्ध कराया जा सके.
कुंजी के लिए IAM सेटिंग कॉन्फ़िगर करना
कंसोल
अपने सर्विस एजेंट को Cloud KMS की भूमिका असाइन करने के लिए, यह तरीका अपनाएं. अगर आपको कम ग्रेन्यूलरिटी चाहिए, तो बटन या की-रिंग के लेवल पर भी अनुमति दी जा सकती है.
Google Cloud Console में, IAM पेज पर जाएं.
जोड़ें पर क्लिक करें.
अपने 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_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 कुंजियां बनाने और कॉन्फ़िगर करने के बाद, CMEK से सुरक्षित डेटाबेस बनाया जा सकता है. Google के डिफ़ॉल्ट एन्क्रिप्शन से सुरक्षित किए गए मौजूदा Cloud Firestore डेटाबेस को, सीएमईके का इस्तेमाल करने के लिए नहीं बदला जा सकता.
CMEK की सुविधा वाले डेटाबेस को बनाते समय ही, एन्क्रिप्शन का टाइप और कुंजी चुनी जा सकती है.
कंसोल
Google Cloud Console में, डेटाबेस पेज पर जाएं.
डेटाबेस बनाएं पर क्लिक करें.
डेटाबेस मोड चुनें. जारी रखें पर क्लिक करें.
अपने डेटाबेस को कॉन्फ़िगर करें पेज पर, डेटाबेस आईडी डालें.
कोई जगह चुनें.
एन्क्रिप्शन के विकल्प दिखाएं पर क्लिक करें. इसके बाद, Cloud KMS कुंजी को चुनें.
उस सीएमईके की के लिए संसाधन का नाम चुनें या डालें जिसका इस्तेमाल आपको डेटाबेस के लिए करना है.
कुंजियों की सूची, सिर्फ़ मौजूदा Google Cloud प्रोजेक्ट और आपके चुने गए डेटाबेस की जगह के हिसाब से होती है. किसी दूसरे Google Cloud प्रोजेक्ट की कुंजी का इस्तेमाल करने के लिए, प्रोजेक्ट स्विच करें या कुंजी को मैन्युअल तरीके से डालें पर क्लिक करें.
अगर आपको Cloud Firestore सेवा खाते को कुंजी की अनुमति देने के लिए कहा जाता है, तो अनुमति दें पर क्लिक करें. सीएमईके डेटाबेस बनाने के लिए, आपके Cloud Firestore सेवा खाते को
cloudkms.cryptoKeyEncrypterDecrypter
भूमिका दी जानी चाहिए.मोबाइल और वेब क्लाइंट के लिए सुरक्षा नियम चुनें.
डेटाबेस बनाएं पर क्लिक करें.
डेटाबेस बन जाने के बाद, यह पुष्टि की जा सकती है कि डेटाबेस में सीएमईके की सुविधा चालू है या नहीं. इसके लिए, डेटाबेस की जानकारी देखें:
- अगर आपका डेटाबेस, सीएमईके से सुरक्षित है, तो एन्क्रिप्शन का टाइप फ़ील्ड में ग्राहक की ओर से मैनेज किया गया दिखेगा. साथ ही, एन्क्रिप्शन की फ़ील्ड में, Cloud KMS और इस डेटाबेस को सुरक्षित रखने के लिए इस्तेमाल किया गया कुंजी वर्शन दिखेगा.
- अगर आपका डेटाबेस CMEK से सुरक्षित नहीं है, तो सुरक्षा का टाइप फ़ील्ड में Google मैनेज करता है दिखता है.
gcloud
Google Cloud CLI की मदद से, सीएमईके की सुविधा वाला डेटाबेस बनाने से पहले, नया वर्शन इंस्टॉल करें और 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 की कुंजी के पूरे संसाधन आईडी पर सेट किया जाता है. इस डेटाबेस के लिए, उसी जगह की कुंजी का इस्तेमाल किया जा सकता है जहां यह डेटाबेस मौजूद है.
यह वैल्यू, Cloud KMS की कुंजी के संसाधन का आईडी होना चाहिए. इसका फ़ॉर्मैट यह होना चाहिए:
projects/{KMS_PROJECT}/locations/{KMS_LOCATION}/keyRings/{KMS_KEYRING_ID}/cryptoKeys/{KMS_KEY_ID}
अन्य फ़ील्ड के बारे में ज़्यादा जानने के लिए, database create
पेज देखें.
अनुरोध का उदाहरण:
curl -X POST 'https://firestore.googleapis.com/v1/projects/FIRESTORE_PROJECT/databases?databaseId={DATABASE_ID}' \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-type: application/json" \
-d '{
"type":"FIRESTORE_NATIVE",
"locationId":"{FIRESTORE_DATABASE_LOCATION}",
"cmekConfig": {
"kmsKeyName":"projects/KMS_PROJECT/locations/KMS_LOCATION/keyRings/KMS_KEYRING_ID/cryptoKeys/KMS_KEY_ID"
}
}'
Firebase CLI
सीएमईके की सुविधा वाला डेटाबेस बनाने के लिए, केएमएस की का नाम फ़ील्ड का इस्तेमाल करें. अगर आपने --kms-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 से सुरक्षित किए गए डेटाबेस को वापस लाना
सीएमईके से सुरक्षित किए गए डेटाबेस को बैकअप से वापस लाने से पहले:
- तय करें कि आपको डेटाबेस को सीएमईके एन्क्रिप्शन, 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 डेटाबेस के लिए किया जा सके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
डेटाबेस के सीएमईके कॉन्फ़िगरेशन की पुष्टि करने के लिए, 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"
—----------------------------------------- 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 Audit Logs के बारे में पता होना चाहिए.
Cloud KMS के डेटा ऐक्सेस ऑडिट लॉग से पता चलता है कि Cloud Firestore या आपकी सीएमईके कुंजी का इस्तेमाल करने के लिए कॉन्फ़िगर किए गए अन्य प्रॉडक्ट, Cloud 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: "[email protected]" 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: "[email protected]"
ऑडिट लॉग को समझने के बारे में ज़्यादा जानने के लिए, ऑडिट लॉग को समझना लेख पढ़ें.
सीएमईके की सुविधा वाली संगठन की नीति को कॉन्फ़िगर करना
अपने संगठन के Cloud Firestoreडेटाबेस के लिए, एन्क्रिप्शन से जुड़ी नीति के पालन की ज़रूरी शर्तों को तय करने के लिए, CMEK संगठन की नीति से जुड़ी पाबंदी का इस्तेमाल करें.
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
) होती हैं. इस प्रतिबंध का इस्तेमाल करने के लिए, संसाधन के क्रम के हिसाब से तय किए गए इंडिकेटर की सूची कॉन्फ़िगर करें. इसके बाद, प्रतिबंध को अनुमति दें पर सेट करें.
इस कॉन्फ़िगरेशन से, उन सेवाओं पर पाबंदी लगाई जाती है जिनमें सीएमईके कुंजियों का इस्तेमाल किया जा सकता है. इससे यह पक्का किया जा सकता है कि सीएमईके कुंजियों को सिर्फ़ सूची में शामिल प्रोजेक्ट, फ़ोल्डर, और संगठनों से चुना जा सकता है. कॉन्फ़िगर की गई सेवाओं में, CMEK से सुरक्षित किए गए संसाधन बनाने के अनुरोध तब तक पूरे नहीं किए जा सकते, जब तक कि अनुमति वाले किसी संसाधन से Cloud Firestore कुंजी न मिल जाए.
इस उदाहरण में, सिर्फ़ ALLOWED_KEY_PROJECT_ID से मिली कुंजियों को, तय किए गए प्रोजेक्ट में सीएमईके से सुरक्षित किए गए डेटाबेस के लिए इस्तेमाल करने की अनुमति दी गई है:
gcloud resource-manager org-policies allow gcp.restrictCmekCryptoKeyProjects \ under:projects/ALLOWED_KEY_PROJECT_ID \ --project=FIRESTORE_PROJECT
नीति लागू होने के बाद, अगर आपने पाबंदी का उल्लंघन किया, तो आपको FAILED_PRECONDITION
छूट
और गड़बड़ी का मैसेज मिलेगा. अपवाद इस तरह दिखता है:
{ "error": { "code": 400, "message": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information.", "status": "FAILED_PRECONDITION", "details": [ { "@type": "type.googleapis.com/google.rpc.PreconditionFailure", "violations": [ { "type": "constraints/gcp.restrictCmekCryptoKeyProjects", "subject": "orgpolicy:projects/FIRESTORE_PROJECT", "description": "Constraint 'constraints/gcp.restrictCmekCryptoKeyProjects' violated for 'projects/FIRESTORE_PROJECT' attempting to perform the operation 'google.firestore.admin.v1.FirestoreAdmin.CreateDatabase' with violated value 'projects/{NOT_ALLOWED_KEY_PROJECT}'. See https://cloud.google.com/resource-manager/docs/organization-policy/org-policy-constraints for more information." } ] } ] } }