1. खास जानकारी
क्या आपको जीपीयू की मदद से तेज़ी से प्रोसेस होने वाले वर्कलोड की सुरक्षा और निजता को बेहतर बनाना है? इस कोडलैब में, आपको भरोसेमंद स्पेस की सुविधाओं के बारे में बताया जाएगा. यह एक ऐसा ऑफ़र है जो आपके संवेदनशील एआई/एमएल वर्कलोड के लिए, ऑपरेटर को अलग रखने और ऐक्सलरेटर की सुविधा देने में मदद करता है.
कीमती डेटा, मॉडल, और कुंजियों को सुरक्षित रखना अब पहले से कहीं ज़्यादा ज़रूरी हो गया है. Trusted Space, यह पक्का करके एक समाधान देता है कि आपके वर्कलोड, सुरक्षित और भरोसेमंद एनवायरमेंट में काम करें. इस एनवायरमेंट में, वर्कलोड ऑपरेटर के पास भी ऐक्सेस नहीं होता.
भरोसेमंद स्पेस की सुविधा के तहत ये काम किए जा सकते हैं:
- बेहतर निजता और सुरक्षा: Trusted Space, एक भरोसेमंद एक्ज़ीक्यूशन एनवायरमेंट उपलब्ध कराता है.इसमें आपकी संवेदनशील ऐसेट (जैसे, मॉडल, अहम डेटा, और कुंजियां) सुरक्षित रहती हैं. साथ ही, क्रिप्टोग्राफ़िक सबूत से इनकी पुष्टि की जाती है.
- ऑपरेटर आइसोलेशन: ऑपरेटर के दखल से जुड़ी समस्याओं को दूर करें. भरोसेमंद स्पेस में, आपके वर्कलोड ऑपरेटर के पास भी ऐक्सेस नहीं होता. इससे उन्हें एसएसएच करने, डेटा ऐक्सेस करने, सॉफ़्टवेयर इंस्टॉल करने या आपके कोड में बदलाव करने से रोका जा सकता है.
- ऐक्सलरेटर सपोर्ट: Trusted Space को अलग-अलग तरह के हार्डवेयर ऐक्सलरेटर के साथ आसानी से काम करने के लिए डिज़ाइन किया गया है. इनमें H100, A100, T4, और L4 जैसे जीपीयू शामिल हैं. इससे यह पक्का होता है कि परफ़ॉर्मेंस के लिए ज़रूरी एआई/एमएल ऐप्लिकेशन आसानी से चलें.
आपको क्या सीखने को मिलेगा
- Trusted Space की मुख्य सुविधाओं के बारे में जानें.
- अपने एआई/एमएल वर्कलोड की अहम ऐसेट को सुरक्षित रखने के लिए, भरोसेमंद स्पेस एनवायरमेंट को डिप्लॉय और कॉन्फ़िगर करने का तरीका जानें.
आपको इन चीज़ों की ज़रूरत होगी
- Google Cloud Platform प्रोजेक्ट
- Google Compute Engine और ऐक्सलरेटर की बुनियादी जानकारी.
- सेवा खातों, कुंजी मैनेजमेंट, वर्कलोड आइडेंटिटी फ़ेडरेशन, और एट्रिब्यूट की शर्तों के बारे में बुनियादी जानकारी.
- कंटेनर और Artifact Registry की बुनियादी जानकारी
Primus Company की मदद से, कोड जनरेट करने के लिए इस्तेमाल किए जाने वाले संवेदनशील प्रॉम्प्ट को सुरक्षित रखना
इस कोडलैब में, हम Primus कंपनी की भूमिका निभाएंगे. यह कंपनी, अपने कर्मचारियों के डेटा की निजता और सुरक्षा को प्राथमिकता देती है. Primus, कोड जनरेट करने वाले मॉडल को डिप्लॉय करना चाहता है, ताकि वह अपने डेवलपर को कोडिंग से जुड़े टास्क में मदद कर सके. हालांकि, उन्हें अपने कर्मचारियों की ओर से सबमिट किए गए प्रॉम्प्ट की गोपनीयता बनाए रखने की चिंता है. ऐसा इसलिए, क्योंकि इन प्रॉम्प्ट में अक्सर संवेदनशील कोड स्निपेट, इंटरनल प्रोजेक्ट की जानकारी या मालिकाना हक वाले एल्गोरिदम शामिल होते हैं.
प्राइमस कंपनी, ऑपरेटर पर भरोसा क्यों नहीं करती है ?
Primus Corp, बहुत ज़्यादा प्रतिस्पर्धी बाज़ार में काम करती है. उनके कोडबेस में अहम बौद्धिक संपत्ति होती है. इसमें मालिकाना हक वाले एल्गोरिदम और संवेदनशील कोड स्निपेट शामिल होते हैं, जो उन्हें प्रतिस्पर्धी बढ़त देते हैं. उन्हें वर्कलोड ऑपरेटरों की ओर से कॉर्पोरेट जासूसी किए जाने की आशंका है. इसके अलावा, कर्मचारी के प्रॉम्प्ट में कोड के ऐसे गोपनीय "जानना ज़रूरी है" हिस्से शामिल हो सकते हैं जिन्हें Primus Corp सुरक्षित रखना चाहता है.
इस समस्या को हल करने के लिए, Primus Corp, Trusted Space का इस्तेमाल करेगा. इससे कोड जनरेट करने के लिए मॉडल चलाने वाले इन्फ़रेंस सर्वर को अलग किया जा सकेगा. यह इस तरह से काम करता है:
- प्रॉम्प्ट एन्क्रिप्शन: हर कर्मचारी, अनुमान लगाने वाले सर्वर को प्रॉम्प्ट भेजने से पहले, उसे Google Cloud में Primus Corp की ओर से मैनेज की जाने वाली KMS कुंजी का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) करेगा. इससे यह पक्का होता है कि सिर्फ़ भरोसेमंद स्पेस एनवायरमेंट, जहां डिक्रिप्शन की कुंजी उपलब्ध है, इसे डिक्रिप्ट कर सकता है और टेक्स्ट वाले प्रॉम्प्ट को ऐक्सेस कर सकता है. असल दुनिया में, क्लाइंट-साइड एन्क्रिप्शन को उपलब्ध लाइब्रेरी (जैसे, tink) से मैनेज किया जा सकता है. इस कोडलैब के हिस्से के तौर पर, हम एनवलप एन्क्रिप्शन के साथ इस सैंपल क्लाइंट ऐप्लिकेशन का इस्तेमाल करेंगे.
- ऑपरेटर आइसोलेशन: एन्क्रिप्शन के लिए इस्तेमाल की गई कुंजी को सिर्फ़ भरोसेमंद स्पेस एनवायरमेंट में चल रहे इन्फ़रेंस सर्वर के पास ऐक्सेस होगा. साथ ही, वह भरोसेमंद एनवायरमेंट में प्रॉम्प्ट को डिक्रिप्ट कर पाएगा. एन्क्रिप्शन कुंजी का ऐक्सेस, Workload Identity Pool की मदद से सुरक्षित किया जाएगा. भरोसेमंद स्पेस में डेटा को अलग रखने की गारंटी दी जाती है. इसलिए, वर्कलोड ऑपरेटर भी एन्क्रिप्शन के लिए इस्तेमाल की गई कुंजी और डिक्रिप्ट किए गए कॉन्टेंट को ऐक्सेस नहीं कर सकता.
- ऐक्सलरेटर का इस्तेमाल करके सुरक्षित इन्फ़रेंस: इन्फ़रेंस सर्वर को शील्डेड वीएम पर लॉन्च किया जाएगा. यह Trusted space setup का हिस्सा है. इससे यह पक्का किया जा सकेगा कि वर्कलोड इंस्टेंस से बूट- या कर्नल-लेवल के मैलवेयर या रूटकिट से समझौता नहीं किया गया है. यह सर्वर, भरोसेमंद स्पेस एनवायरमेंट में प्रॉम्प्ट को डिक्रिप्ट करता है. साथ ही, कोड जनरेट करने वाले मॉडल का इस्तेमाल करके अनुमान लगाता है और जनरेट किए गए कोड को कर्मचारी को वापस भेजता है.
2. क्लाउड संसाधन सेट अप करना
शुरू करने से पहले
- इस कोडलैब में इस्तेमाल की जाने वाली ज़रूरी स्क्रिप्ट पाने के लिए, नीचे दिए गए निर्देश का इस्तेमाल करके इस रिपॉज़िटरी को क्लोन करें.
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>
- अपने प्रोजेक्ट के लिए, बिलिंग की सुविधा चालू करें.
- दोनों प्रोजेक्ट के लिए, Confidential Computing API और यहां दिए गए एपीआई चालू करें.
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')
- Primus प्रोजेक्ट में मौजूद क्लाउड संसाधन के नामों के साथ, यहां दिए गए वैरिएबल सेट किए जा सकते हैं. अगर वैरिएबल सेट है, तो Primus प्रोजेक्ट के मौजूदा क्लाउड संसाधन का इस्तेमाल किया जाएगा. अगर वैरिएबल सेट नहीं है, तो क्लाउड रिसोर्स का नाम, प्रोजेक्ट के नाम से जनरेट होगा. साथ ही, उस नाम से एक नया क्लाउड रिसोर्स बनाया जाएगा. संसाधन के नामों के लिए, इन वैरिएबल का इस्तेमाल किया जा सकता है:
| वह क्षेत्र जहां Primus कंपनी के लिए रीजनल संसाधन बनाए जाएंगे. |
| वह जगह जहां Primus कंपनी के लिए संसाधन बनाए जाएंगे. |
| वह ज़ोन जिसके तहत Primus कंपनी के लिए ज़ोनल संसाधन बनाए जाएंगे. |
| क्लाउड संसाधनों को सुरक्षित रखने के लिए, Primus कंपनी का Workload Identity Pool. |
| Primus कंपनी का Workload Identity Pool Provider. इसमें Attestation Verifier Service से साइन किए गए टोकन इस्तेमाल करने के लिए, ऑथराइज़ेशन की शर्त शामिल है. |
| Primus कंपनी का सेवा खाता, जिसका इस्तेमाल |
| केएमएस कुंजी का इस्तेमाल, Primus कंपनी के कर्मचारियों की ओर से दिए गए प्रॉम्प्ट को एन्क्रिप्ट (सुरक्षित) करने के लिए किया जाता है. |
| यह केएमएस कीरिंग है. इसका इस्तेमाल, Primus कंपनी के लिए एन्क्रिप्शन की � बनाने के लिए किया जाएगा. |
| एन्क्रिप्ट करने की कुंजी |
| आर्टफ़ैक्ट रिपॉज़िटरी, जहां वर्कलोड की डॉकर इमेज को पुश किया जाएगा. |
| आर्टफ़ैक्ट रिपॉज़िटरी का वह क्षेत्र जिसमें पब्लिश की गई वर्कलोड डॉकर इमेज होगी. |
| वर्कलोड वीएम का नाम. |
| वर्कलोड की डॉकर इमेज का नाम. |
| वर्कलोड कंटेनर इमेज का टैग. |
| वह सेवा खाता जिसके पास, वर्कलोड चलाने वाले Confidential VM को ऐक्सेस करने की अनुमति है. |
| क्लाइंट वीएम का नाम, जो अनुमान लगाने वाले सर्वर के क्लाइंट ऐप्लिकेशन को चलाएगा. |
|
|
- आपको प्रोजेक्ट
$PRIMUS_PROJECT_IDके लिए, स्टोरेज एडमिन, Artifact Registry एडमिन, क्लाउड केएमएस (KMS) एडमिन, सेवा खाते के एडमिन, और IAM में Workload Identity Pool के एडमिन की भूमिकाएं असाइन करनी होंगी. GCP Console का इस्तेमाल करके, IAM भूमिकाएं असाइन करने के बारे में जानने के लिए, यह गाइड पढ़ें. $PRIMUS_PROJECT_IDके लिए, यहां दी गई स्क्रिप्ट चलाएं. इससे संसाधन के नामों के लिए, आपके प्रोजेक्ट आईडी के आधार पर बाकी बचे वैरिएबल के नाम सेट हो जाएंगे.
source config_env.sh
Primus Company के संसाधन सेट अप करना
इस चरण के तहत, आपको Primus के लिए ज़रूरी क्लाउड संसाधन सेट अप करने होंगे. Primus के लिए संसाधन सेट अप करने के लिए, यह स्क्रिप्ट चलाएं. स्क्रिप्ट को लागू करने के दौरान, ये संसाधन बनाए जाएंगे:
- Primus कंपनी की ग्राहक डेटा फ़ाइल को एन्क्रिप्ट (सुरक्षित) करने के लिए, 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भूमिका का इस्तेमाल करके), केएमएस कुंजी का इस्तेमाल करके डेटा को एन्क्रिप्ट करना (roles/cloudkms.cryptoKeyEncrypterभूमिका का इस्तेमाल करके), क्लाउड स्टोरेज बकेट से डेटा पढ़ना (objectViewerभूमिका का इस्तेमाल करके), और सेवा खाते को वर्कलोड आइडेंटिटी पूल से कनेक्ट करना (roles/iam.workloadIdentityUserभूमिका का इस्तेमाल करके).
./setup_primus_resources.sh
3. वर्कलोड बनाना
वर्कलोड सेवा खाता बनाना
अब, आपको ज़रूरी भूमिकाओं और अनुमतियों के साथ वर्कलोड के लिए एक सेवा खाता बनाना होगा. Primus प्रोजेक्ट में वर्कलोड सेवा खाता बनाने के लिए, यहां दी गई स्क्रिप्ट चलाएं. इस सेवा खाते का इस्तेमाल, अनुमान लगाने वाले सर्वर को चलाने वाले वीएम के लिए किया जाएगा.
इस वर्कलोड सेवा खाते ($WORKLOAD_SERVICEACCOUNT) के पास ये भूमिकाएं होंगी:
confidentialcomputing.workloadUserका इस्तेमाल करके, पुष्टि करने वाला टोकन पाएंlogging.logWriterCloud Logging में लॉग लिखने के लिए.
./create_workload_service_account.sh
वर्कलोड बनाना
इस चरण के तहत, आपको वर्कलोड की डॉकर इमेज बनानी होगी. वर्कलोड, Primus कंपनी ने बनाया है. इस कोडलैब में इस्तेमाल किया गया वर्कलोड, Python कोड है. यह सार्वजनिक तौर पर उपलब्ध GCS बकेट (Vertex Model Garden का) से codegemma मॉडल का इस्तेमाल करता है. Workload, codegemma मॉडल को लोड करेगा और इन्फ़रेंस सर्वर लॉन्च करेगा. यह सर्वर, Primus के डेवलपर से मिले कोड जनरेट करने के अनुरोधों को पूरा करेगा.
कोड जनरेट करने के अनुरोध पर, Workload को रैप किया गया DEK और एन्क्रिप्ट किया गया प्रॉम्प्ट मिलेगा. इसके बाद, वर्कलोड डीईके को डिक्रिप्ट करने के लिए, KMS API कॉल करेगा. इसके बाद, वह इस डीईके का इस्तेमाल करके प्रॉम्प्ट को डिक्रिप्ट करेगा. एन्क्रिप्शन कुंजियों (DEK के लिए) को वर्कलोड आइडेंटिटी पूल के ज़रिए सुरक्षित किया जाएगा. साथ ही, ऐक्सेस उन वर्कलोड को दिया जाएगा जो एट्रिब्यूट की शर्तों को पूरा करते हैं. इन एट्रिब्यूट की शर्तों के बारे में, वर्कलोड को अनुमति देने से जुड़े अगले सेक्शन में ज़्यादा जानकारी दी गई है. डिक्रिप्ट किए गए प्रॉम्प्ट को इन्फ़रेंस सर्वर को भेजने के बाद, यह सर्वर लोड किए गए मॉडल का इस्तेमाल करके कोड जनरेट करेगा और जवाब वापस भेज देगा.
नीचे दी गई स्क्रिप्ट चलाकर, ऐसा वर्कलोड बनाएं जिसमें ये चरण पूरे किए जा रहे हों:
- Primus के मालिकाना हक वाला Artifact Registry(
$PRIMUS_ARTIFACT_REGISTRY) बनाएं. - ज़रूरी संसाधनों के नाम के साथ वर्कलोड कोड अपडेट करें.
- अनुमान लगाने वाले सर्वर का वर्कलोड बनाएं. साथ ही, वर्कलोड कोड की Docker इमेज बनाने के लिए Dockerfile बनाएं. इस कोडलैब के लिए इस्तेमाल की गई Dockerfile यहां दी गई है.
- Primus के मालिकाना हक वाले Artifact Registry (
$PRIMUS_ARTIFACT_REGISTRY) में Docker इमेज बनाएं और उसे पब्लिश करें. $PRIMUS_ARTIFACT_REGISTRYके लिए,$WORKLOAD_SERVICEACCOUNTको पढ़ने की अनुमति दें. इसकी ज़रूरत इसलिए होती है, ताकि वर्कलोड कंटेनर, 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, इन ज़रूरी शर्तों के आधार पर ऐक्सेस की नीति लागू करने के लिए, Workload Identity Federation का इस्तेमाल करता है. Workload Identity Federation की मदद से, एट्रिब्यूट की शर्तें तय की जा सकती हैं. इन शर्तों से यह तय होता है कि कौनसी आइडेंटिटी, Workload Identity Pool (WIP) की मदद से पुष्टि कर सकती हैं. मेज़रमेंट दिखाने और नीति लागू करने के लिए, Attestation Verifier Service को WIP में Workload Identity Pool Provider के तौर पर जोड़ा जा सकता है.
Workload Identity Pool पहले ही बनाया जा चुका था. इसे क्लाउड संसाधनों को सेट अप करने के चरण के दौरान बनाया गया था. अब Primus, नया ओआईडीसी 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. इससे सुरक्षा को बेहतर बनाया जा सकता है और यह पक्का किया जा सकता है कि चल रहा वर्कलोड सुरक्षित है.
वर्कलोड चलाना
इस चरण के तहत, हम वर्कलोड को Trusted Space VM में चलाएंगे. इसमें एक ऐक्सलरेटर अटैच होगा. ज़रूरी टीईई आर्ग्युमेंट, मेटाडेटा फ़्लैग का इस्तेमाल करके पास किए जाते हैं. वर्कलोड कंटेनर के लिए आर्ग्युमेंट, फ़्लैग के "tee-cmd" हिस्से का इस्तेमाल करके पास किए जाते हैं. वर्कलोड वीएम को Nvidia Tesla T4 GPU से लैस करने के लिए, हम --accelerator=type=nvidia-tesla-t4,count=1 फ़्लैग का इस्तेमाल करेंगे. इससे वीएम से एक जीपीयू अटैच हो जाएगा. हमें मेटाडेटा फ़्लैग में tee-install-gpu-driver=true को भी शामिल करना होगा, ताकि सही GPU ड्राइवर इंस्टॉल हो सके.
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 कंपनी के कर्मचारी, कोड जनरेट करने के अनुरोध इन्फ़रेंस सर्वर को भेज सकते हैं.
इस कोडलैब के हिस्से के तौर पर, हम क्लाइंट ऐप्लिकेशन को सेट अप करने के लिए इस स्क्रिप्ट का इस्तेमाल करेंगे. यह स्क्रिप्ट, अनुमान लगाने वाले सर्वर के साथ इंटरैक्ट करेगी. क्लाइंट वीएम को सेट अप करने के लिए, यह स्क्रिप्ट चलाएं.
./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 पर जाएं
- वह प्रोजेक्ट चुनें जिसे बंद करना है. इसके बाद, सबसे ऊपर मौजूद ‘मिटाएं' पर क्लिक करें: इससे प्रोजेक्ट को मिटाने के लिए शेड्यूल कर दिया जाता है