गोपनीय स्पेस की मदद से, शेयर किए गए डेटा को सुरक्षित करें

1. खास जानकारी

गोपनीय स्पेस में, कई लोगों के साथ डेटा शेयर करने और साथ मिलकर काम करने की सुविधा मिलती है. साथ ही, संगठनों को अपने डेटा की गोपनीयता बनाए रखने की सुविधा भी मिलती है. इसका मतलब है कि संगठन अपने डेटा पर कंट्रोल बनाए रखते हुए, एक-दूसरे के साथ मिलकर काम कर सकते हैं. साथ ही, अपने डेटा को बिना अनुमति के ऐक्सेस होने से सुरक्षित रख सकते हैं.

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

आपको इन चीज़ों की ज़रूरत होगी

आपको इनके बारे में जानकारी मिलेगी

  • गोपनीय स्पेस चलाने के लिए, ज़रूरी क्लाउड संसाधनों को कॉन्फ़िगर करने का तरीका
  • Confidential Space VM इमेज चलाने वाले Confidential VM में वर्कलोड चलाने का तरीका
  • वर्कलोड कोड (क्या), गोपनीय स्पेस के एनवायरमेंट (कहां), और वर्कलोड चलाने वाले खाते (कौन) के एट्रिब्यूट के आधार पर, सुरक्षित संसाधनों के ऐक्सेस की अनुमति देने का तरीका.

इस कोडलैब में, आपको Primus और Secundus बैंक के बीच एक गोपनीय स्पेस सेट अप करना होगा. इससे, दोनों बैंक एक-दूसरे के साथ अपने खातों की पूरी सूची शेयर किए बिना, अपने सामान्य ग्राहकों का पता लगा पाएंगे. इसके लिए, ये चरण अपनाएं:

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

fdef93a6868a976.png

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>
  • अपने प्रोजेक्ट के लिए बिलिंग चालू करें.
  • दोनों प्रोजेक्ट के लिए, गोपनीय कंप्यूटिंग एपीआई और नीचे दिए गए एपीआई चालू करें.
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 प्रोजेक्ट के उससे जुड़े मौजूदा क्लाउड संसाधन का इस्तेमाल किया जाएगा. अगर वैरिएबल सेट नहीं है, तो क्लाउड रिसॉर्स का नाम, project-name से जनरेट किया जाएगा. साथ ही, नया क्लाउड रिसॉर्स इनके हिस्से के तौर पर बनाया जाएगा:

$PRIMUS_INPUT_STORAGE_BUCKET

वह बकेट जिसमें Primus Bank के ग्राहक की डेटा फ़ाइल सेव होती है.

$PRIMUS_WORKLOAD_IDENTITY_POOL

Primus Bank का Workload Identity Pool (WIP), जो दावों की पुष्टि करता है.

$PRIMUS_WIP_PROVIDER

Primus Bank का Workload Identity Pool प्रोवाइडर, जिसमें Attestation Verifier Service से हस्ताक्षर किए गए टोकन के इस्तेमाल के लिए, ऑथराइज़ेशन की शर्त शामिल होती है.

$PRIMUS_SERVICE_ACCOUNT

Primus Bank का सेवा खाता, जिसका इस्तेमाल $PRIMUS_WORKLOAD_IDENTITY_POOL सुरक्षित संसाधनों को ऐक्सेस करने के लिए करता है. इस चरण में, उसके पास $PRIMUS_INPUT_STORAGE_BUCKET बकेट में सेव किया गया ग्राहक डेटा देखने की अनुमति होती है.

$PRIMUS_ENC_KEY

Primus Bank के लिए, $PRIMUS_INPUT_STORAGE_BUCKET में सेव किए गए डेटा को एन्क्रिप्ट करने के लिए इस्तेमाल की जाने वाली केएमएस कुंजी.

$PRIMUS_ENC_KEYRING

