भरोसेमंद स्पेस का कोडलैब

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

क्या आपको जीपीयू की मदद से तेज़ किए गए वर्कलोड की सुरक्षा और निजता को बेहतर बनाना है? इस कोडलैब में, ट्रस्टेड स्पेस की सुविधाओं के बारे में बताया जाएगा. यह सुविधा, संवेदनशील एआई/एमएल वर्कलोड के लिए, ऑपरेटर को अलग रखने और ऐक्सेलरेटर की सहायता उपलब्ध कराती है.

आज के समय में, अहम डेटा, मॉडल, और कुंजियों को सुरक्षित रखना पहले से कहीं ज़्यादा ज़रूरी हो गया है. ट्रस्टेड स्पेस, यह पक्का करके एक समाधान उपलब्ध कराता है कि आपके वर्कलोड, सुरक्षित और भरोसेमंद एनवायरमेंट में काम करें. इस एनवायरमेंट में, वर्कलोड ऑपरेटर के पास भी ऐक्सेस नहीं होता.

ट्रस्टेड स्पेस ये सुविधाएं उपलब्ध कराता है:

  • बेहतर निजता और सुरक्षा: ट्रस्टेड स्पेस, एक ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट उपलब्ध कराता है.इसमें आपके संवेदनशील ऐसेट (जैसे, मॉडल, अहम डेटा, और कुंजियां) सुरक्षित रहते हैं. साथ ही, क्रिप्टोग्राफ़िक सबूत भी उपलब्ध कराए जाते हैं.
  • ऑपरेटर को अलग रखना: ऑपरेटर के दखल से जुड़ी समस्याओं को खत्म करें. ट्रस्टेड स्पेस में, आपके वर्कलोड ऑपरेटर के पास भी ऐक्सेस नहीं होता. इससे वे एसएसएच नहीं कर पाते, डेटा ऐक्सेस नहीं कर पाते, सॉफ़्टवेयर इंस्टॉल नहीं कर पाते या आपके कोड में छेड़छाड़ नहीं कर पाते.
  • ऐक्सेलरेटर की सहायता: ट्रस्टेड स्पेस को, H100, A100, T4, और L4 जैसे जीपीयू सहित, कई तरह के हार्डवेयर ऐक्सेलरेटर के साथ आसानी से काम करने के लिए डिज़ाइन किया गया है. इससे यह पक्का होता है कि परफ़ॉर्मेंस के लिए अहम एआई/एमएल ऐप्लिकेशन आसानी से चलें.

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

  • ट्रस्टेड स्पेस की अहम सुविधाओं के बारे में जानकारी पाएं.
  • अपने एआई/एमएल वर्कलोड के अहम ऐसेट को सुरक्षित रखने के लिए, ट्रस्टेड स्पेस एनवायरमेंट को डिप्लॉय और कॉन्फ़िगर करने का तरीका जानें.

आपको क्या चाहिए

Primus Company की मदद से, संवेदनशील कोड जनरेट करने के प्रॉम्प्ट को सुरक्षित रखना

इस कोडलैब में, हम Primus कंपनी के तौर पर काम करेंगे. यह कंपनी, अपने कर्मचारियों के डेटा की निजता और सुरक्षा को प्राथमिकता देती है. Primus, कोड जनरेट करने वाला मॉडल डिप्लॉय करना चाहती है, ताकि उसके डेवलपर को कोडिंग के टास्क में मदद मिल सके. हालांकि, उसे अपने कर्मचारियों की ओर से सबमिट किए गए प्रॉम्प्ट की गोपनीयता को सुरक्षित रखने की चिंता है. ऐसा इसलिए, क्योंकि इन प्रॉम्प्ट में अक्सर संवेदनशील कोड स्निपेट, इंटरनल प्रोजेक्ट की जानकारी या मालिकाना हक वाले एल्गोरिदम शामिल होते हैं.

प्राइमस कंपनी, ऑपरेटर पर भरोसा क्यों नहीं करती?

Primus Corp, एक प्रतिस्पर्धी मार्केट में काम करती है. उसके कोडबेस में, अहम इंटलेक्चुअल प्रॉपर्टी शामिल है. इसमें मालिकाना हक वाले एल्गोरिदम और संवेदनशील कोड स्निपेट शामिल हैं, जो उसे प्रतिस्पर्धी बढ़त देते हैं. उसे वर्कलोड ऑपरेटरों की ओर से कॉर्पोरेट जासूसी की संभावना की चिंता है. इसके अलावा, कर्मचारियों के प्रॉम्प्ट में कोड के गोपनीय "Need To Know" हिस्से शामिल हो सकते हैं, जिन्हें Primus Corp सुरक्षित रखना चाहती है.

