Cloud KMS का इस्तेमाल शुरू करना

Cloud KMS, क्लाउड पर होस्ट की गई कुंजी प्रबंधन सेवा है. इसकी मदद से, अपनी क्लाउड सेवाओं के लिए क्रिप्टोग्राफ़िक कुंजियों को उसी तरह मैनेज किया जा सकता है जिस तरह ऑन-प्रिमाइसेस पर किया जाता है. इसमें एन्क्रिप्शन, डिक्रिप्शन, हस्ताक्षर करने, और पुष्टि करने की सुविधा शामिल है. इसके लिए, अलग-अलग तरह की कुंजियों और सोर्स का इस्तेमाल किया जाता है. जैसे, हार्डवेयर से जुड़ी कुंजियों के लिए Cloud HSM.

इस ट्यूटोरियल में, आपको Cloud Security और Privacy API की बेहतर सुविधाओं को इस्तेमाल करने का तरीका बताया जाएगा. इनमें ये सुविधाएं शामिल हैं:

  • सुरक्षित Cloud Storage बकेट सेट अप करना
  • Cloud KMS का इस्तेमाल करके कुंजियों और एन्क्रिप्ट किए गए डेटा को मैनेज करना
  • Cloud Storage के ऑडिट लॉग देखना

आपको Enron Corpus से छोटा किया गया डेटा लेना है, उसे एन्क्रिप्ट (सुरक्षित) करना है, और Cloud Storage में लोड करना है.

आपको यह जानकारी मिलेगी

  • की मैनेजमेंट सेवा (केएमएस) का इस्तेमाल करके, डेटा को एन्क्रिप्ट (सुरक्षित) करने और एन्क्रिप्शन कुंजियों को मैनेज करने का तरीका

आपको

  • क्लाउड केएमएस (KMS)
  • Cloud Storage
  • Cloud SDK

अपने हिसाब से एनवायरमेंट सेट अप करना

अगर आपके पास पहले से कोई Google खाता (Gmail या Google Apps) नहीं है, तो आपको एक खाता बनाना होगा. Google Cloud Platform Console (console.cloud.google.com) में साइन इन करें और एक नया प्रोजेक्ट बनाएं:

2016-02-10 12:45:26.png का स्क्रीनशॉट

प्रोजेक्ट आईडी याद रखें. यह सभी Google Cloud प्रोजेक्ट के लिए एक यूनीक नाम होता है. ऊपर दिया गया नाम पहले ही इस्तेमाल किया जा चुका है. इसलिए, यह आपके लिए काम नहीं करेगा. माफ़ करें! इस कोड लैब में इसे बाद में PROJECT_ID के तौर पर दिखाया जाएगा.

इसके बाद, Google Cloud संसाधनों का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग चालू करनी होगी.

इस कोडलैब को पूरा करने में आपको कुछ डॉलर से ज़्यादा खर्च नहीं करने पड़ेंगे. हालांकि, अगर आपको ज़्यादा संसाधनों का इस्तेमाल करना है या उन्हें चालू रखना है, तो यह खर्च बढ़ सकता है. इस दस्तावेज़ के आखिर में "सफ़ाई" सेक्शन देखें.

Google Cloud Platform के नए उपयोगकर्ता, 300 डॉलर के क्रेडिट के साथ मुफ़्त में आज़माने की सुविधा पा सकते हैं.

Cloud Shell शुरू करें

इस कोडलैब में, आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud पर चलने वाला एक मुफ़्त वर्चुअलाइज़्ड एनवायरमेंट है. GCP Console में, सबसे ऊपर दाईं ओर मौजूद टूलबार पर मौजूद Cloud Shell आइकॉन पर क्लिक करें:

इसे चालू करने और एनवायरमेंट से कनेक्ट करने में सिर्फ़ कुछ सेकंड लगेंगे. यह प्रोसेस पूरी होने के बाद, आपको कुछ ऐसा दिखेगा:

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है. साथ ही, Google Cloud पर काम करता है. इससे नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस बेहतर होती है. जब तक कोई और निर्देश न दिया जाए, तब तक इस शेल से सभी कमांड चलाएं.

