1. खास जानकारी
Confidential Space, कई पक्षों के साथ सुरक्षित तरीके से डेटा शेयर करने और मिलकर काम करने की सुविधा देता है. साथ ही, संगठनों को अपने डेटा की गोपनीयता बनाए रखने की अनुमति देता है. इसका मतलब है कि संगठन एक-दूसरे के साथ मिलकर काम कर सकते हैं. हालांकि, वे अपने डेटा का ऐक्सेस कंट्रोल कर सकते हैं और उसे बिना अनुमति के ऐक्सेस से सुरक्षित रख सकते हैं.
Confidential Space की मदद से, ऐसे मामलों में फ़ायदा पाया जा सकता है जहां आपको संवेदनशील डेटा को इकट्ठा और उसका विश्लेषण करके, एक-दूसरे के लिए फ़ायदा पाना हो. साथ ही, आपको डेटा पर पूरा कंट्रोल रखना हो. इस तरह के डेटा को अक्सर रेगुलेट किया जाता है. कॉन्फ़िडेंशियल स्पेस की मदद से, संगठन संवेदनशील डेटा को इकट्ठा और उसका विश्लेषण करके, एक-दूसरे को फ़ायदा पहुंचा सकते हैं. जैसे, व्यक्तिगत पहचान से जुड़ी जानकारी (पीआईआई), स्वास्थ्य की सुरक्षित जानकारी (पीएचआई), बौद्धिक संपत्ति, और क्रिप्टोग्राफ़िक सीक्रेट. साथ ही, वे इस डेटा पर पूरा कंट्रोल बनाए रख सकते हैं.
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud Platform प्रोजेक्ट
- कोई ब्राउज़र, जैसे कि Chrome या Firefox
- Google Compute Engine ( codelab), Confidential VM, कंटेनर, और रिमोट रिपॉज़िटरी के बारे में बुनियादी जानकारी
- Cloud KMS की बुनियादी जानकारी ( कोडलैब)
- सेवा खातों, वर्कलोड आइडेंटिटी फ़ेडरेशन, और एट्रिब्यूट की शर्तों के बारे में बुनियादी जानकारी.
आपको क्या सीखने को मिलेगा
- कॉन्फ़िडेंशियल स्पेस को चलाने के लिए, ज़रूरी क्लाउड संसाधनों को कॉन्फ़िगर करने का तरीका
- Confidential Space की वीएम इमेज चलाने वाले Confidential VM में वर्कलोड को कैसे चलाया जाता है
- वर्कलोड कोड (क्या), कॉन्फ़िडेंशियल स्पेस एनवायरमेंट (कहां), और वर्कलोड चलाने वाले खाते (कौन) के एट्रिब्यूट के आधार पर, सुरक्षित किए गए संसाधनों को ऐक्सेस करने की अनुमति कैसे दी जाती है.
इस कोडलैब में, Primus और Secundus Bank के बीच कॉन्फ़िडेंशियल स्पेस सेट अप किया जाएगा. इससे दोनों बैंक, एक-दूसरे के साथ पूरी खाता सूची शेयर किए बिना, अपने सामान्य ग्राहकों का पता लगा पाएंगे. इसके लिए, ये चरण पूरे करें:
- पहला चरण: Primus और Secundus बैंकों के लिए, ज़रूरी क्लाउड संसाधन सेट अप करें. इन क्लाउड संसाधनों में, Primus और Secundus बैंकों के लिए क्लाउड स्टोरेज बकेट, केएमएस कुंजियां, वर्कलोड आइडेंटिटी पूल, और सेवा खाते शामिल हैं. Primus Bank और Secundus Bank, अपने ग्राहक का डेटा Cloud Storage बकेट में सेव करते हैं. साथ ही, वे Cloud Key Management service की कुंजियों का इस्तेमाल करके डेटा को एन्क्रिप्ट (सुरक्षित) करते हैं.
- दूसरा चरण: वर्कलोड सेवा खाता बनाएं. इसका इस्तेमाल वर्कलोड वीएम करेगा. सेकंडस बैंक, वर्कलोड का ऑपरेटर होगा. वह वर्कलोड वीएम लॉन्च करेगा. वर्कलोड कोड बनाने का काम Primus Bank करेगा.
- तीसरा चरण: एक ऐसा वर्कलोड बनाएं जिसमें दो सीएलआई कमांड शामिल हों. पहली कमांड, दी गई जगह के ग्राहकों की संख्या गिनने के लिए और दूसरी कमांड, Primus और Secundus Bank के सामान्य ग्राहकों का पता लगाने के लिए. वर्कलोड को Primus Bank ने बनाया है और इसे Docker इमेज के तौर पर पैकेज किया जाएगा. यह Docker इमेज, Artifact Registry में पब्लिश की जाएगी.
- चौथा चरण: किसी वर्कलोड को अनुमति दें. Primus Bank, वर्कलोड आइडेंटिटी पूल का इस्तेमाल करेगा. इससे वह वर्कलोड को अपने ग्राहकों का डेटा ऐक्सेस करने की अनुमति दे पाएगा. यह अनुमति, इन एट्रिब्यूट के आधार पर दी जाएगी: वर्कलोड कौन चला रहा है, वर्कलोड क्या करता है, और वर्कलोड कहां चल रहा है.
- पांचवां चरण: वर्कलोड चलने पर, यह डेटा सहयोगियों (Primus Bank और Secundus Bank) के क्लाउड संसाधनों के ऐक्सेस का अनुरोध करेगा. इसके लिए, यह वर्कलोड और एनवायरमेंट के दावों के साथ Attestation Verifier service टोकन देगा. अगर टोकन में मौजूद वर्कलोड मेज़रमेंट के दावे, Primus और Secundus बैंकों के वर्कलोड आइडेंटिटी पूल में मौजूद एट्रिब्यूट की शर्त से मेल खाते हैं, तो यह सेवा खाते का ऐक्सेस टोकन दिखाता है. इस टोकन के पास, संबंधित क्लाउड संसाधनों को ऐक्सेस करने की अनुमति होती है. क्लाउड संसाधन, सिर्फ़ कॉन्फ़िडेंशियल स्पेस में चल रहे वर्कलोड के लिए उपलब्ध होंगे.
- पांचवां चरण(a): पहला वर्कलोड चलाएं. इससे Primus Bank के उन ग्राहकों की गिनती की जाती है जो किसी खास जगह से हैं. इस वर्कलोड के लिए, Primus Bank डेटा सहयोगी और वर्कलोड ऑथर होगा. यह Confidential Space में चल रहे वर्कलोड को एन्क्रिप्ट (सुरक्षित) की गई ग्राहक सूची उपलब्ध कराएगा. Secundus Bank, वर्कलोड ऑपरेटर होगा. यह कॉन्फ़िडेंशियल स्पेस में वर्कलोड चलाएगा.
- पांचवां चरण(b): दूसरा वर्कलोड चलाएं. इससे Primus और Secundus बैंक के सामान्य ग्राहकों का पता चलता है. इस वर्कलोड के लिए, Primus Bank और Secundus Bank, दोनों डेटा सहयोगी होंगे. ये कंपनियां, एन्क्रिप्ट (सुरक्षित) की गई ग्राहक सूचियां, Confidential Space में चल रहे वर्कलोड को उपलब्ध कराती हैं. Secundus Bank, फिर से वर्कलोड ऑपरेटर बन जाएगा. इस वर्कलोड को Secundus Bank भी अनुमति देगा, क्योंकि सामान्य ग्राहकों का पता लगाने के लिए, वर्कलोड को Secundus Bank की एन्क्रिप्ट की गई ग्राहक सूचियों को भी ऐक्सेस करना होगा. इस मामले में, Secundus Bank, वर्कलोड को अपने ग्राहक डेटा को ऐक्सेस करने की अनुमति देगा. यह अनुमति, इन एट्रिब्यूट के आधार पर दी जाएगी: वर्कलोड को कौन चला रहा है, वर्कलोड क्या करता है, और वर्कलोड कहां चल रहा है. ये एट्रिब्यूट, Primus Bank के लिए चौथे चरण में बताए गए हैं.