इस समस्या को हल करने के लिए, Primus Corp, कोड जनरेट करने के लिए मॉडल चलाने वाले इन्फ़रेंस सर्वर को अलग रखने के लिए, ट्रस्टेड स्पेस का इस्तेमाल करेगी. यह इस तरह से काम करता है:

  • प्रॉम्प्ट एन्क्रिप्शन: इन्फ़रेंस सर्वर को प्रॉम्प्ट भेजने से पहले, हर कर्मचारी उसे Google Cloud में Primus Corp की मैनेज की गई केएमएस कुंजी का इस्तेमाल करके एन्क्रिप्ट करेगा. इससे यह पक्का होता है कि सिर्फ़ ट्रस्टेड स्पेस एनवायरमेंट, जहां डिक्रिप्शन की कुंजी उपलब्ध है, उसे डिक्रिप्ट कर सकता है और प्लेन टेक्स्ट प्रॉम्प्ट को ऐक्सेस कर सकता है. असल में, क्लाइंट-साइड एन्क्रिप्शन को उपलब्ध लाइब्रेरी (जैसे, tink) से मैनेज किया जा सकता है. इस कोडलैब के हिस्से के तौर पर, हम एन्वेलप एन्क्रिप्शन के साथ इस सैंपल क्लाइंट ऐप्लिकेशन का इस्तेमाल करेंगे.
  • ऑपरेटर को अलग रखना: सिर्फ़ इन्फ़रेंस सर्वर, जो ट्रस्टेड स्पेस एनवायरमेंट में चल रहा है, के पास एन्क्रिप्शन के लिए इस्तेमाल की गई कुंजी का ऐक्सेस होगा. साथ ही, वह भरोसेमंद एनवायरमेंट में प्रॉम्प्ट को डिक्रिप्ट कर पाएगा. Workload Identity Pool, एन्क्रिप्शन की कुंजी के ऐक्सेस को सुरक्षित रखेगा. ट्रस्टेड स्पेस की आइसोलेशन की गारंटी की वजह से, वर्कलोड ऑपरेटर भी एन्क्रिप्शन के लिए इस्तेमाल की गई कुंजी और डिक्रिप्ट किए गए कॉन्टेंट को ऐक्सेस नहीं कर सकता.
  • ऐक्सेलरेटर का इस्तेमाल करके सुरक्षित इन्फ़रेंस: इन्फ़रेंस सर्वर, शील्ड की सुविधा वाली वीएम पर लॉन्च किया जाएगा (ट्रस्टेड स्पेस सेटअप के हिस्से के तौर पर). इससे यह पक्का होगा कि वर्कलोड इंस्टेंस, बूट या कर्नल-लेवल के मैलवेयर या रूटकिट से कंप्रोमाइज़ नहीं हुआ है. यह सर्वर, ट्रस्टेड स्पेस एनवायरमेंट में प्रॉम्प्ट को डिक्रिप्ट करता है. साथ ही, कोड जनरेट करने वाले मॉडल का इस्तेमाल करके इन्फ़रेंस करता है और जनरेट किए गए कोड को कर्मचारी को वापस भेजता है.

2. Cloud के संसाधन सेट अप करना

शुरू करने से पहले

  • इस कोडलैब के हिस्से के तौर पर इस्तेमाल की जाने वाली ज़रूरी स्क्रिप्ट पाने के लिए, नीचे दिए गए कमांड का इस्तेमाल करके इस रिपॉज़िटरी को क्लोन करें.
git clone https://github.com/GoogleCloudPlatform/confidential-space.git
  • इस कोडलैब के लिए डायरेक्ट्री बदलें.
cd confidential-space/codelabs/trusted_space_codelab/scripts
  • पक्का करें कि आपने ज़रूरी प्रोजेक्ट एनवायरमेंट वैरिएबल सेट किए हों, जैसा कि नीचे दिखाया गया है. GCP प्रोजेक्ट सेट अप करने के बारे में ज़्यादा जानकारी के लिए, कृपया यह कोडलैब देखें. प्रोजेक्ट आईडी पाने और यह जानने के लिए इसे देखें कि यह प्रोजेक्ट के नाम और प्रोजेक्ट नंबर से कैसे अलग है.