इस ट्यूटोरियल के लिए डेटा सेव करने के लिए, Cloud Storage बकेट बनाएं. Cloud Storage बकेट के नाम दुनिया भर में यूनीक होने चाहिए. इसलिए, बकेट के नाम से पहले अपना प्रोजेक्ट आईडी जोड़ें:

$ export BUCKET_NAME=${GOOGLE_CLOUD_PROJECT}_enron_emails

इसके बाद, बकेट बनाएं:

$ gsutil mb gs://${BUCKET_NAME}

Enron Corpus, Enron Corporation के 158 कर्मचारियों के जनरेट किए गए 6,00,000 से ज़्यादा ईमेल का एक बड़ा डेटाबेस है. इस डेटा को gs://enron_emails/ नाम की Cloud Storage बकेट में कॉपी कर दिया गया है.

ईमेल की किसी फ़ाइल को अपने डिवाइस में डाउनलोड करें:

$ gsutil cp gs://enron_emails/allen-p/inbox/1. . # <-- don't forget the dot!

डाउनलोड की गई फ़ाइल की जांच करें, ताकि यह पुष्टि की जा सके कि यह वाकई एक ईमेल है:

$ tail 1.

ईमेल में इस तरह का मैसेज होगा:

Attached is the Delta position for 1/18...
# ...

बकेट में ईमेल के साथ-साथ इमेज भी शामिल हैं. इस ट्यूटोरियल में, सादे टेक्स्ट वाले ईमेल और इमेज, दोनों का इस्तेमाल किया गया है.

Cloud KMS का इस्तेमाल करने से पहले, आपको अपने प्रोजेक्ट में यह सेवा चालू करनी होगी. हर प्रोजेक्ट के लिए, ऐसा सिर्फ़ एक बार करना होगा. Cloud KMS सेवा चालू करने के लिए, यह कमांड चलाएं:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

इसे चालू होने में एक मिनट लग सकता है. यह कमांड पूरी होने पर, आपको इसकी सूचना दी जाएगी.

क्लाउड केएमएस (KMS) की की-रिंग बनाएं. क्लाउड केएमएस (KMS) में, की-रिंग क्रिप्टोग्राफ़िक कुंजियों का लॉजिकल कलेक्शन होता है. की-रिंग में कुंजियों के बारे में मेटाडेटा होता है. जैसे, उनकी जगह की जानकारी. global क्षेत्र में my-keyring नाम की की-रिंग बनाएं:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

अब, अभी-अभी बनाई गई की-रिंग में encryption के मकसद से enron-emails नाम की क्रिप्टो कुंजी बनाएं.

$ gcloud kms keys create "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "encryption"

क्रिप्टोग्राफ़िक कुंजियों का वेब यूज़र इंटरफ़ेस खोलें और नए बनाए गए संसाधन देखें. यह मुख्य मेन्यू में, IAM और एडमिन में जाकर देखा जा सकता है.

Cloud Console में जाकर, Key Rings और Crypto Keys को देखा और मैनेज किया जा सकता है.

Cloud KMS का इस्तेमाल करके, उस ईमेल के कॉन्टेंट को एन्क्रिप्ट (सुरक्षित) करें जिसे हमने पहले डाउनलोड किया था. इस ट्यूटोरियल में, gcloud कमांड लाइन टूल का इस्तेमाल किया गया है. हालांकि, Cloud KMS API का इस्तेमाल करके भी डेटा को एन्क्रिप्ट (सुरक्षित) किया जा सकता है.

$ gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file ./1. \
    --ciphertext-file ./1.enc

इससे डिस्क 1.enc पर एक नई फ़ाइल बनेगी. इसमें एन्क्रिप्ट (सुरक्षित) की गई फ़ाइल का कॉन्टेंट होगा. अब डेटा को Cloud KMS से एन्क्रिप्ट (सुरक्षित) कर दिया गया है. इसलिए, एन्क्रिप्ट की गई फ़ाइल को Cloud Storage बकेट में अपलोड करें.