2. क्लाउड संसाधन सेट अप करना
शुरू करने से पहले
- इस कोडलैब में इस्तेमाल की गई ज़रूरी स्क्रिप्ट पाने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करके इस रिपॉज़िटरी को क्लोन करें.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
- इस कोडलैब के लिए डायरेक्ट्री बदलें.
cd confidential-space/codelabs/bank_data_analysis_codelab/scripts
- पक्का करें कि आपने प्रोजेक्ट के ज़रूरी एनवायरमेंट वैरिएबल सेट किए हों. ये वैरिएबल यहां दिए गए हैं. GCP प्रोजेक्ट बनाने के बारे में ज़्यादा जानने के लिए, कृपया यह कोडलैब देखें. प्रोजेक्ट आईडी को वापस पाने का तरीका जानने के लिए, यह लेख पढ़ें. साथ ही, यह भी जानें कि प्रोजेक्ट आईडी, प्रोजेक्ट के नाम और प्रोजेक्ट नंबर से कैसे अलग होता है.
export PRIMUS_PROJECT_ID=<GCP project id of Primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of Secundus bank>
- अपने प्रोजेक्ट के लिए, बिलिंग की सुविधा चालू करें.
- दोनों प्रोजेक्ट के लिए, Confidential Computing API और यहां दिए गए एपीआई चालू करें.
gcloud services enable \
cloudapis.googleapis.com \
cloudkms.googleapis.com \
cloudresourcemanager.googleapis.com \
cloudshell.googleapis.com \
container.googleapis.com \
containerregistry.googleapis.com \
iam.googleapis.com \
confidentialcomputing.googleapis.com
- इस कमांड का इस्तेमाल करके, संसाधन के नामों के लिए यहां बताए गए वैरिएबल सेट करें. इन वैरिएबल (जैसे,
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket') का इस्तेमाल करके, संसाधन के नामों को बदला जा सकता है - Primus प्रोजेक्ट में मौजूद क्लाउड संसाधन के नामों के साथ, यहां दिए गए वैरिएबल सेट किए जा सकते हैं. अगर वैरिएबल सेट है, तो Primus प्रोजेक्ट के मौजूदा क्लाउड संसाधन का इस्तेमाल किया जाएगा. अगर वैरिएबल सेट नहीं है, तो क्लाउड रिसोर्स का नाम, प्रोजेक्ट के नाम से जनरेट होगा. साथ ही, नया क्लाउड रिसोर्स, यहां दिए गए तरीके से बनाया जाएगा:
| वह बकेट जिसमें Primus Bank के ग्राहक के डेटा की फ़ाइल सेव की जाती है. |
| Primus Bank का Workload Identity Pool (WIP), जो दावों की पुष्टि करता है. |
| Primus Bank का Workload Identity Pool Provider, जिसमें Attestation Verifier Service से साइन किए गए टोकन इस्तेमाल करने के लिए ऑथराइज़ेशन की शर्त शामिल है. |
| Primus Bank का सेवा खाता, जिसका इस्तेमाल |
| प्राइमस बैंक के लिए, |
| केएमएस कीरिंग का इस्तेमाल, Primus Bank के लिए एन्क्रिप्शन की |
| आर्टफ़ैक्ट रिपॉज़िटरी, जहां वर्कलोड की Docker इमेज को पुश किया जाएगा. |
- Secundus प्रोजेक्ट में मौजूद क्लाउड रिसोर्स के नामों का इस्तेमाल करके, इन वैरिएबल को सेट किया जा सकता है. अगर वैरिएबल सेट है, तो Secundus प्रोजेक्ट के मौजूदा क्लाउड संसाधन का इस्तेमाल किया जाएगा. अगर वैरिएबल सेट नहीं है, तो क्लाउड संसाधन का नाम, project-name से जनरेट होगा. साथ ही, नया क्लाउड संसाधन, यहां दिए गए तरीके से बनाया जाएगा:
| वह बकेट जिसमें Secundus Bank के ग्राहक से जुड़े डेटा की फ़ाइल सेव की जाती है |
| Secundus Bank का Workload Identity Pool (WIP), जो दावों की पुष्टि करता है. |
| Secundus Bank का Workload Identity Pool Provider, जिसमें Attestation Verifier Service से साइन किए गए टोकन इस्तेमाल करने के लिए, अनुमति देने की शर्त शामिल है. |
| Secundus Bank का सेवा खाता, जिसका इस्तेमाल |
| यह केएमएस की है. इसका इस्तेमाल, Secundus Bank के लिए |
| यह केएमएस कीरिंग है. इसका इस्तेमाल, Secundus Bank के लिए एन्क्रिप्शन की |
| वह बकेट जिसमें वर्कलोड के नतीजे सेव किए जाते हैं. |
| वर्कलोड कंटेनर इमेज का नाम. |
| वर्कलोड कंटेनर इमेज का टैग. |
| वह सेवा खाता जिसके पास, वर्कलोड चलाने वाले Confidential VM को ऐक्सेस करने की अनुमति है. |
- इस कोडलैब में इस्तेमाल किए गए कुछ आर्टफ़ैक्ट यहां दिए गए हैं:
primus_customer_list.csv: Primus Bank के ग्राहक का डेटा रखने वाली फ़ाइल. इस कोडलैब में इस्तेमाल की गई सैंपल फ़ाइल यहां दी गई है.secundus_customer_list.csv: यह फ़ाइल, Secundus Bank के ग्राहकों का डेटा सेव करती है. इस कोडलैब में इस्तेमाल की गई सैंपल फ़ाइल यहां दी गई है.- इन दोनों प्रोजेक्ट के लिए, आपको कुछ अनुमतियों की ज़रूरत होगी:
$PRIMUS_PROJECT_IDके लिए, आपके पास Cloud KMS Admin, Storage Admin, Artifact Registry Administrator, Service Account Admin, और IAM Workload Identity Pool Admin की भूमिका होनी चाहिए.$SECUNDUS_PROJECT_IDके लिए, आपके पास Compute Admin, Storage Admin, Service Account Admin, Cloud KMS Admin, IAM Workload Identity Pool Admin, Security Admin (ज़रूरी नहीं) की भूमिका होनी चाहिए.- संसाधन के नामों के लिए, अपने प्रोजेक्ट आईडी के आधार पर बाकी बचे वैरिएबल नामों को वैल्यू पर सेट करने के लिए, यहां दी गई स्क्रिप्ट चलाएं.
source config_env.sh
Primus Bank के लिए क्लाउड संसाधन सेट अप करना
Primus Bank के लिए, इन क्लाउड संसाधनों की ज़रूरत होगी. Primus Bank के लिए संसाधन सेट अप करने के लिए, यह स्क्रिप्ट चलाएं:
- Cloud Storage बकेट (
$PRIMUS_INPUT_STORAGE_BUCKET), ताकि Primus Bank के एन्क्रिप्ट (सुरक्षित) किए गए ग्राहक डेटा की फ़ाइल को सेव किया जा सके. - Primus Bank की ग्राहक डेटा फ़ाइल को एन्क्रिप्ट (सुरक्षित) करने के लिए, KMS में एन्क्रिप्शन की (
$PRIMUS_ENC_KEY) और कीरिंग ($PRIMUS_ENC_KEYRING). - Workload Identity Pool (
$PRIMUS_WORKLOAD_IDENTITY_POOL), ताकि एट्रिब्यूट की शर्तों के आधार पर दावों की पुष्टि की जा सके. ये शर्तें, Workload Identity Pool Provider के तहत कॉन्फ़िगर की जाती हैं. - ऊपर बताई गई वर्कलोड आइडेंटिटी पूल (
$PRIMUS_WORKLOAD_IDENTITY_POOL) से जुड़े सेवा खाते ($PRIMUS_SERVICE_ACCOUNT) के पास, केएमएस कुंजी का इस्तेमाल करके डेटा को डिक्रिप्ट करने का ऐक्सेस होता है. इसके लिए,roles/cloudkms.cryptoKeyDecrypterभूमिका का इस्तेमाल किया जाता है. साथ ही, क्लाउड स्टोरेज बकेट से डेटा पढ़ने के लिए,objectViewerभूमिका का इस्तेमाल किया जाता है. इसके अलावा, सेवा खाते को वर्कलोड आइडेंटिटी पूल से कनेक्ट करने के लिए,roles/iam.workloadIdentityUserभूमिका का इस्तेमाल किया जाता है.
./setup_primus_bank_resources.sh
Secundus Bank के लिए क्लाउड संसाधन सेट अप करना
Secundus Bank के लिए, यहां दिए गए क्लाउड संसाधनों की ज़रूरत है. Secundus Bank के संसाधन सेट अप करने के लिए, इस स्क्रिप्ट को चलाएं. इस चरण के तहत, नीचे दिए गए संसाधन बनाए जाएंगे:
- Cloud Storage बकेट (
$SECUNDUS_INPUT_STORAGE_BUCKET), जिसका इस्तेमाल Secundus Bank के एन्क्रिप्ट किए गए ग्राहक डेटा की फ़ाइल को सेव करने के लिए किया जाता है. - सेकंडस बैंक की डेटा फ़ाइल को एन्क्रिप्ट (सुरक्षित) करने के लिए, केएमएस में एन्क्रिप्शन की (
$SECUNDUS_ENC_KEY) और कीरिंग ($SECUNDUS_ENC_KEYRING) का इस्तेमाल किया जाता है. - Workload Identity Pool (
$SECUNDUS_WORKLOAD_IDENTITY_POOL), ताकि एट्रिब्यूट की शर्तों के आधार पर दावों की पुष्टि की जा सके. ये शर्तें, Workload Identity Pool Provider के तहत कॉन्फ़िगर की जाती हैं. - ऊपर बताए गए वर्कलोड आइडेंटिटी पूल (
$SECUNDUS_WORKLOAD_IDENTITY_POOL) से जुड़े सेवा खाते ($SECUNDUS_SERVICE_ACCOUNT) के पास, केएमएस कुंजी का इस्तेमाल करके डेटा को डिक्रिप्ट करने (roles/cloudkms.cryptoKeyDecrypterभूमिका का इस्तेमाल करके), क्लाउड स्टोरेज बकेट से डेटा पढ़ने (objectViewerभूमिका का इस्तेमाल करके), और सेवा खाते को वर्कलोड आइडेंटिटी पूल से कनेक्ट करने (roles/iam.workloadIdentityUserभूमिका का इस्तेमाल करके) का ऐक्सेस होता है. - Cloud Storage बकेट (
$SECUNDUS_RESULT_STORAGE_BUCKET), जिसका इस्तेमाल Secundus Bank, वर्कलोड के एक्ज़ीक्यूशन के नतीजे को सेव करने के लिए करता है.
./setup_secundus_bank_resources.sh
3. वर्कलोड बनाना
वर्कलोड सेवा खाता बनाना
अब, आपको वर्कलोड के लिए एक सेवा खाता बनाना होगा. इसमें नीचे बताई गई ज़रूरी भूमिकाएं और अनुमतियां होंगी. Secundus Bank प्रोजेक्ट में वर्कलोड सेवा खाता बनाने के लिए, यहां दी गई स्क्रिप्ट चलाएं. वर्कलोड चलाने वाला वीएम, इस सेवा खाते का इस्तेमाल करेगा.
इस वर्कलोड सेवा खाते ($WORKLOAD_SERVICE_ACCOUNT) के पास ये भूमिकाएं होंगी:
- वर्कलोड सेवा खाते को
confidentialcomputing.workloadUserकी भूमिका असाइन करें . इससे उपयोगकर्ता खाते को पुष्टि करने वाला टोकन जनरेट करने की अनुमति मिल जाएगी. - वर्कलोड सेवा खाते को
logging.logWriterकी भूमिका असाइन करें. इससे Confidential Space एनवायरमेंट, सीरियल कंसोल के साथ-साथ Cloud Logging में भी लॉग लिख सकता है. इसलिए, VM बंद होने के बाद भी लॉग उपलब्ध रहते हैं. objectViewerक्लाउड स्टोरेज बकेट से डेटा पढ़ने के लिए$PRIMUS_INPUT_STORAGE_BUCKET.objectViewerक्लाउड स्टोरेज बकेट से डेटा पढ़ने के लिए$SECUNDUS_INPUT_STORAGE_BUCKET.objectAdminको$SECUNDUS_RESULT_STORAGE_BUCKETक्लाउड स्टोरेज बकेट में वर्कलोड का नतीजा लिखने की अनुमति दें.
./create_workload_service_account.sh
वर्कलोड बनाना
इस चरण के तहत, आपको इस कोडलैब में इस्तेमाल किए गए वर्कलोड के लिए एक Docker इमेज बनानी होगी. वर्कलोड, GoLang का एक सामान्य ऐप्लिकेशन है. यह ऐप्लिकेशन:
- यह फ़ंक्शन, किसी भौगोलिक जगह के ग्राहकों की संख्या को गिनता है.
- यह Primus और Secundus Bank के उन ग्राहकों का पता लगाता है जो दोनों के लिए सामान्य हैं. इसके लिए, यह उन ग्राहक सूचियों का इस्तेमाल करता है जो उनके क्लाउड स्टोरेज बकेट में सेव हैं.
नीचे दी गई स्क्रिप्ट चलाकर, ऐसा वर्कलोड बनाएं जिसमें ये चरण पूरे किए जा रहे हों:
- Primus Bank के मालिकाना हक वाला Artifact Registry (
$PRIMUS_ARTIFACT_REPOSITORY) बनाएं. इसमें वर्कलोड पब्लिश किया जाएगा. - कोड जनरेट करें और उसे ज़रूरी संसाधनों के नामों के साथ अपडेट करें. इस कोडलैब में इस्तेमाल किया गया वर्कलोड कोड यहां देखा जा सकता है.
- कोड बनाएं और उसे डॉकर इमेज में पैकेज करें. इससे जुड़ा Dockerfile यहां देखा जा सकता है.
- Docker इमेज को Primus Bank के मालिकाना हक वाले Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) में पब्लिश करें. - सेवा खाते को Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) के लिए$WORKLOAD_SERVICE_ACCOUNTपढ़ने की अनुमति दें.
./create_workload.sh
4. वर्कलोड को अनुमति देना और उन्हें चलाना
वर्कलोड को अनुमति देना
Primus Bank, वर्कलोड को अपने ग्राहक का डेटा ऐक्सेस करने की अनुमति देना चाहता है. यह अनुमति, यहां दिए गए संसाधनों के एट्रिब्यूट के आधार पर दी जाएगी:
- क्या: पुष्टि किया गया कोड
- कहां: एक ऐसा एनवायरमेंट जो सुरक्षित हो
- कौन: ऐसा ऑपरेटर जिस पर भरोसा किया जा सकता है
Primus, इन ज़रूरी शर्तों के आधार पर ऐक्सेस की नीति लागू करने के लिए, Workload Identity Federation का इस्तेमाल करता है.
Workload Identity Federation की मदद से, एट्रिब्यूट की शर्तें तय की जा सकती हैं. इन शर्तों से यह तय होता है कि कौनसी आइडेंटिटी, Workload Identity Pool (WIP) की मदद से पुष्टि कर सकती हैं. मेज़रमेंट दिखाने और नीति लागू करने के लिए, WIP में Attestation Verifier Service को Workload Identity Pool Provider के तौर पर जोड़ा जा सकता है.
क्लाउड संसाधनों को सेट अप करने के चरण के दौरान, Workload Identity Pool पहले ही बनाया जा चुका था. अब Primus Bank, नया OIDC Workload Identity Pool Provider बनाएगा. --attribute-condition में दी गई जानकारी से, वर्कलोड कंटेनर को ऐक्सेस करने की अनुमति मिलती है. इसके लिए:
- क्या:
$PRIMUS_ARTIFACT_REPOSITORYरिपॉज़िटरी में$WORKLOAD_IMAGE_NAMEका नया वर्शन अपलोड किया गया है. - कहां: गोपनीय स्पेस का ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट, गोपनीय स्पेस की पूरी तरह से काम करने वाली वीएम इमेज पर चल रहा है.
- किसने: Secundus Bank
$WORKLOAD_SERVICE_ACCOUNTका सेवा खाता.
gcloud config set project $PRIMUS_PROJECT_ID
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 &&
assertion.submods.container.image_reference == 'us-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
Primus Bank के लिए बनाए गए WIP की तरह ही, Secundus Bank चाहता है कि वह वर्कलोड को अपने ग्राहक के डेटा का ऐक्सेस दे. इसके लिए, वह इन बातों का ध्यान रखना चाहता है:
- क्या: वर्कलोड.
- कहां: गोपनीय स्पेस एनवायरमेंट में.
- किसने: वह खाता (
$WORKLOAD_SERVICE_ACCOUNT) जो वर्कलोड चला रहा है.
Primus Bank, image_reference दावे का इस्तेमाल करता है. इसमें इमेज टैग शामिल होता है. इससे यह तय किया जाता है कि बैंक को ऐक्सेस की अनुमति देनी चाहिए या नहीं. वे रिमोट रिपॉज़िटरी को कंट्रोल करते हैं. इसलिए, वे सिर्फ़ उन इमेज को टैग कर सकते हैं जिनसे उनका डेटा लीक नहीं होता.
इसकी तुलना में, Secundus Bank उस रिपॉज़िटरी को कंट्रोल नहीं करता जहां से उसे इमेज मिल रही है. इसलिए, वह सुरक्षित तरीके से यह अनुमान नहीं लगा सकता. इसके बजाय, वे image_digest के आधार पर वर्कलोड को ऐक्सेस करने की अनुमति देते हैं. image_reference के उलट, Primus Bank image_digest को किसी दूसरी इमेज पर रीडायरेक्ट नहीं कर सकता. ऐसा इसलिए, क्योंकि Secundus Bank ने पहले चरण में जिस इमेज की ऑडिट की थी, image_digest को उसी इमेज पर रीडायरेक्ट करना होगा.
Workload Identity Pool Provider बनाने से पहले, हम वर्कलोड कंटेनर इमेज के लिए image_digest इकट्ठा करेंगे. इसका इस्तेमाल, प्रोवाइडर की एट्रिब्यूट की शर्तों में किया जाएगा.
export WORKLOAD_IMAGE_DIGEST=$(gcloud artifacts docker images describe ${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG --format="value(image_summary.digest)" --project ${PRIMUS_PROJECT_ID})
gcloud config set project $SECUNDUS_PROJECT_ID
gcloud iam workload-identity-pools providers create-oidc $SECUNDUS_WIP_PROVIDER \
--location="global" \
--workload-identity-pool="$SECUNDUS_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 &&
assertion.submods.container.image_digest == '${WORKLOAD_IMAGE_DIGEST}' &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
वर्कलोड चलाना
इस चरण के तहत, Secundus Bank, Confidential Space पर वर्कलोड चलाएगा. इस वर्कलोड को Primus के वर्कलोड आइडेंटिटी पूल और Secundus के वर्कलोड आइडेंटिटी पूल से ऐक्सेस टोकन मिलेंगे. इनकी मदद से, यह Primus Bank और Secundus Bank के ग्राहक डेटा को पढ़ पाएगा और डिक्रिप्ट कर पाएगा.
ज़रूरी टीईई आर्ग्युमेंट, मेटाडेटा फ़्लैग का इस्तेमाल करके पास किए जाते हैं. वर्कलोड कंटेनर के लिए आर्ग्युमेंट, फ़्लैग के "tee-cmd" हिस्से का इस्तेमाल करके पास किए जाते हैं. वर्कलोड के एक्ज़ीक्यूशन का नतीजा $SECUNDUS_RESULT_STORAGE_BUCKET पर पब्लिश किया जाएगा.
पहला वर्कलोड चलाना
पहले वर्कलोड को लागू करने के दौरान, वर्कलोड कंटेनर के आर्ग्युमेंट में दी गई जगह के हिसाब से, Primus Bank के ग्राहकों की गिनती की जाएगी. नीचे दिए गए उदाहरण में दिखाया गया है कि पहला वर्कलोड, "count-location" कमांड को लागू करेगा और नतीजा $SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result में सेव किया जाएगा.
gcloud compute instances create ${WORKLOAD_VM1} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]""
नतीजे देखें
Secundus प्रोजेक्ट में, पहले वर्कलोड के नतीजे देखें. वर्कलोड को पूरा होने में तीन से पांच मिनट लगते हैं. इसके बाद, नतीजे क्लाउड स्टोरेज बकेट में उपलब्ध हो जाते हैं.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
नतीजा 3 होना चाहिए, क्योंकि सिऐटल के इतने ही लोग primus_customer_list.csv फ़ाइल में शामिल हैं!
दूसरा वर्कलोड चलाएं
दूसरे वर्कलोड को लागू करने के दौरान, हम Primus Bank और Secundus Bank के सामान्य ग्राहकों का पता लगाएंगे. नीचे दिए गए उदाहरण में दिखाया गया है कि दूसरा वर्कलोड, "list-common-customers" कमांड को लागू करेगा और नतीजा $SECUNDUS_RESULT_STORAGE_BUCKET/list-common-count पर सेव किया जाएगा.
gcloud compute instances create ${WORKLOAD_VM2} \
--project=${SECUNDUS_PROJECT_ID} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
नतीजे देखें
Secundus प्रोजेक्ट में, दूसरे वर्कलोड के नतीजे देखें. वर्कलोड को पूरा होने में तीन से पांच मिनट लगते हैं. इसके बाद, नतीजे क्लाउड स्टोरेज बकेट में उपलब्ध हो जाते हैं.
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
नतीजा यह सूची होनी चाहिए, क्योंकि ये Primus और Secundus Bank के सामान्य ग्राहक हैं.
आउटपुट:
Eric
Clinton
Ashley
Cooper
बिना अनुमति के वर्कलोड चलाना
Primus Bank और Secundus Bank के बीच हुआ कानूनी समझौता खत्म हो जाता है. इस समझौते के तहत, Secundus Bank को Primus Bank के डेटा का ऐक्सेस मिलता है. इसलिए, Primus Bank अपने एट्रिब्यूट की शर्त को अपडेट करता है, ताकि वह Tertius Bank के सेवा खाते वाले वीएम को अनुमति दे सके.
Primus Bank, Workload Identity Pool Provider में बदलाव करता है
$PRIMUS_PROJECT_ID में, Attestation Verifier Identity Provider के लिए स्थिति एट्रिब्यूट अपडेट करें, ताकि नई जगह पर वर्कलोड को अनुमति दी जा सके.
- प्रोजेक्ट को $PRIMUS_PROJECT_ID पर सेट करें.
gcloud config set project $PRIMUS_PROJECT_ID
- नीचे दिए गए निर्देश का इस्तेमाल करके, Tertius Bank के GCP प्रोजेक्ट-आईडी को एक्सपोर्ट करें. बाद में, Primus Bank इसका इस्तेमाल करके, Workload Identity Pool Provider की एट्रिब्यूट की शर्त को अपडेट करेगा. Primus बैंक, Secundus बैंक के वर्कलोड सेवा खातों को अनुमति देना बंद नहीं करेगा. अब यह Tertius Bank के वर्कलोड सेवा खातों को अनुमति देगा.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
- Workload Identity Pool में OIDC Provider को अपडेट करें. यहां
'$WORKLOAD_SERVICE_ACCOUNT@$SECUNDUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accountsको'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts.में बदल दिया गया है. Secundus Bank के वर्कलोड सेवा खाते को अनुमति देने के बजाय, अब Tertius Bank के वर्कलोड सेवा खाते को अनुमति दी जाएगी.
gcloud iam workload-identity-pools providers update-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 &&
assertion.submods.container.image_reference == '${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/$PRIMUS_PROJECT_ID/$PRIMUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG' &&
'$WORKLOAD_SERVICE_ACCOUNT@$TERTIUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"
वर्कलोड को फिर से चलाएं
जब Secundus Bank, ओरिजनल वर्कलोड को चलाने की कोशिश करता है, तो वह ऐसा नहीं कर पाता. गड़बड़ी देखने के लिए, नतीजों की ओरिजनल फ़ाइल और वीएम इंस्टेंस मिटाएं. इसके बाद, वर्कलोड को फिर से चलाने की कोशिश करें.
नतीजों की मौजूदा फ़ाइल और वीएम इंस्टेंस मिटाना
- प्रोजेक्ट को
$SECUNDUS_PROJECT_IDप्रोजेक्ट पर सेट करें.
gcloud config set project $SECUNDUS_PROJECT_ID
- नतीजों की फ़ाइल मिटाएं.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
- गोपनीय वीएम इंस्टेंस मिटाएं.
gcloud compute instances delete ${WORKLOAD_VM2} --zone=${SECUNDUS_PROJECT_ZONE}
बिना अनुमति के वर्कलोड चलाना:
gcloud compute instances create ${WORKLOAD_VM2} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE}\
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICE_ACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=${PRIMUS_PROJECT_REPOSITORY_REGION}-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"list-common-customers\",\"gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result\"]""
गड़बड़ी देखें
आपको वर्कलोड के नतीजों के बजाय, गड़बड़ी (The given credential is rejected by the attribute condition) दिखती है.
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
इसी तरह, अगर Primus Bank, Secundus Bank के सभी ग्राहकों की सूची को Primus Bank के मालिकाना हक वाले बकेट में भेजने के लिए, चुपके से वर्कलोड में बदलाव करता है, तो यह कोशिश नाकाम हो जाएगी. ऐसा इसलिए होगा, क्योंकि नुकसान पहुंचाने वाले वर्कलोड का डाइजेस्ट, Secundus Bank के वर्कलोड आइडेंटिटी पूल में अनुमति वाले इमेज डाइजेस्ट से अलग होगा.
5. क्लीन अप करें
इस कोडलैब के तहत बनाए गए संसाधनों को हटाने के लिए, यहां दी गई स्क्रिप्ट का इस्तेमाल किया जा सकता है. सफ़ाई की इस प्रोसेस के तहत, ये संसाधन मिटा दिए जाएंगे:
- Primus Bank के क्लाउड स्टोरेज बकेट का नाम डालें (
$PRIMUS_INPUT_STORAGE_BUCKET). - Primus Bank का सेवा खाता (
$PRIMUS_SERVICE_ACCOUNT). - Primus Bank की आर्टफ़ैक्ट रजिस्ट्री, जिसमें इमेज के सिग्नेचर (
$PRIMUS_COSIGN_REPOSITORY) मौजूद हैं. - Primus Bank(
$PRIMUS_WORKLOAD_IDENTITY_POOL) का Workload Identity Pool. - Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT) का वर्कलोड सेवा खाता. - Secundus Bank के क्लाउड स्टोरेज बकेट का नाम डालें (
$SECUNDUS_INPUT_STORAGE_BUCKET). - Secundus Bank (
$SECUNDUS_SERVICE_ACCOUNT) का सेवा खाता. - Secundus Bank की आर्टफ़ैक्ट रजिस्ट्री, जिसमें इमेज के सिग्नेचर (
$SECUNDUS_COSIGN_REPOSITORY) सेव किए जाते हैं. - Secundus Bank(
$SECUNDUS_WORKLOAD_IDENTITY_POOL) का Workload Identity Pool. - Secundus Bank (
$WORKLOAD_SERVICE_ACCOUNT) का वर्कलोड सेवा खाता. - वर्कलोड कंप्यूट इंस्टेंस.
- Secundus Bank (
$SECUNDUS_RESULT_STORAGE_BUCKET) का नतीजा सेव करने वाला बकेट. - प्राइमस बैंक (
$PRIMUS_ARTIFACT_REPOSITORY) की आर्टफ़ैक्ट रिपॉज़िटरी.
./cleanup.sh
अगर आपने एक्सप्लोर कर लिया है, तो कृपया अपना प्रोजेक्ट मिटा दें.
- Cloud Platform Console पर जाएं.
- वह प्रोजेक्ट चुनें जिसे बंद करना है. इसके बाद, सबसे ऊपर मौजूद ‘मिटाएं' पर क्लिक करें. इससे प्रोजेक्ट को मिटाने के लिए शेड्यूल कर दिया जाता है.
बधाई हो
बधाई हो, आपने कोडलैब पूरा कर लिया है!
आपने सीखा कि कॉन्फ़िडेंशियल स्पेस का इस्तेमाल करके, शेयर किए गए डेटा को सुरक्षित कैसे रखा जाता है. साथ ही, उसकी गोपनीयता को कैसे बनाए रखा जाता है.
आगे क्या करना है?
इस तरह के कुछ और कोडलैब देखें...
- हस्ताक्षर की गई कंटेनर इमेज के लिए कोडलैब
- मल्टी-पार्टी कंप्यूटेशन और कॉन्फ़िडेंशियल स्पेस का इस्तेमाल करके डिजिटल ऐसेट का लेन-देन कैसे करें
- गोपनीय स्पेस की मदद से गोपनीय डेटा का विश्लेषण करना
इस बारे में और पढ़ें
- क्या आपको अकेलापन महसूस हो रहा है? Confidential computing की मदद से डेटा को सुरक्षित रखना
- GCP में Confidential Computing
- गोपनीय स्पेस: निजता बनाए रखने के साथ मिलकर काम करने का नया तरीका
- Google और Intel, कॉन्फ़िडेंशियल कंप्यूटिंग को ज़्यादा सुरक्षित कैसे बनाते हैं
- निजता बनाम प्रोग्रेस - Google Cloud की कॉन्फ़िडेंशियल कंप्यूटिंग की मदद से सुरक्षा को बेहतर बनाना