1. खास जानकारी
यह कोडलैब, Confidential Space कोडलैब पर आधारित है. हस्ताक्षर की गई कंटेनर इमेज के लिए सहायता उपलब्ध है. इसमें Workload Identity Pool (WIP) की नीति में इमेज डाइजेस्ट तय करने के बजाय, पुष्टि की गई सार्वजनिक कुंजी का इस्तेमाल करके कंटेनर की पुष्टि करने का विकल्प दिया गया है.
गोपनीय स्पेस में, हस्ताक्षर की गई कंटेनर इमेज के लिए सहायता से जुड़े बदलाव:
इस्तेमाल करने में आसानी: साइन की गई कंटेनर इमेज की सुविधा शुरू होने के बाद, अब हम इमेज को अनुमति देने वाले सहयोगियों/ऑडिटर के लिए, वर्कलोड इमेज डाइजेस्ट के तरीके से कंटेनर सिग्नेचर के तरीके पर स्विच कर सकते हैं.
- इमेज डाइजेस्ट का सीधे तौर पर इस्तेमाल करते समय, संसाधन के मालिकों को अपनी नीतियों में इमेज डाइजेस्ट को अपडेट करना होगा. ऐसा तब करना होगा, जब वे किसी नई इमेज को अनुमति दें. इमेज के हस्ताक्षर का इस्तेमाल करने पर, नीति में सार्वजनिक कुंजी का फ़िंगरप्रिंट शामिल होता है. इसकी निजी कुंजी, सहयोगी/ऑडिटर के पास होती है. इसका इस्तेमाल, ऑडिट की गई इमेज पर हस्ताक्षर करने के लिए किया जाता है.
- कुछ सुरक्षा मॉडल के लिए, नई इमेज डाइजेस्ट वैल्यू की सूची को अपडेट करने के बजाय, भरोसेमंद इमेज साइनिंग पासकोड का रेफ़रंस देना ज़्यादा आसान होता है.
सुरक्षा से जुड़ी कोई समस्या नहीं: कंटेनर के सिग्नेचर की इस सुविधा से, सुरक्षा से जुड़ी कोई समस्या नहीं होगी. ऐसा इसलिए, क्योंकि भरोसे की सीमाएं पहले जैसी ही रहेंगी. कंटेनर के हस्ताक्षर की पुष्टि करने के तरीके में, संसाधन का मालिक पुष्टि करने वाली कुंजी को अनुमति देता है. इसके लिए, वह WIP नीति में भरोसेमंद सार्वजनिक पासकोड का फ़िंगरप्रिंट तय करता है. अनुमति की जांच, Attestation Verifier Service और WIP करते हैं. Attestation Verifier Service यह पुष्टि करती है कि हस्ताक्षर, चालू वर्कलोड से जुड़ा है. साथ ही, WIP नीति यह जांच करती है कि सेवा की ओर से इस्तेमाल किया गया सार्वजनिक पासकोड, नीति के तहत अनुमति पा चुका है.
बेहतर सुरक्षा: कंटेनर इमेज के हस्ताक्षर का इस्तेमाल करने से, इमेज पर हस्ताक्षर करने वाले व्यक्ति को कुछ हद तक भरोसा दिया जा सकता है. अटेस्टेशन की नीति में, भरोसेमंद हस्ताक्षर करने वाले व्यक्ति के सार्वजनिक कुंजी फ़िंगरप्रिंट की जानकारी देकर, संसाधन का मालिक उस व्यक्ति को यह अनुमति देता है कि वह उन कंटेनर इमेज पर पुष्टि कर सके जो नीति का पालन करती हैं. Attestation Verifier Service यह पुष्टि करती है कि हस्ताक्षर, चालू वर्कलोड से जुड़ा है. साथ ही, नीति यह जांच करती है कि हस्ताक्षर बनाने वाली सार्वजनिक कुंजी को नीति के तहत अनुमति मिली है. इसकी मदद से, इमेज पर हस्ताक्षर करने की सुविधा से जुड़ी इंडायरेक्शन की अतिरिक्त लेयर, Confidential Space की सुरक्षा से जुड़ी गारंटी को बनाए रखती है.
इन दोनों तरीकों में सिर्फ़ यह अंतर है कि दूसरे तरीके में इंडायरेक्शन की एक अतिरिक्त लेयर का इस्तेमाल किया जाता है. इसमें वर्कलोड इमेज को साइनिंग कुंजी की मदद से अनुमति दी जाती है. इससे सुरक्षा से जुड़ी कोई नई समस्या नहीं आती, क्योंकि भरोसे की सीमाएं पहले जैसी ही रहती हैं.
आपको क्या सीखने को मिलेगा
इस कोडलैब में, आपको सुरक्षित संसाधनों का ऐक्सेस देने के लिए, कंटेनर इमेज के हस्ताक्षर का इस्तेमाल करने का तरीका बताया जाएगा:
cosignका इस्तेमाल करके, ऑडिट की गई कंटेनर इमेज पर हस्ताक्षर करने का तरीका- हस्ताक्षर की पहचान करने और उन्हें सेव करने के लिए, कंटेनर इमेज के हस्ताक्षर OCI रजिस्ट्री में कैसे अपलोड करें
- कॉन्फ़िडेंशियल स्पेस को चलाने के लिए, ज़रूरी क्लाउड संसाधनों को कॉन्फ़िगर करने का तरीका
- हस्ताक्षर की गई कंटेनर इमेज की सुविधा के साथ, गोपनीय स्पेस में वर्कलोड चलाने का तरीका
इस कोडलैब में बताया गया है कि Google Compute Engine पर चल रही, भरोसेमंद कुंजी से साइन की गई कंटेनर इमेज की पुष्टि दूर से करने के लिए, Confidential Space का इस्तेमाल कैसे किया जाता है.
आपको इन चीज़ों की ज़रूरत होगी
- Confidential Space कोडलैब पूरा करें
- Google Cloud Platform प्रोजेक्ट
- Chrome या Firefox जैसे ब्राउज़र
- Vim, Emacs या Nano जैसे स्टैंडर्ड Linux टेक्स्ट एडिटर के बारे में जानकारी होना
- Sigstore cosign के बारे में बुनियादी जानकारी
- Google Compute Engine ( codelab), Confidential VM, कंटेनर, और रिमोट रिपॉज़िटरी के बारे में बुनियादी जानकारी
- Cloud KMS की बुनियादी जानकारी ( कोडलैब)
- सेवा खातों, वर्कलोड आइडेंटिटी फ़ेडरेशन, और एट्रिब्यूट की शर्तों के बारे में बुनियादी जानकारी.
- Artifact Registry के बारे में बुनियादी जानकारी
- डिजिटल हस्ताक्षर के बारे में बुनियादी जानकारी
हस्ताक्षर की गई कंटेनर इमेज वाले गोपनीय स्पेस में शामिल भूमिकाएं
इस कोडलैब में, Primus Bank ऑडिटर और संसाधन का मालिक होगा. इसकी ज़िम्मेदारी ये काम करना होगा:
- सैंपल डेटा के साथ ज़रूरी संसाधन सेट अप किए जा रहे हैं.
- वर्कलोड कोड की ऑडिट की जा रही है.
- वर्कलोड इमेज पर हस्ताक्षर करने के लिए,
cosignका इस्तेमाल किया जा रहा है. - हस्ताक्षर को किसी रिपॉज़िटरी में अपलोड करना.
- ग्राहक के डेटा को सुरक्षित रखने के लिए, WIP नीति को कॉन्फ़िगर करना.
Secundus Bank, वर्कलोड का लेखक और ऑपरेटर होगा. साथ ही, इन कामों के लिए ज़िम्मेदार होगा:
- नतीजे को सेव करने के लिए ज़रूरी संसाधन सेट अप करना.
- वर्कलोड का कोड लिखा जा रहा है.
- वर्कलोड इमेज पब्लिश करना.
- हस्ताक्षर की गई कंटेनर इमेज की सुविधा के साथ, कॉन्फ़िडेंशियल स्पेस में वर्कलोड चलाना.
Secundus Bank, एक ऐसा वर्कलोड डेवलप और पब्लिश करेगा जो क्लाउड स्टोरेज बकेट में सेव किए गए ग्राहक के डेटा को क्वेरी करेगा. इस डेटा का मालिकाना हक Primus Bank के पास होगा. Primus Bank, वर्कलोड का ऑडिट करेगा, कंटेनर इमेज पर हस्ताक्षर करेगा, और WIP की नीतियां कॉन्फ़िगर करेगा. इससे, मंज़ूरी पा चुके वर्कलोड को अपने डेटा का ऐक्सेस देने की अनुमति मिलेगी. इस वर्कलोड के एक्ज़ीक्यूशन का नतीजा, Secundus बैंक के मालिकाना हक वाली क्लाउड स्टोरेज बकेट में सेव किया जाएगा.
गोपनीय स्पेस को सेटअप करने में शामिल संसाधन
इस कोडलैब में कई वैरिएबल के बारे में बताया गया है. आपको अपने GCP प्रोजेक्ट के लिए, इन वैरिएबल की वैल्यू सेट करनी चाहिए. इस कोडलैब में दिए गए निर्देशों में यह माना गया है कि इन वैरिएबल को सेट कर दिया गया है. (उदाहरण के लिए, export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket' का इस्तेमाल Primus बैंक के इनपुट स्टोरेज बकेट का नाम सेट करने के लिए किया जा सकता है.) अगर संसाधन के नामों के वैरिएबल सेट नहीं किए गए हैं, तो यह GCP प्रोजेक्ट-आईडी के आधार पर जनरेट होगा.
Primus प्रोजेक्ट में ये कॉन्फ़िगर करें:
$PRIMUS_INPUT_STORAGE_BUCKET: वह बकेट जिसमें ग्राहक के डेटा की फ़ाइल सेव की जाती है.$PRIMUS_WORKLOAD_IDENTITY_POOL: यह Workload Identity Pool (WIP) है, जो दावों की पुष्टि करता है.$PRIMUS_WIP_PROVIDER: यह Workload Identity Pool Provider है. इसमें Attestation Verifier Service से साइन किए गए टोकन इस्तेमाल करने के लिए, ऑथराइज़ेशन की शर्त शामिल होती है.$PRIMUS_SERVICEACCOUNT: यह वह सेवा खाता है जिसका इस्तेमाल$PRIMUS_WORKLOAD_IDENTITY_POOL, सुरक्षित किए गए संसाधनों को ऐक्सेस करने के लिए करता है. इस चरण में, इसके पास$PRIMUS_INPUT_STORAGE_BUCKETबकेट में सेव किया गया ग्राहक डेटा देखने की अनुमति होती है.$PRIMUS_ENC_KEY:$PRIMUS_INPUT_STORAGE_BUCKETमें सेव किए गए डेटा को एन्क्रिप्ट (सुरक्षित) करने के लिए इस्तेमाल की गई केएमएस कुंजी.
इस कोडलैब में नए रिसॉर्स:
$PRIMUS_COSIGN_REPOSITORY: Artifact Registry, ताकि वर्कलोड इमेज के हस्ताक्षर सेव किए जा सकें.$PRIMUS_SIGNING_KEY: यह वह KMS कुंजी है जिसका इस्तेमाल ऑडिटर/डेटा-सहयोगियों ने वर्कलोड इमेज पर हस्ताक्षर करने के लिए किया था.उदाहरण के लिए, इस मामले में Primus Bank.
सेकंडस प्रोजेक्ट में ये कॉन्फ़िगर करें:
$SECUNDUS_ARTIFACT_REGISTRY: वह Artifact Registry जहां वर्कलोड की Docker इमेज को पुश किया जाएगा.$WORKLOAD_IMAGE_NAME: वर्कलोड डॉकर इमेज का नाम.$WORKLOAD_IMAGE_TAG: वर्कलोड डॉकर इमेज का टैग.$WORKLOAD_SERVICEACCOUNT: वह सेवा खाता जिसके पास, वर्कलोड चलाने वाले Confidential VM को ऐक्सेस करने की अनुमति है.$SECUNDUS_RESULT_BUCKET: वह बकेट जिसमें वर्कलोड के नतीजे सेव किए जाते हैं.
अन्य संसाधन:
primus_customer_list.csvमें ग्राहक से जुड़ा डेटा होता है. हम इस डेटा को$PRIMUS_INPUT_STORAGE_BUCKETपर अपलोड करेंगे और एक ऐसा वर्कलोड बनाएंगे जो इस डेटा को क्वेरी करेगा.
मौजूदा वर्कफ़्लो
कॉन्फ़िडेंशियल स्पेस में वर्कलोड चलाने पर, कॉन्फ़िगर किए गए संसाधनों का इस्तेमाल करके यह प्रोसेस पूरी की जाती है:
- वर्कलोड, WIP से
$PRIMUS_SERVICEACCOUNTके लिए सामान्य Google ऐक्सेस टोकन का अनुरोध करता है. यह वर्कलोड और एनवायरमेंट के दावों के साथ, पुष्टि करने वाले व्यक्ति के लिए सेवा टोकन उपलब्ध कराता है. - अगर Attestation Verifier सेवा टोकन में वर्कलोड मेज़रमेंट के दावे, WIP में एट्रिब्यूट की शर्त से मेल खाते हैं, तो यह
$PRIMUS_SERVICEACCOUNT.के लिए ऐक्सेस टोकन दिखाता है - वर्कलोड,
$PRIMUS_SERVICEACCOUNTसे जुड़े सेवा खाते के ऐक्सेस टोकन का इस्तेमाल करके,$PRIMUS_INPUT_STORAGE_BUCKETबकेट में मौजूद ग्राहक के डेटा को ऐक्सेस करता है. - वर्कलोड, उस डेटा पर कार्रवाई करता है.
- वर्कलोड,
$WORKLOAD_SERVICEACCOUNTसेवा खाते का इस्तेमाल करके, उस ऑपरेशन के नतीजों को$SECUNDUS_RESULT_STORAGE_BUCKETबकेट में लिखता है.
हस्ताक्षर किए गए कंटेनर के साथ नया वर्कफ़्लो
हस्ताक्षर किए गए कंटेनर की सुविधा को मौजूदा वर्कफ़्लो में इंटिग्रेट किया जाएगा. इसके बारे में यहां बताया गया है. हस्ताक्षर की गई कंटेनर इमेज की सुविधा के साथ कॉन्फ़िडेंशियल स्पेस में वर्कलोड चलाने पर, कॉन्फ़िगर किए गए संसाधनों का इस्तेमाल करके यह प्रोसेस पूरी की जाती है:
- गोपनीय स्पेस, चालू वर्कलोड इमेज से जुड़े किसी भी कंटेनर के हस्ताक्षर का पता लगाता है. इसके बाद, इन्हें पुष्टि करने वाले व्यक्ति या इकाई को भेजता है. अटेस्टेशन की पुष्टि करने वाला व्यक्ति, हस्ताक्षर की पुष्टि करता है. साथ ही, अटेस्टेशन के दावों में मान्य हस्ताक्षर शामिल करता है.
- वर्कलोड, WIP से
$PRIMUS_SERVICEACCOUNTके लिए सामान्य Google ऐक्सेस टोकन का अनुरोध करता है. यह वर्कलोड और एनवायरमेंट के दावों के साथ, पुष्टि करने वाले व्यक्ति के लिए सेवा टोकन उपलब्ध कराता है. - अगर Attestation Verifier सेवा टोकन में मौजूद कंटेनर के हस्ताक्षर, WIP में मौजूद एट्रिब्यूट की शर्त से मेल खाते हैं, तो यह
$PRIMUS_SERVICEACCOUNTके लिए ऐक्सेस टोकन दिखाता है. - वर्कलोड,
$PRIMUS_SERVICEACCOUNTसे जुड़े सेवा खाते के ऐक्सेस टोकन का इस्तेमाल करके,$PRIMUS_INPUT_STORAGE_BUCKETबकेट में मौजूद ग्राहक के डेटा को ऐक्सेस करता है. - वर्कलोड, उस डेटा पर कार्रवाई करता है.
- वर्कलोड,
$WORKLOAD_SERVICEACCOUNTका इस्तेमाल करके उस कार्रवाई के नतीजों को$SECUNDUS_RESULT_STORAGE_BUCKETबकेट में लिखता है.
2. क्लाउड संसाधन सेट अप करना
कॉन्फ़िडेंशियल स्पेस सेटअप करने के लिए, सबसे पहले आपको Primus और Secundus बैंक के GCP प्रोजेक्ट में ज़रूरी क्लाउड संसाधन बनाने होंगे. इस कोडलैब में ये नए संसाधन शामिल किए गए हैं:
Primus प्रोजेक्ट में:
- कोड की ऑडिट करने के बाद, Secundus वर्कलोड को साइन करने के लिए इस्तेमाल की गई केएमएस साइनिंग कुंजी.
- Cosign के हस्ताक्षर सेव करने के लिए, Artifact Registry रिपॉज़िटरी.
Secundus प्रोजेक्ट में कोई नया संसाधन नहीं है. इन संसाधनों को सेट अप करने के बाद, ज़रूरी भूमिकाओं और अनुमतियों के साथ वर्कलोड के लिए एक सेवा खाता बनाया जाएगा. इसके बाद, आपको वर्कलोड इमेज बनानी होगी. साथ ही, ऑडिटर, प्राइमस बैंक को वर्कलोड इमेज पर हस्ताक्षर करने होंगे. इसके बाद, डेटा-सहयोगियों (इस कोडलैब में Primus बैंक) से वर्कलोड को अनुमति मिलेगी. साथ ही, वर्कलोड ऑपरेटर (इस मामले में Secundus बैंक) वर्कलोड को चलाएगा.
Confidential Space को सेटअप करने के दौरान, आपको Primus और Secundus GCP प्रोजेक्ट में ज़रूरी क्लाउड संसाधन बनाने होंगे.
शुरू करने से पहले
- इस कोडलैब में इस्तेमाल की गई ज़रूरी स्क्रिप्ट पाने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करके इस रिपॉज़िटरी को क्लोन करें.
git clone https://github.com/GoogleCloudPlatform/confidential-space
- इस कोडलैब के लिए डायरेक्ट्री बदलें.
cd confidential-space/codelabs/signed_container_codelab/scripts
- पक्का करें कि आपने ज़रूरी प्रोजेक्ट सेट किए हों. इसके लिए, यहां दिया गया तरीका अपनाएं.
export PRIMUS_PROJECT_ID=<GCP project id of primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of secundus bank>
- ऊपर बताए गए संसाधन के नामों के लिए, इस कमांड का इस्तेमाल करके वैरिएबल सेट करें. इन वैरिएबल (जैसे,
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket') का इस्तेमाल करके, संसाधन के नामों को बदला जा सकता है - संसाधन के नामों के लिए, अपने प्रोजेक्ट आईडी के आधार पर बाकी बचे वैरिएबल नामों को वैल्यू पर सेट करने के लिए, यहां दी गई स्क्रिप्ट चलाएं.
source config_env.sh
- यहां दिए गए निर्देशों का पालन करके, cosign इंस्टॉल करें.
Primus बैंक के संसाधन सेट अप करना
इस चरण के तहत, आपको Primus बैंक के लिए ज़रूरी क्लाउड संसाधन सेट अप करने होंगे. Primus बैंक के लिए संसाधन सेट अप करने के लिए, यह स्क्रिप्ट चलाएं. इन चरणों के तहत, यहां दिए गए संसाधन बनाए जाएंगे:
- Primus बैंक के एन्क्रिप्ट (सुरक्षित) किए गए ग्राहक डेटा की फ़ाइल को सेव करने के लिए, Cloud Storage बकेट (
$PRIMUS_INPUT_STORAGE_BUCKET). - Primus बैंक की डेटा फ़ाइल को एन्क्रिप्ट (सुरक्षित) करने के लिए, KMS में एन्क्रिप्शन की (
$PRIMUS_ENC_KEY) और कीरिंग ($PRIMUS_ENC_KEYRING) का इस्तेमाल किया जाता है. - Workload Identity Pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL), जो अपने प्रोवाइडर के तहत कॉन्फ़िगर की गई एट्रिब्यूट की शर्तों के आधार पर दावों की पुष्टि करता है. - ऊपर बताए गए वर्कलोड आइडेंटिटी पूल (
$PRIMUS_WORKLOAD_IDENTITY_POOL) से जुड़ा सेवा खाता ($PRIMUS_SERVICEACCOUNT), जिसके पास IAM का यह ऐक्सेस है: roles/cloudkms.cryptoKeyDecrypterका इस्तेमाल करके, केएमएस की मदद से डेटा को डिक्रिप्ट किया जा सकता है.objectViewerको क्लाउड स्टोरेज बकेट से डेटा पढ़ने की अनुमति दें.roles/iam.workloadIdentityUserका इस्तेमाल करके, इस सेवा खाते को Workload Identity Pool से कनेक्ट करें.
./setup_primus_bank_resources.sh
Secundus बैंक के संसाधन सेट अप करना
इस चरण के तहत, आपको Secundus बैंक के लिए ज़रूरी क्लाउड संसाधन सेट अप करने होंगे. Secundus बैंक के लिए संसाधन सेट अप करने के लिए, यह स्क्रिप्ट चलाएं. इस चरण के तहत, नीचे दिए गए संसाधन बनाए जाएंगे:
- Cloud Storage बकेट (
$SECUNDUS_RESULT_STORAGE_BUCKET), जिसका इस्तेमाल Secundus बैंक, वर्कलोड के एक्ज़ीक्यूशन के नतीजे को सेव करने के लिए करता है.
./setup_secundus_bank_resources.sh
3. वर्कलोड बनाना और उस पर हस्ताक्षर करना
वर्कलोड सेवा खाता बनाना
अब, आपको ज़रूरी भूमिकाओं और अनुमतियों के साथ वर्कलोड के लिए एक सेवा खाता बनाना होगा. Secundus बैंक प्रोजेक्ट में वर्कलोड सेवा खाता बनाने के लिए, यहां दी गई स्क्रिप्ट चलाएं. इस सेवा खाते का इस्तेमाल, वर्कलोड चलाने वाले वीएम के लिए किया जाएगा.
- इस वर्कलोड सेवा खाते (
$WORKLOAD_SERVICEACCOUNT) के पास ये भूमिकाएं होंगी: confidentialcomputing.workloadUserका इस्तेमाल करके, पुष्टि करने वाला टोकन पाएंlogging.logWriterCloud Logging में लॉग लिखने के लिए.objectViewerक्लाउड स्टोरेज बकेट से डेटा पढ़ने के लिए$PRIMUS_INPUT_STORAGE_BUCKET.objectAdminको$SECUNDUS_RESULT_STORAGE_BUCKETक्लाउड स्टोरेज बकेट में वर्कलोड का नतीजा लिखने की अनुमति दें.
./create_workload_serviceaccount.sh
वर्कलोड बनाना
इस चरण में, आपको वर्कलोड की डॉकर इमेज बनानी होगी. इस कोडलैब में इस्तेमाल किया गया वर्कलोड, CLI पर आधारित एक सामान्य Go ऐप्लिकेशन है. यह ऐप्लिकेशन, Primus बैंक के ग्राहक डेटा से, किसी जगह के ग्राहकों की संख्या का पता लगाता है. इसके लिए, जगह की जानकारी को आर्ग्युमेंट के तौर पर दिया जाता है. नीचे दी गई स्क्रिप्ट चलाकर, ऐसा वर्कलोड बनाएं जिसमें ये चरण पूरे किए जा रहे हों:
- Secundus बैंक के मालिकाना हक वाला Artifact Registry(
$SECUNDUS_ARTIFACT_REGISTRY) बनाएं. - ज़रूरी संसाधनों के नाम के साथ वर्कलोड कोड अपडेट करें. इस कोडलैब के लिए इस्तेमाल किया गया वर्कलोड कोड यहां दिया गया है.
- Go बाइनरी बनाएं और वर्कलोड कोड की डॉकर इमेज बनाने के लिए Dockerfile बनाएं. इस कोडलैब के लिए इस्तेमाल की गई Dockerfile यहां दी गई है.
- सेकंडस बैंक के मालिकाना हक वाले Artifact Registry (
$SECUNDUS_ARTIFACT_REGISTRY) में Docker इमेज बनाएं और उसे पब्लिश करें. $SECUNDUS_ARTIFACT_REGISTRYके लिए,$WORKLOAD_SERVICEACCOUNTको पढ़ने की अनुमति दें. इसकी ज़रूरत इसलिए होती है, ताकि वर्कलोड कंटेनर, Artifact Registry से वर्कलोड डॉकर इमेज को पुल कर सके.
./create_workload.sh
वर्कलोड पर हस्ताक्षर करना
हम वर्कलोड इमेज पर हस्ताक्षर करने के लिए, Cosign का इस्तेमाल करेंगे. Cosign, डिफ़ॉल्ट रूप से हस्ताक्षर को उसी रेपो में सेव करेगा जिसमें इमेज सेव है. हस्ताक्षरों के लिए कोई दूसरी रिपॉज़िटरी तय करने के लिए, COSIGN_REPOSITORY एनवायरमेंट वैरिएबल सेट किया जा सकता है.
यहां हम Artifact Registry का इस्तेमाल उदाहरण के तौर पर करेंगे. अपनी पसंद के हिसाब से, OCI पर आधारित अन्य रजिस्ट्री भी चुनी जा सकती हैं. जैसे, Docker Hub, AWS CodeArtifact.
- Artifact Registry में Docker इमेज सेव करने के लिए डेटा स्टोर करने की जगह बनाएं.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud artifacts repositories create $PRIMUS_COSIGN_REPOSITORY \
--repository-format=docker --location=${PRIMUS_PROJECT_REPOSITORY_REGION}
- वर्कलोड इमेज पर हस्ताक्षर करने के लिए, KMS में एक कीरिंग और कुंजी बनाएं.
gcloud config set project $PRIMUS_PROJECT_ID
gcloud kms keyrings create $PRIMUS_SIGNING_KEYRING \
--location=${PRIMUS_PROJECT_LOCATION}
gcloud kms keys create $PRIMUS_SIGNING_KEY \
--keyring=$PRIMUS_SIGNING_KEYRING \
--purpose=asymmetric-signing \
--default-algorithm=ec-sign-p256-sha256 \
--location=${PRIMUS_PROJECT_LOCATION}
- Artifact Registry के लिए, पूरी इमेज का नाम ज़रूरी है. जैसे,
$LOCATION/$PROJECT/$REPOSITORY/$IMAGE_NAME. हस्ताक्षर सेव करने के लिए, रिपॉज़िटरी में कोई भी कंटेनर इमेज अपलोड की जा सकती है.
export COSIGN_REPOSITORY=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo
$PRIMUS_COSIGN_REPOSITORYसेवा खाते को$PRIMUS_COSIGN_REPOSITORYरिपॉज़िटरी में व्यूअर की भूमिका असाइन करें.$WORKLOAD_SERVICEACCOUNTइससे कॉन्फ़िडेंशियल स्पेस को,$PRIMUS_COSIGN_REPOSITORYपर अपलोड किए गए किसी भी कंटेनर इमेज सिग्नेचर का पता लगाने की अनुमति मिलती है.
gcloud artifacts repositories add-iam-policy-binding ${PRIMUS_COSIGN_REPOSITORY} \
--project=${PRIMUS_PROJECT_ID} --role='roles/viewer' --location=us \
--member="serviceAccount:${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com"
Cosign एक बेहतरीन टूल है. इसमें हस्ताक्षर करने की कई सुविधाएं उपलब्ध हैं. हमारे इस्तेमाल के उदाहरण के लिए, हमें सिर्फ़ Cosign की ज़रूरत होती है, ताकि हम कुंजी के जोड़े से साइन कर सकें. हस्ताक्षर किए गए कंटेनर इमेज की इस सुविधा के लिए, बिना कुंजी के हस्ताक्षर करने की सुविधा काम नहीं करती.
कुंजी के जोड़े से साइन करने के लिए, ये दो विकल्प उपलब्ध हैं:
- Cosign से जनरेट किए गए लोकल कुंजी के जोड़े से हस्ताक्षर करें.
- किसी ऐसी कुंजी के पेयर से हस्ताक्षर करें जिसे कहीं और सेव किया गया हो. उदाहरण के लिए, KMS में.
- अगर आपके पास कोई कुंजी जोड़ी नहीं है, तो Cosign में एक कुंजी जोड़ी जनरेट करें. ज़्यादा जानकारी के लिए, सेल्फ़-मैनेज की गई कुंजियों से साइन करना लेख पढ़ें. यहां हमने कुंजी-जोड़ी जनरेट करने और वर्कलोड पर हस्ताक्षर करने के दोनों तरीके (स्थानीय तौर पर और KMS सेवा देने वाली कंपनी का इस्तेमाल करके) बताए हैं. कृपया वर्कलोड कंटेनर पर हस्ताक्षर करने के लिए, इनमें से किसी एक तरीके का पालन करें.
// Set Application Default Credentials.
gcloud auth application-default login
// Generate keys using a KMS provider.
cosign generate-key-pair --kms <provider>://<key>
// Generate keys using Cosign.
cosign generate-key-pair
ऊपर दिए गए <provider>://<key> को gcpkms://projects/$PRIMUS_PROJECT_ID/locations/global/keyRings/$PRIMUS_SIGNING_KEYRING/cryptoKeys/$PRIMUS_SIGNING_KEY/cryptoKeyVersions/$PRIMUS_SIGNING_KEYVERSION से बदलें
- <provider> : इसका मतलब है कि आपने जिस केएमएस का इस्तेमाल किया है
- <key> : इसका मतलब है कि KMS में कुंजी का पाथ
- पुष्टि करने के लिए सार्वजनिक पासकोड वापस पाएं.
// For KMS providers.
cosign public-key --key <some provider>://<some key> > pub.pem
// For local key pair signing.
cosign public-key --key cosign.key > pub.pem
- Cosign का इस्तेमाल करके वर्कलोड पर हस्ताक्षर करें. सार्वजनिक कुंजी को unpadded base64 में कोड में बदलें
PUB=$(cat pub.pem | openssl base64)
// Remove spaces and trailing "=" signs.
PUB=$(echo $PUB | tr -d '[:space:]' | sed 's/[=]*$//')
- एक्सपोर्ट की गई सार्वजनिक कुंजी और अटैच किए गए हस्ताक्षर एल्गोरिदम का इस्तेमाल करके, Cosign की मदद से वर्कलोड पर हस्ताक्षर करें.
IMAGE_REFERENCE=us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/$SECUNDUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG
// Sign with KMS support.
cosign sign --key <some provider>://<some key> $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
// Sign with a local key pair.
cosign sign --key cosign.key $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
--key[ज़रूरी है] इससे यह तय होता है कि किस साइनिंग पासकोड का इस्तेमाल करना है. केएमएस की सेवा देने वाली कंपनी की ओर से मैनेज की गई किसी कुंजी का रेफ़रंस देते समय, कृपया Sigstore KMS की सेवा देने वाली कंपनी की ओर से मैनेज की गई कुंजी का रेफ़रंस देने के लिए यूआरआई फ़ॉर्मैट में दिया गया यूआरआई फ़ॉर्मैट इस्तेमाल करें. Cosign की जनरेट की गई कुंजी के बारे में बताने के लिए, cosign.key का इस्तेमाल करें.$IMAGE_REFERENCE[ज़रूरी है] इससे यह तय होता है कि किस कंटेनर इमेज पर हस्ताक्षर करना है.IMAGE_REFERENCEके फ़ॉर्मैट की पहचान टैग या इमेज डाइजेस्ट से की जा सकती है. उदाहरण के लिए:us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container:latest or us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container[IMAGE-digest]- -a [ज़रूरी है] से, हस्ताक्षर वाले पेलोड से जुड़े एनोटेशन के बारे में पता चलता है. Confidential Space में साइन की गई कंटेनर इमेज के लिए, सार्वजनिक पासकोड और हस्ताक्षर एल्गोरिदम को हस्ताक्षर पेलोड से अटैच करना ज़रूरी है.
dev.cosignproject.cosign/sigalgसिर्फ़ के लिए, ये तीन वैल्यू इस्तेमाल की जा सकती हैं:- RSASSA_PSS_SHA256: RSASSA एल्गोरिदम, जिसमें SHA256 डाइजेस्ट के साथ PSS पैडिंग होती है.
- RSASSA_PKCS1V15_SHA256: यह RSASSA एल्गोरिदम है. इसमें PKCS#1 v1.5 पैडिंग का इस्तेमाल किया जाता है. साथ ही, इसमें SHA256 डाइजेस्ट का इस्तेमाल किया जाता है.
- ECDSA_P256_SHA256: ECDSA on the P-256 Curve with a SHA256 digest. यह Cosign से जनरेट की गई कुंजी के जोड़े के लिए, डिफ़ॉल्ट सिग्नेचर एल्गोरिदम भी है.
- Docker रिपॉज़िटरी में हस्ताक्षर अपलोड करना
Cosign की सुविधा, चुने गए COSIGN_REPOSITORY. पर हस्ताक्षर अपने-आप अपलोड कर देगी
4. वर्कलोड को अनुमति देना और उसे चलाना
वर्कलोड को अनुमति देना
इस चरण के तहत, हम Workload Identity Pool ($PRIMUS_WORKLOAD_IDENTITY_POOL) में Workload Identity Provider सेट अप करेंगे. Workload Identity के लिए, एट्रिब्यूट-कंडीशन कॉन्फ़िगर की गई हैं. इन्हें यहां दिखाया गया है. इनमें से एक शर्त यह है कि वर्कलोड इमेज के हस्ताक्षर के फ़िंगरप्रिंट की पुष्टि, साइनिंग के लिए इस्तेमाल की गई सार्वजनिक पासकोड के फ़िंगरप्रिंट से की जाए. इस एट्रिब्यूट की शर्त के साथ, जब Secundus Bank कोई नई वर्कलोड इमेज रिलीज़ करता है, तो Primus Bank वर्कलोड कोड की ऑडिट करता है. साथ ही, नई वर्कलोड इमेज पर हस्ताक्षर करता है. इसके लिए, उसे इमेज डाइजेस्ट के साथ WIP नीति को अपडेट करने की ज़रूरत नहीं होती.
gcloud config set project $PRIMUS_PROJECT_ID
PUBLIC_KEY_FINGERPRINT=$(openssl pkey -pubin -in pub.pem -outform DER | openssl sha256 | cut -d' ' -f2)
gcloud iam workload-identity-pools providers create-oidc ${PRIMUS_WIP_PROVIDER} \
--location="global" \
--workload-identity-pool="${PRIMUS_WORKLOAD_IDENTITY_POOL}" \
--issuer-uri="https://confidentialcomputing.googleapis.com/" \
--allowed-audiences="https://sts.googleapis.com" \
--attribute-mapping="google.subject='assertion.sub'" \
--attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes
&& '${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com' in
assertion.google_service_accounts
&& ['ECDSA_P256_SHA256:${PUBLIC_KEY_FINGERPRINT}']
.exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig,sig.signature_algorithm+':'+sig.key_id))"
वर्कलोड चलाना
इस चरण के तहत, हम कॉन्फ़िडेंशियल वीएम पर वर्कलोड चलाएंगे. ज़रूरी टीईई आर्ग्युमेंट, मेटाडेटा फ़्लैग का इस्तेमाल करके पास किए जाते हैं. वर्कलोड कंटेनर के लिए आर्ग्युमेंट, फ़्लैग के "tee-cmd" हिस्से का इस्तेमाल करके पास किए जाते हैं. वर्कलोड को इस तरह से कोड किया गया है कि वह अपने नतीजे $SECUNDUS_RESULT_STORAGE_BUCKET पर पब्लिश कर सके.
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--project=${SECUNDUS_PROJECT_ID} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/${SECUNDUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]"~tee-signed-image-repos=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo"
नतीजे देखें
Secundus प्रोजेक्ट में, वर्कलोड के नतीजे देखें.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
नतीजा 3 होना चाहिए, क्योंकि primus_customer_list.csv फ़ाइल में सिऐटल के इतने ही लोगों के नाम शामिल हैं!
5. क्लीन अप करें
इस कोडलैब के तहत बनाए गए संसाधनों को हटाने के लिए, यहां दी गई स्क्रिप्ट का इस्तेमाल किया जा सकता है. सफ़ाई की इस प्रोसेस के तहत, ये संसाधन मिटा दिए जाएंगे:
- Primus बैंक (
$PRIMUS_INPUT_STORAGE_BUCKET) के इनपुट स्टोरेज बकेट का नाम. - Primus बैंक का सेवा खाता (
$PRIMUS_SERVICEACCOUNT). - Primus Bank की आर्टफ़ैक्ट रजिस्ट्री, जिसमें इमेज के सिग्नेचर (
$PRIMUS_COSIGN_REPOSITORY) मौजूद हैं. - Primus Bank का वर्कलोड आइडेंटिटी पूल (
$PRIMUS_WORKLOAD_IDENTITY_POOL). - Secundus Bank (
$WORKLOAD_SERVICEACCOUNT) का वर्कलोड सेवा खाता. - Workload Compute Instance.
- सेकंडस बैंक (
$SECUNDUS_RESULT_STORAGE_BUCKET) का नतीजा सेव करने वाला स्टोरेज बकेट. - सेकंडस बैंक की आर्टफ़ैक्ट रजिस्ट्री (
$SECUNDUS_ARTIFACT_REGISTRY). - Secundus Bank की वर्कलोड वीएम (
$WORKLOAD_VM).
./cleanup.sh
अगर आपने एक्सप्लोर कर लिया है, तो कृपया अपना प्रोजेक्ट मिटा दें.
- Cloud Platform Console पर जाएं
- वह प्रोजेक्ट चुनें जिसे बंद करना है. इसके बाद, सबसे ऊपर मौजूद ‘मिटाएं' पर क्लिक करें: इससे प्रोजेक्ट को मिटाने के लिए शेड्यूल किया जाता है
बधाई हो
बधाई हो, आपने कोडलैब पूरा कर लिया है!
आपने गोपनीय स्पेस को ज़्यादा आसानी से इस्तेमाल करने के लिए, साइन की गई कंटेनर इमेज की सुविधा का इस्तेमाल करने का तरीका सीखा.
आगे क्या करना है?
इस तरह के कुछ और कोडलैब देखें...
- गोपनीय स्पेस में इस्तेमाल किया जा रहा सुरक्षित तरीके से शेयर किया गया डेटा
- मल्टी-पार्टी कंप्यूटेशन और कॉन्फ़िडेंशियल स्पेस का इस्तेमाल करके डिजिटल ऐसेट का लेन-देन कैसे करें
- गोपनीय स्पेस की मदद से गोपनीय डेटा का विश्लेषण करना
इस बारे में और पढ़ें
- क्या आपको अकेलापन महसूस हो रहा है? Confidential computing की मदद से डेटा को सुरक्षित रखना
- GCP में Confidential Computing
- गोपनीय स्पेस: निजता की सुरक्षा के साथ मिलकर काम करने की सुविधा
- Google और Intel, कॉन्फ़िडेंशियल कंप्यूटिंग को ज़्यादा सुरक्षित कैसे बनाते हैं
- निजता बनाम प्रोग्रेस - Google Cloud की कॉन्फ़िडेंशियल कंप्यूटिंग की मदद से सुरक्षा को बेहतर बनाना