$ gsutil cp ./1.enc gs://${BUCKET_NAME}

Cloud KMS को Google Cloud Identity and Access Management (IAM) के साथ इंटिग्रेट किया गया है. Cloud KMS की IAM भूमिकाओं को मुख्य रूप से दो कैटगरी में बांटा गया है:

  • कुंजियों को मैनेज करने की अनुमति
  • कुंजियों का इस्तेमाल करने की अनुमति

उदाहरण के लिए, roles/cloudkms.admin भूमिका रखने वाला व्यक्ति, की-रिंग और क्रिप्टो कुंजियां बना सकता है. साथ ही, आईएएम नीतियां सेट कर सकता है और मैनेजमेंट से जुड़ी कार्रवाइयां कर सकता है. roles/cloudkms.cryptoKeyEncrypterDecrypter से, डेटा को एन्क्रिप्ट (सुरक्षित) और डिक्रिप्ट (सुरक्षित नहीं) करने की अनुमति मिलती है. हालांकि, इसमें मैनेज करने की अनुमतियां शामिल नहीं होती हैं.

आईएम रोल, अपने पैरंट रिसॉर्स से इनहेरिट किए जाते हैं. अगर किसी व्यक्ति के पास Google Cloud प्रोजेक्ट में roles/cloudkms.admin की भूमिका है, तो वह उस प्रोजेक्ट में मौजूद सभी पासकोड का एडमिन होता है. अगर उनके पास Key Ring पर roles/cloudkms.admin का निशान है, तो वे उस Key Ring में मौजूद सभी कुंजियों के एडमिन हैं. अगर उनके पास किसी एक क्रिप्टो कुंजी पर roles/cloudkms.admin का ऐक्सेस है, तो वे सिर्फ़ उस कुंजी के एडमिन हैं.

इस एक्सरसाइज़ के लिए, अपनी पहचान की पुष्टि करें:

$ export MY_IDENTITY=you@gmail.com # or you@example.com

gcloud कमांड लाइन टूल का इस्तेमाल करके, ऊपर बनाई गई की-रिंग में Cloud KMS संसाधनों को मैनेज करने की सुविधा, आइडेंटिटी को असाइन करें:

$ gcloud kms keyrings add-iam-policy-binding "my-keyring" \
    --location "global" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.admin"

roles/cloudkms.admin भूमिका में, कुंजियों को इस्तेमाल करने की अनुमति शामिल नहीं होती. इसमें सिर्फ़ कुंजियों को मैनेज करने की अनुमति होती है. enron-emails क्रिप्टो कुंजी का इस्तेमाल करके, अपनी पहचान को डेटा एन्क्रिप्ट (सुरक्षित) और डिक्रिप्ट करने की अनुमति देने के लिए:

$ gcloud kms keys add-iam-policy-binding "enron-emails" \
    --location "global" \
    --keyring "my-keyring" \
    --member "user:${MY_IDENTITY}" \
    --role "roles/cloudkms.cryptoKeyEncrypterDecrypter"

ध्यान दें कि पहली कमांड, Key Ring पर roles/cloudkms.admin की भूमिका असाइन करती है. इसमें सभी चाइल्ड क्रिप्टो कुंजी संसाधन शामिल होंगे. दूसरे निर्देश से roles/cloudkms.cryptoKeyEncrypterDecrypter को अनुमति मिलती है. हालांकि, यह अनुमति सिर्फ़ enron-emails क्रिप्टो कुंजी के लिए होती है.

Cloud Console में Cloud KMS के यूज़र इंटरफ़ेस (यूआई) में भी भूमिकाएं देखी और असाइन की जा सकती हैं.

किसी एक फ़ाइल को एन्क्रिप्ट (सुरक्षित) करने के साथ-साथ, कुछ स्क्रिप्टिंग की मदद से फ़ाइलों के कलेक्शन को भी एन्क्रिप्ट (सुरक्षित) किया जा सकता है. इस उदाहरण में, allen-p के सभी ईमेल स्ट्रीम किए जाते हैं, उन्हें एन्क्रिप्ट (सुरक्षित) किया जाता है, और एन्क्रिप्ट की गई वैल्यू को Cloud Storage बकेट में अपलोड किया जाता है:

DIR="gs://enron_emails/allen-p"
for file in $(gsutil ls ${DIR}/**); do
  ENC_NAME="$(basename ${file}).enc"
  gsutil cat ${file} \
  | \

  gcloud kms encrypt \
    --location "global" \
    --keyring "my-keyring" \
    --key "enron-emails" \
    --plaintext-file - \
    --ciphertext-file - \
    | \

    gsutil -q cp - gs://${BUCKET_NAME}/${ENC_NAME}
    echo "Copied ${ENC_NAME}"
done

यह स्क्रिप्ट, Cloud Storage के सैंपल बकेट में मौजूद डायरेक्ट्री की सभी फ़ाइलों को दोहराती है. साथ ही, Cloud KMS का इस्तेमाल करके उन्हें एन्क्रिप्ट (सुरक्षित) करती है और आपके Google Cloud Storage पर अपलोड करती है.

स्क्रिप्ट पूरी होने के बाद, Cloud Storage के यूज़र इंटरफ़ेस (यूआई) में जाकर, एन्क्रिप्ट की गई फ़ाइलें देखी जा सकती हैं. आपको कुछ ऐसा दिखेगा:

Cloud Audit Logging में दो लॉग स्ट्रीम होती हैं – एडमिन की गतिविधि वाले लॉग और डेटा ऐक्सेस लॉग. इन्हें Google Cloud की सेवाएं जनरेट करती हैं. इनसे आपको अपने Google Cloud Platform प्रोजेक्ट में, "किसने क्या किया, कहां किया, और कब किया?" जैसे सवालों के जवाब मिलते हैं.

KMS में किसी भी संसाधन के लिए गतिविधि देखने के लिए, की रिंग पर क्लिक करें और गतिविधि देखें को चुनें. इससे आपको Cloud Activity के यूज़र इंटरफ़ेस (यूआई) पर ले जाया जाएगा. यहां आपको KeyRing बनाने और उसमें किए गए सभी बदलाव दिखेंगे.

आपने Cloud KMS का इस्तेमाल करके डेटा को एन्क्रिप्ट (सुरक्षित) कर लिया है और एन्क्रिप्ट किए गए डेटा को Cloud Storage में सेव कर लिया है.

सफ़ाई

इस ट्यूटोरियल के दौरान बनाए गए संसाधनों को रिलीज़ करें. पहले से बनाए गए Cloud Storage बकेट को मिटाएं:

$ gsutil rm -r gs://${BUCKET_NAME}

Cloud KMS संसाधनों को मिटाया नहीं जा सकता. हालांकि, कुंजी के मटीरियल को नष्ट किया जा सकता है, ताकि उसका फिर से इस्तेमाल न किया जा सके:

$ gcloud kms keys versions destroy "1" \
    --location "global" \
    --key "enron-emails" \
    --keyring "my-keyring"

हमने इन विषयों पर बात की

  • Cloud KMS की अनुमतियों को मैनेज करने के लिए Cloud IAM का इस्तेमाल करना
  • डेटा को एन्क्रिप्ट (सुरक्षित) करने के लिए, Cloud KMS का इस्तेमाल करना
  • एन्क्रिप्ट किए गए डेटा को सेव करने के लिए Cloud Storage का इस्तेमाल करना
  • कुंजी और कुंजी रिंग से जुड़ी सभी गतिविधियों को देखने के लिए, Cloud Audit Logging का इस्तेमाल करना

अगले चरण

  • BigQuery जैसे डेटाबेस में किसी कॉलम को एन्क्रिप्ट (सुरक्षित) करने के लिए Cloud KMS का इस्तेमाल करना
  • Cloud KMS की कुंजियों के लिए, अपने-आप रोटेशन होने का शेड्यूल सेट करना

ज़्यादा जानें

लाइसेंस

इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.