export PRIMUS_PROJECT_ID=<GCP project id of Primus>
gcloud services enable \
    cloudapis.googleapis.com \
    cloudresourcemanager.googleapis.com \
    cloudkms.googleapis.com \
    cloudshell.googleapis.com \
    container.googleapis.com \
    containerregistry.googleapis.com \
    iam.googleapis.com \
    confidentialcomputing.googleapis.com
  • ऊपर बताए गए संसाधन के नामों के लिए, वैरिएबल को वैल्यू असाइन करने के लिए, यह कमांड चलाएं. इन वैरिएबल की मदद से, ज़रूरत के हिसाब से संसाधन के नामों को पसंद के मुताबिक बनाया जा सकता है. साथ ही, अगर पहले से संसाधन बनाए गए हैं, तो उनका इस्तेमाल भी किया जा सकता है. (उदाहरण के लिए, export PRIMUS_SERVICE_ACCOUNT='my-service-account')
  1. Primus प्रोजेक्ट में, मौजूदा क्लाउड संसाधन के नामों के साथ ये वैरिएबल सेट किए जा सकते हैं. अगर वैरिएबल सेट है, तो Primus प्रोजेक्ट से, मौजूदा क्लाउड संसाधन का इस्तेमाल किया जाएगा. अगर वैरिएबल सेट नहीं है, तो क्लाउड संसाधन का नाम, प्रोजेक्ट के नाम से जनरेट किया जाएगा. साथ ही, उस नाम से एक नया क्लाउड संसाधन बनाया जाएगा. संसाधन के नामों के लिए, ये वैरिएबल इस्तेमाल किए जा सकते हैं:

$PRIMUS_PROJECT_REGION

वह इलाका जिसमें Primus Company के लिए, इलाके के हिसाब से संसाधन बनाए जाएंगे.

$PRIMUS_SERVICE_LOCATION

वह जगह जहां Primus Company के लिए संसाधन बनाए जाएंगे.

$PRIMUS_PROJECT_ZONE

वह ज़ोन जिसमें Primus Company के लिए, ज़ोन के हिसाब से संसाधन बनाए जाएंगे.

$PRIMUS_WORKLOAD_IDENTITY_POOL

क्लाउड संसाधनों को सुरक्षित रखने के लिए, Primus Company का Workload Identity Pool.

$PRIMUS_WIP_PROVIDER

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

$PRIMUS_SERVICEACCOUNT

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

$PRIMUS_ENC_KEY

केएमएस कुंजी का इस्तेमाल, Primus Company के कर्मचारियों की ओर से दिए गए प्रॉम्प्ट को एन्क्रिप्ट करने के लिए किया जाता है.

$PRIMUS_ENC_KEYRING

केएमएस कीरिंग. इसका इस्तेमाल, Primus Company के लिए एन्क्रिप्शन की कुंजी $PRIMUS_ENC_KEY बनाने के लिए किया जाएगा.

$PRIMUS_ENC_KEYVERSION

एन्क्रिप्शन की कुंजी $PRIMUS_ENC_KEY का केएमएस कुंजी वर्शन. डिफ़ॉल्ट वैल्यू 1 है. अगर किसी मौजूदा कुंजी का इस्तेमाल किया जा रहा है, जिसे पहले रोटेट किया गया था और जिसका वर्शन अपडेट किया गया है, तो इसे अपडेट करें.

$PRIMUS_ARTIFACT_REPOSITORY

आर्टफ़ैक्ट रिपॉज़िटरी. इसमें, वर्कलोड डॉकर इमेज पुश की जाएगी.

$PRIMUS_PROJECT_REPOSITORY_REGION

आर्टफ़ैक्ट रिपॉज़िटरी का इलाका. इसमें, पब्लिश की गई वर्कलोड डॉकर इमेज होगी.

$WORKLOAD_VM

वर्कलोड वीएम का नाम.

$WORKLOAD_IMAGE_NAME

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

$WORKLOAD_IMAGE_TAG

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

$WORKLOAD_SERVICEACCOUNT

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

$CLIENT_VM

क्लाइंट वीएम का नाम. इस पर, इन्फ़रेंस सर्वर का क्लाइंट ऐप्लिकेशन चलेगा.

$CLIENT_SERVICEACCOUNT