Primus Bank के लिए एन्क्रिप्शन पासकोड $PRIMUS_ENC_KEY बनाने के लिए इस्तेमाल की जाने वाली केएमएस की-रिंग.

$PRIMUS_ARTIFACT_REPOSITORY

आर्टफ़ैक्ट का वह कलेक्शन जहां वर्कलोड की Docker इमेज को पुश किया जाएगा.

  • Secundus प्रोजेक्ट में, मौजूदा क्लाउड रिसॉर्स के नामों के साथ ये वैरिएबल सेट किए जा सकते हैं. अगर वैरिएबल सेट है, तो Secundus प्रोजेक्ट के उससे जुड़े मौजूदा क्लाउड रिसॉर्स का इस्तेमाल किया जाएगा. अगर वैरिएबल सेट नहीं है, तो क्लाउड रिसॉर्स का नाम, project-name से जनरेट होगा. साथ ही, नया क्लाउड रिसॉर्स इनके हिस्से के तौर पर बनाया जाएगा:

$SECUNDUS_INPUT_STORAGE_BUCKET

Secundus Bank के ग्राहक से जुड़े डेटा की फ़ाइल को सेव करने वाली बकेट

$SECUNDUS_WORKLOAD_IDENTITY_POOL

Secundus Bank का Workload Identity Pool (WIP), जो दावों की पुष्टि करता है.

$SECUNDUS_WIP_PROVIDER

Secundus Bank का Workload Identity Pool प्रोवाइडर, जिसमें Attestation Verifier Service से हस्ताक्षर किए गए टोकन के इस्तेमाल के लिए, अनुमति की शर्त शामिल होती है.

$SECUNDUS_SERVICE_ACCOUNT

Secundus Bank का वह सेवा खाता जिसका इस्तेमाल $SECUNDUS_WORKLOAD_IDENTITY_POOL, सुरक्षित संसाधनों को ऐक्सेस करने के लिए करता है. इस चरण में, उसके पास $SECUNDUS_INPUT_STORAGE_BUCKET बकेट में सेव किया गया ग्राहक डेटा देखने की अनुमति होती है.

$SECUNDUS_ENC_KEY

केएमएस पासकोड, जिसका इस्तेमाल Secundus Bank के लिए $SECUNDUS_INPUT_STORAGE_BUCKET में सेव किए गए डेटा को एन्क्रिप्ट करने के लिए किया जाता है.

$SECUNDUS_ENC_KEYRING

केएमएस की-रिंग, जिसका इस्तेमाल Secundus Bank के लिए एन्क्रिप्शन पासकोड $SECUNDUS_ENV_KEY बनाने के लिए किया जाता है.

$SECUNDUS_RESULT_STORAGE_BUCKET

वह बकेट जिसमें वर्कलोड के नतीजे सेव किए जाते हैं.

$WORKLOAD_IMAGE_NAME

वर्कलोड कंटेनर इमेज का नाम.

$WORKLOAD_IMAGE_TAG

वर्कलोड कंटेनर इमेज का टैग.

$WORKLOAD_SERVICE_ACCOUNT

