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

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

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

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

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

आपको क्या सीखने को मिलेगा

  • कॉन्फ़िडेंशियल स्पेस को चलाने के लिए, ज़रूरी क्लाउड संसाधनों को कॉन्फ़िगर करने का तरीका
  • 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 के लिए चौथे चरण में बताए गए हैं.

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

$PRIMUS_INPUT_STORAGE_BUCKET

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

$PRIMUS_WORKLOAD_IDENTITY_POOL

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

$PRIMUS_WIP_PROVIDER

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

$PRIMUS_SERVICE_ACCOUNT

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

$PRIMUS_ENC_KEY

प्राइमस बैंक के लिए, $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 Provider, जिसमें 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 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 के लिए स्थिति एट्रिब्यूट अपडेट करें, ताकि नई जगह पर वर्कलोड को अनुमति दी जा सके.

  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 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, ओरिजनल वर्कलोड को चलाने की कोशिश करता है, तो वह ऐसा नहीं कर पाता. गड़बड़ी देखने के लिए, नतीजों की ओरिजनल फ़ाइल और वीएम इंस्टेंस मिटाएं. इसके बाद, वर्कलोड को फिर से चलाने की कोशिश करें.

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

  1. प्रोजेक्ट को $SECUNDUS_PROJECT_ID प्रोजेक्ट पर सेट करें.
gcloud config set project $SECUNDUS_PROJECT_ID
  1. नतीजों की फ़ाइल मिटाएं.
gsutil rm gs://$SECUNDUS_RESULT_STORAGE_BUCKET/list-common-result
  1. गोपनीय वीएम इंस्टेंस मिटाएं.
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 पर जाएं.
  • वह प्रोजेक्ट चुनें जिसे बंद करना है. इसके बाद, सबसे ऊपर मौजूद ‘मिटाएं' पर क्लिक करें. इससे प्रोजेक्ट को मिटाने के लिए शेड्यूल कर दिया जाता है.

बधाई हो

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

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

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

इस तरह के कुछ और कोडलैब देखें...

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