वह सेवा खाता जिसका इस्तेमाल $CLIENT_VM करता है

  • आपको प्रोजेक्ट $PRIMUS_PROJECT_ID के लिए, स्टोरेज एडमिन, Artifact Registry एडमिनिस्ट्रेटर, Cloud KMS एडमिन, सेवा खाता एडमिन, IAM में Workload Identity Pool के एडमिन की भूमिकाएं चाहिए होंगी. GCP कंसोल का इस्तेमाल करके, IAM की भूमिकाएं असाइन करने का तरीका जानने के लिए, यह गाइड देखें.
  • $PRIMUS_PROJECT_ID के लिए, संसाधन के नामों के लिए, अपने प्रोजेक्ट आईडी के आधार पर वैरिएबल के बाकी नामों को वैल्यू पर सेट करने के लिए, यह स्क्रिप्ट चलाएं.
source config_env.sh

Primus Company के संसाधन सेट अप करना

इस चरण के तहत, Primus के लिए ज़रूरी क्लाउड संसाधन सेट अप किए जाएंगे. Primus के लिए संसाधन सेट अप करने के लिए, यह स्क्रिप्ट चलाएं. स्क्रिप्ट चलाने के दौरान, ये संसाधन बनाए जाएंगे:

  • केएमएस में एन्क्रिप्शन की कुंजी ($PRIMUS_ENC_KEY) और कीरिंग ($PRIMUS_ENC_KEYRING), ताकि Primus Company के ग्राहक डेटा की फ़ाइल को एन्क्रिप्ट किया जा सके.
  • Workload Identity Pool ($PRIMUS_WORKLOAD_IDENTITY_POOL), ताकि इसके प्रोवाइडर में कॉन्फ़िगर किए गए एट्रिब्यूट की शर्तों के आधार पर दावों की पुष्टि की जा सके.
  • ऊपर बताए गए Workload Identity Pool ($PRIMUS_WORKLOAD_IDENTITY_POOL) से जुड़ा सेवा खाता ($PRIMUS_SERVICE_ACCOUNT). इसके पास, केएमएस कुंजी का इस्तेमाल करके डेटा को डिक्रिप्ट करने (roles/cloudkms.cryptoKeyDecrypter भूमिका का इस्तेमाल करके), केएमएस कुंजी का इस्तेमाल करके डेटा को एन्क्रिप्ट करने (roles/cloudkms.cryptoKeyEncrypter भूमिका का इस्तेमाल करके), क्लाउड स्टोरेज बकेट से डेटा पढ़ने (objectViewer भूमिका का इस्तेमाल करके), और सेवा खाते को Workload Identity Pool से कनेक्ट करने (roles/iam.workloadIdentityUser का इस्तेमाल करके) का ऐक्सेस है.
./setup_primus_resources.sh

3. वर्कलोड बनाना

वर्कलोड सेवा खाता बनाना

अब, ज़रूरी भूमिकाओं और अनुमतियों के साथ, वर्कलोड के लिए एक सेवा खाता बनाया जाएगा. Primus प्रोजेक्ट में, वर्कलोड सेवा खाता बनाने के लिए, यह स्क्रिप्ट चलाएं. इस सेवा खाते का इस्तेमाल, इन्फ़रेंस सर्वर चलाने वाली वीएम करेगी.

इस वर्कलोड सेवा खाते ($WORKLOAD_SERVICEACCOUNT) के पास ये भूमिकाएं होंगी:

  • पुष्टि करने वाला टोकन पाने के लिए, confidentialcomputing.workloadUser
  • Cloud Logging में लॉग लिखने के लिए, logging.logWriter.
./create_workload_service_account.sh

वर्कलोड बनाना

इस चरण के तहत, वर्कलोड डॉकर इमेज बनाई जाएगी. वर्कलोड, Primus Company बनाएगी. इस कोडलैब में इस्तेमाल किया गया वर्कलोड, Python कोड है. यह कोड, सार्वजनिक तौर पर उपलब्ध GCS बकेट (Vertex Model Garden) से codegemma मॉडल का इस्तेमाल करता है. वर्कलोड, codegemma मॉडल लोड करेगा और इन्फ़रेंस सर्वर लॉन्च करेगा. यह सर्वर, Primus के डेवलपर से मिले कोड जनरेट करने के अनुरोधों को पूरा करेगा.

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