वह सेवा खाता जिसके पास वर्कफ़्लो चलाने वाले Confidential VM को ऐक्सेस करने की अनुमति है.

  • इस कोडलैब में कुछ आर्टफ़ैक्ट का इस्तेमाल किया गया है, जिनके बारे में यहां बताया गया है:
  • primus_customer_list.csv: वह फ़ाइल जिसमें Primus Bank के ग्राहक का डेटा है. यहां इस कोडलैब में इस्तेमाल की गई सैंपल फ़ाइल दी गई है.
  • secundus_customer_list.csv: वह फ़ाइल जिसमें Secundus Bank के ग्राहक का डेटा है. यहां इस कोडलैब में इस्तेमाल की गई सैंपल फ़ाइल दी गई है.
  • इन दोनों प्रोजेक्ट के लिए, आपके पास कुछ अनुमतियां होनी चाहिए:
  • $PRIMUS_PROJECT_ID के लिए, आपके पास Cloud KMS एडमिन, स्टोरेज एडमिन, आर्टफ़ैक्ट रजिस्ट्री एडमिन, सेवा खाते के एडमिन, और IAM में Workload Identity Pool के एडमिन के ऐक्सेस की अनुमतियां होनी चाहिए.
  • $SECUNDUS_PROJECT_ID के लिए, आपके पास Compute एडमिन, स्टोरेज एडमिन, सेवा खाते का एडमिन, Cloud KMS एडमिन, IAM Workload Identity Pool का एडमिन, और सुरक्षा एडमिन (ज़रूरी नहीं) की भूमिका होनी चाहिए.
  • बाकी बचे वैरिएबल के नामों को, संसाधन के नामों के लिए आपके प्रोजेक्ट आईडी के आधार पर वैल्यू पर सेट करने के लिए, यहां दी गई स्क्रिप्ट चलाएं.
source config_env.sh

Primus Bank के लिए क्लाउड संसाधन सेट अप करना

Primus Bank के लिए, ये क्लाउड संसाधन ज़रूरी हैं. Primus Bank के लिए संसाधन सेट अप करने के लिए, यह स्क्रिप्ट चलाएं:

  • Primus Bank के ग्राहक की एन्क्रिप्ट की गई डेटा फ़ाइल को सेव करने के लिए, Cloud Storage बकेट ($PRIMUS_INPUT_STORAGE_BUCKET).
  • Primus Bank के ग्राहक की डेटा फ़ाइल को एन्क्रिप्ट (सुरक्षित) करने के लिए, केएमएस में एन्क्रिप्शन पासकोड ($PRIMUS_ENC_KEY) और पासकोड की कुंजी ($PRIMUS_ENC_KEYRING).
  • Workload Identity Pool ($PRIMUS_WORKLOAD_IDENTITY_POOL), जो एट्रिब्यूट की उन शर्तों के आधार पर दावों की पुष्टि करता है जिन्हें उसकी सेवा देने वाली कंपनी ने कॉन्फ़िगर किया है.
  • ऊपर बताए गए वर्कलोड आइडेंटिटी पूल ($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 के संसाधनों को सेट अप करने के लिए, यह स्क्रिप्ट चलाएं. इस प्रोसेस के तहत, नीचे दिए गए संसाधन बनाए जाएंगे:

  • Secundus Bank के ग्राहक की एन्क्रिप्ट की गई डेटा फ़ाइल को सेव करने के लिए, Cloud Storage बकेट ($SECUNDUS_INPUT_STORAGE_BUCKET).
  • Secundus Bank की डेटा फ़ाइल को एन्क्रिप्ट (सुरक्षित) करने के लिए, केएमएस में एन्क्रिप्शन पासकोड ($SECUNDUS_ENC_KEY) और पासकोड की कुंजी ($SECUNDUS_ENC_KEYRING).
  • Workload Identity Pool ($SECUNDUS_WORKLOAD_IDENTITY_POOL), जो एट्रिब्यूट की उन शर्तों के आधार पर दावों की पुष्टि करता है जिन्हें उसकी सेवा देने वाली कंपनी ने कॉन्फ़िगर किया है.
  • ऊपर बताए गए वर्कलोड आइडेंटिटी पूल ($SECUNDUS_WORKLOAD_IDENTITY_POOL) से जुड़े सेवा खाते ($SECUNDUS_SERVICE_ACCOUNT) के पास, केएमएस कुंजी (roles/cloudkms.cryptoKeyDecrypter भूमिका का इस्तेमाल करके) का इस्तेमाल करके डेटा को डिक्रिप्ट करने, क्लाउड स्टोरेज बकेट से डेटा पढ़ने (objectViewer भूमिका का इस्तेमाल करके), और सेवा खाते को वर्कलोड आइडेंटिटी पूल से कनेक्ट करने (roles/iam.workloadIdentityUser भूमिका का इस्तेमाल करके) का ऐक्सेस होता है.
  • Secundus Bank के वर्कलोड को लागू करने के नतीजे को सेव करने के लिए, Cloud Storage बकेट ($SECUNDUS_RESULT_STORAGE_BUCKET).
./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) बनाएं, जहां वर्कलोड पब्लिश किया जाएगा.
  • कोड जनरेट करें और उसे ज़रूरी संसाधनों के नामों से अपडेट करें. इस कोडलैब में इस्तेमाल किया गया वर्कलोड कोड यहां देखा जा सकता है.
  • कोड बनाएं और उसे Docker इमेज में पैकेज करें. इससे जुड़ा Dockerfile यहां देखा जा सकता है.
  • Primus Bank के मालिकाना हक वाली आर्टफ़ैक्ट रजिस्ट्री ($PRIMUS_ARTIFACT_REGISTRY) में Docker इमेज पब्लिश करें.
  • सेवा खाते $WORKLOAD_SERVICE_ACCOUNT को Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY) के लिए, पढ़ने की अनुमति दें.