वर्कलोड बनाने के लिए, यह स्क्रिप्ट चलाएं. इसमें ये चरण पूरे किए जा रहे हैं:

  • Primus के मालिकाना हक वाला Artifact Registry($PRIMUS_ARTIFACT_REGISTRY) बनाएं.
  • वर्कलोड कोड को, ज़रूरी संसाधन के नामों से अपडेट करें.
  • इन्फ़रेंस सर्वर वर्कलोड बनाएं और वर्कलोड कोड की डॉकर इमेज बनाने के लिए, Dockerfile बनाएं. यहां इस कोडलैब के लिए इस्तेमाल किया गया Dockerfile दिया गया है.
  • Primus के मालिकाना हक वाले Artifact Registry ($PRIMUS_ARTIFACT_REGISTRY) में, डॉकर इमेज बनाएं और पब्लिश करें.
  • $WORKLOAD_SERVICEACCOUNT को $PRIMUS_ARTIFACT_REGISTRY के लिए, पढ़ने की अनुमति दें. वर्कलोड कंटेनर को, Artifact Registry से वर्कलोड डॉकर इमेज पुल करने के लिए इसकी ज़रूरत होती है.
./create_workload.sh

आपके रेफ़रंस के लिए, यहां वर्कलोड का generate() तरीका दिया गया है. इसे इस कोडलैब में बनाया और इस्तेमाल किया गया है. पूरा वर्कलोड कोड यहां देखा जा सकता है.

def generate():
  try:
    data = request.get_json()
    ciphertext = base64.b64decode(data["ciphertext"])
    wrapped_dek = base64.b64decode(data["wrapped_dek"])
    unwrapped_dek_response = kms_client.decrypt(
        request={"name": key_name, "ciphertext": wrapped_dek}
    )
    unwrapped_dek = unwrapped_dek_response.plaintext
    f = Fernet(unwrapped_dek)
    plaintext = f.decrypt(ciphertext)
    prompt = plaintext.decode("utf-8")
    tokens = tokenizer(prompt, return_tensors="pt")
    outputs = model.generate(**tokens, max_new_tokens=128)
    generated_code = tokenizer.decode(outputs[0])
    generated_code_bytes = generated_code.encode("utf-8")

    response = f.encrypt(generated_code_bytes)
    ciphertext_base64 = base64.b64encode(response).decode("utf-8")
    response = {"generated_code_ciphertext": ciphertext_base64}
    return jsonify(response)

  except (ValueError, TypeError, KeyError) as e:
    return jsonify({"error": str(e)}), 500

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

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

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

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

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

Cloud के संसाधन सेट अप करने के चरण के तहत, Workload Identity Pool पहले ही बनाया जा चुका है. अब Primus, OIDC Workload Identity Pool Provider बनाएगा. तय किया गया --attribute-condition, वर्कलोड कंटेनर को ऐक्सेस करने की अनुमति देता है. इसके लिए, ये ज़रूरी शर्तें हैं:

  • क्या: $PRIMUS_ARTIFACT_REPOSITORY रिपॉज़िटरी में अपलोड किया गया, $WORKLOAD_IMAGE_NAME का नया वर्शन.
  • कहां: Confidential Space का ट्रस्टेड एक्ज़ीक्यूशन एनवायरमेंट, Confidential Space की पूरी तरह से काम करने वाली वीएम इमेज पर चल रहा है.
  • कौन: Primus का $WORKLOAD_SERVICE_ACCOUNT सेवा खाता.
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 iam workload-identity-pools providers create-oidc $PRIMUS_WIP_PROVIDER \
  --location="global" \
  --project="$PRIMUS_PROJECT_ID" \
  --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 == 'HARDENED_SHIELDED' && assertion.hwmodel == 'GCP_SHIELDED_VM' && 
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_SERVICEACCOUNT@$PRIMUS_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts"

ऊपर दिया गया कमांड, यह पुष्टि करता है कि वर्कलोड, ट्रस्टेड स्पेस एनवायरमेंट में चल रहा है. इसके लिए, यह जांच की जाती है कि hwmodel "GCP_SHIELDED_VM" पर सेट है या नहीं और swname "HARDENED_SHIELDED" पर सेट है या नहीं. इसके अलावा, इसमें वर्कलोड के लिए खास दावे शामिल होते हैं, जैसे कि image_digest और image_reference. इससे सुरक्षा बेहतर होती है और यह पक्का होता है कि चल रहे वर्कलोड की इंटिग्रिटी बनी रहे.

वर्कलोड चलाना