./create_workload.sh

4. वर्कलोड को अनुमति देना और चलाना

वर्कलोड को अनुमति देना

Primus Bank को अपने ग्राहक का डेटा ऐक्सेस करने के लिए, वर्कलोड को अनुमति देनी है. इसके लिए, उसे इन संसाधनों के एट्रिब्यूट का इस्तेमाल करना होगा:

  • क्या: पुष्टि किया गया कोड
  • कहां: ऐसा माहौल जो सुरक्षित हो
  • कौन: भरोसेमंद ऑपरेटर

Primus, इन ज़रूरी शर्तों के आधार पर ऐक्सेस नीति लागू करने के लिए, Workload Identity फ़ेडरेशन का इस्तेमाल करता है.

Workload Identity फ़ेडरेशन की मदद से, एट्रिब्यूट की शर्तें तय की जा सकती हैं. इन शर्तों से यह तय होता है कि कौनसी आइडेंटिटी Workload Identity Pool (WIP) की मदद से पुष्टि कर सकती हैं. मेज़रमेंट दिखाने और नीति लागू करने के लिए, Attestation Verifier Service को WIP में वर्कलोड आइडेंटिटी पूल की सेवा देने वाली कंपनी के तौर पर जोड़ा जा सकता है.

क्लाउड संसाधनों को सेट अप करने के दौरान, Workload Identity Pool पहले ही बना दिया गया था. अब Primus Bank, OIDC वाला नया Workload Identity Pool Provider बनाएगा. तय किया गया --attribute-condition, वर्कलोड कंटेनर को ऐक्सेस करने की अनुमति देता है. इसके लिए:

  • क्या: $PRIMUS_ARTIFACT_REPOSITORY रिपॉज़िटरी में अपलोड किया गया नया $WORKLOAD_IMAGE_NAME.
  • कहां: Confidential Space का ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट, पूरी तरह से काम करने वाली Confidential Space VM इमेज पर चल रहा है.
  • कौन: 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 को बदल नहीं सकता. Primus Bank, image_digest को उस इमेज से अलग नहीं कर सकता जिसकी जांच Secundus Bank ने पिछले चरण में की थी.

वर्कलोड आइडेंटिटी पूल प्रोवाइडर बनाने से पहले, हम वर्कलोड कंटेनर इमेज के लिए 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, गोपनीय स्पेस पर वर्कलोड चलाएगा. इस वर्कलोड को 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 को उसके डेटा का ऐक्सेस दिया गया था. इसलिए, Primus Bank अपने एट्रिब्यूट की शर्त को अपडेट करता है, ताकि अपने नए पार्टनर Tertius Bank के सेवा खाते वाले VM को अनुमति दी जा सके.