इस चरण के तहत, हम वर्कलोड को ट्रस्टेड स्पेस वीएम में चलाएंगे. इसमें एक ऐक्सेलरेटर अटैच होगा. ज़रूरी टीईई आर्ग्युमेंट, मेटाडेटा फ़्लैग का इस्तेमाल करके पास किए जाते हैं. वर्कलोड कंटेनर के लिए आर्ग्युमेंट, फ़्लैग के "tee-cmd" हिस्से का इस्तेमाल करके पास किए जाते हैं. वर्कलोड वीएम को Nvidia Tesla T4 GPU से लैस करने के लिए, हम --accelerator=type=nvidia-tesla-t4,count=1 फ़्लैग का इस्तेमाल करेंगे. इससे वीएम में एक जीपीयू अटैच हो जाएगा. हमें मेटाडेटा फ़्लैग में tee-install-gpu-driver=true भी शामिल करना होगा, ताकि सही जीपीयू ड्राइवर का इंस्टॉलेशन ट्रिगर किया जा सके.

gcloud compute instances create ${WORKLOAD_VM} \
  --accelerator=type=nvidia-tesla-t4,count=1 \
  --machine-type=n1-standard-16 \
  --shielded-secure-boot \
  --image-project=conf-space-images-preview \
  --image=confidential-space-0-gpupreview-796705b \
  --zone=${PRIMUS_PROJECT_ZONE} \
  --maintenance-policy=TERMINATE \
  --boot-disk-size=40 \
  --scopes=cloud-platform \
  --service-account=${WORKLOAD_SERVICEACCOUNT}@${PRIMUS_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-install-gpu-driver=true~tee-restart-policy=Never"

इन्फ़रेंस क्वेरी चलाना

वर्कलोड इन्फ़रेंस सर्वर के सफलतापूर्वक लॉन्च होने के बाद, अब Primus Company के कर्मचारी, इन्फ़रेंस सर्वर को कोड जनरेट करने के अनुरोध भेज सकते हैं.

इस कोडलैब के हिस्से के तौर पर, हम क्लाइंट ऐप्लिकेशन सेट अप करने के लिए, यह स्क्रिप्ट इस्तेमाल करेंगे. यह ऐप्लिकेशन, इन्फ़रेंस सर्वर के साथ इंटरैक्ट करेगा. क्लाइंट वीएम सेट अप करने के लिए, यह स्क्रिप्ट चलाएं.

./setup_client.sh

इन चरणों से पता चलता है कि क्लाइंट वीएम में एसएसएच कैसे किया जाता है और Python के वर्चुअल एनवायरमेंट में, सैंपल क्लाइंट ऐप्लिकेशन कैसे चलाया जाता है. इस उदाहरण ऐप्लिकेशन में, Fernet लाइब्रेरी के साथ एन्वेलप एन्क्रिप्शन का इस्तेमाल किया जाता है. हालांकि, ध्यान रखें कि अलग-अलग इस्तेमाल के मामलों के हिसाब से, एन्क्रिप्शन की खास लाइब्रेरी को अडैप्ट किया जा सकता है.

gcloud compute ssh ${CLIENT_VM} --zone=${PRIMUS_PROJECT_ZONE}

क्लाइंट वीएम में Python के वर्चुअल एनवायरमेंट को चालू करने और क्लाइंट ऐप्लिकेशन चलाने के लिए, ये कमांड चलाएं.

source venv/bin/activate
python3 inference_client.py

इस सैंपल क्लाइंट ऐप्लिकेशन के आउटपुट में, एन्क्रिप्शन और प्लेन टेक्स्ट प्रॉम्प्ट के अनुरोध दिखेंगे. साथ ही, उनके एन्क्रिप्ट और डिक्रिप्ट किए गए जवाब भी दिखेंगे.

5. साफ़ करना

यहां वह स्क्रिप्ट दी गई है जिसका इस्तेमाल, इस कोडलैब के हिस्से के तौर पर बनाए गए संसाधनों को साफ़ करने के लिए किया जा सकता है. साफ़ करने के दौरान, ये संसाधन मिटा दिए जाएंगे:

  • Primus का सेवा खाता ($PRIMUS_SERVICEACCOUNT).
  • Primus की एन्क्रिप्शन की कुंजी ($PRIMUS_ENC_KEY).
  • Primus की आर्टफ़ैक्ट रिपॉज़िटरी ($PRIMUS_ARTIFACT_REPOSITORY).
  • Primus का Workload Identity Pool ($PRIMUS_WORKLOAD_IDENTITY_POOL) और उसका प्रोवाइडर.
  • Primus का वर्कलोड सेवा खाता ($WORKLOAD_SERVICEACCOUNT).
  • वर्कलोड वीएम ($WORKLOAD_VM) और क्लाइंट वीएम ($CLIENT_VM).
./cleanup.sh

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

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