Primus Bank, Workload Identity Pool Provider में बदलाव करता है

$PRIMUS_PROJECT_ID में, किसी नई जगह पर वर्कलोड को अनुमति देने के लिए, पुष्टि करने वाले आइडेंटिटी प्रोवाइडर के एट्रिब्यूट की शर्त अपडेट करें.

  1. प्रोजेक्ट को $PRIMUS_PROJECT_ID पर सेट करें.
gcloud config set project $PRIMUS_PROJECT_ID
  1. नीचे दिए गए निर्देश का इस्तेमाल करके, Tertius Bank का GCP प्रोजेक्ट आईडी एक्सपोर्ट करें. बाद में, Primus Bank इसका इस्तेमाल, Workload Identity Pool Provider के एट्रिब्यूट की शर्त को अपडेट करने के लिए करेगा. Primus बैंक, Secundus बैंक के वर्कलोड सेवा-खातों को अनुमति देना बंद नहीं करेगा. अब इसमें Tertius Bank के वर्कलोड सेवा खातों को अनुमति दी जाएगी.
export TERTIUS_PROJECT_ID=<GCP project-id of Tertius Bank>
  1. Workload Identity Pool में OIDC प्रोवाइडर को अपडेट करें. यहां '$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 ओरिजनल वर्कलोड को चलाने की कोशिश करता है, तो वह काम नहीं करता. गड़बड़ी देखने के लिए, नतीजों की ओरिजनल फ़ाइल और वीएम इंस्टेंस मिटाएं. इसके बाद, वर्कलोड को फिर से चलाने की कोशिश करें.

मौजूदा नतीजों की फ़ाइल और VM इंस्टेंस मिटाना

  1. प्रोजेक्ट को $SECUNDUS_PROJECT_ID प्रोजेक्ट पर सेट करें.
gcloud config set project $SECUNDUS_PROJECT_ID
  1. नतीजों की फ़ाइल मिटाएं.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
  1. गोपनीय VM इंस्टेंस मिटाएं.
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)) की Cloud Storage बकेट डालें.
  • 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)) की Cloud Storage बकेट डालें.
  • Secundus Bank ($SECUNDUS_SERVICE_ACCOUNT) का सेवा खाता.
  • Secundus Bank की आर्टफ़ैक्ट रजिस्ट्री, जिसमें इमेज हस्ताक्षर ($SECUNDUS_COSIGN_REPOSITORY) मौजूद हैं.
  • Secundus Bank($SECUNDUS_WORKLOAD_IDENTITY_POOL) का वर्कलोड आइडेंटिटी पूल.
  • Secundus Bank ($WORKLOAD_SERVICE_ACCOUNT) का वर्कलोड सेवा खाता.
  • वर्कलोड कंप्यूट इंस्टेंस.
  • Secundus Bank ($SECUNDUS_RESULT_STORAGE_BUCKET) का नतीजा स्टोर करने वाला बकेट.
  • Primus Bank ($PRIMUS_ARTIFACT_REPOSITORY) का आर्टफ़ैक्ट रिपॉज़िटरी.
./cleanup.sh

अगर आपने एक्सप्लोर कर लिया है, तो कृपया अपना प्रोजेक्ट मिटाएं.

  • Cloud Platform Console पर जाएं.
  • वह प्रोजेक्ट चुनें जिसे आपको बंद करना है. इसके बाद, सबसे ऊपर मौजूद 'मिटाएं' पर क्लिक करें: इससे प्रोजेक्ट को मिटाने के लिए शेड्यूल किया जाता है.

बधाई हो

बधाई हो, आपने कोडलैब पूरा कर लिया है!

आपने जाना कि गोपनीय स्पेस का इस्तेमाल करके, शेयर किए गए डेटा को सुरक्षित कैसे रखा जा सकता है.

आगे क्या करना है?

इस तरह के कुछ अन्य कोडलैब देखें...

इसके बारे में और पढ़ें