১. সংক্ষিপ্ত বিবরণ
আপনার GPU-অ্যাক্সিলারেটেড ওয়ার্কলোডগুলির নিরাপত্তা এবং গোপনীয়তা আরও উন্নত করতে প্রস্তুত? এই কোডল্যাবটি আপনাকে Trusted Space- এর সক্ষমতা সম্পর্কে জানাবে, যা আপনার সংবেদনশীল AI/ML ওয়ার্কলোডগুলির জন্য শক্তিশালী অপারেটর আইসোলেশন এবং অ্যাক্সিলারেটর সাপোর্ট প্রদান করে।
মূল্যবান ডেটা, মডেল এবং কী-গুলির সুরক্ষা এখন আগের চেয়ে অনেক বেশি জরুরি। ট্রাস্টেড স্পেস এই সমস্যার সমাধান দেয়, যা নিশ্চিত করে যে আপনার ওয়ার্কলোডগুলি একটি সুরক্ষিত ও বিশ্বস্ত পরিবেশে পরিচালিত হবে, যেখানে এমনকি ওয়ার্কলোড অপারেটরেরও কোনো প্রবেশাধিকার থাকবে না।
ট্রাস্টেড স্পেস যা যা অফার করে:
- উন্নত গোপনীয়তা ও নিরাপত্তা: ট্রাস্টেড স্পেস একটি বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্ট প্রদান করে, যেখানে আপনার সংবেদনশীল সম্পদসমূহ (যেমন মডেল, মূল্যবান ডেটা এবং কী) ক্রিপ্টোগ্রাফিক প্রমাণের মাধ্যমে সুরক্ষিত থাকে।
- অপারেটর আইসোলেশন: অপারেটরের হস্তক্ষেপ নিয়ে উদ্বেগ দূর করুন। ট্রাস্টেড স্পেসের মাধ্যমে, এমনকি আপনার ওয়ার্কলোড অপারেটরদেরও কোনো অ্যাক্সেস থাকে না, যা তাদের SSH করা, ডেটা অ্যাক্সেস করা, সফটওয়্যার ইনস্টল করা বা আপনার কোডে হস্তক্ষেপ করা থেকে বিরত রাখে।
- অ্যাক্সিলারেটর সাপোর্ট: ট্রাস্টেড স্পেসকে H100, A100, T4, এবং L4-এর মতো GPU সহ বিভিন্ন ধরণের হার্ডওয়্যার অ্যাক্সিলারেটরের সাথে নির্বিঘ্নে কাজ করার জন্য ডিজাইন করা হয়েছে। এটি নিশ্চিত করে যে আপনার পারফরম্যান্স-নির্ভর AI/ML অ্যাপ্লিকেশনগুলো মসৃণভাবে চলে।
আপনি যা শিখবেন
- ট্রাস্টেড স্পেস-এর প্রধান পরিষেবাগুলো সম্পর্কে ধারণা লাভ করুন।
- আপনার এআই/এমএল ওয়ার্কলোডের মূল্যবান সম্পদ সুরক্ষিত করার জন্য কীভাবে একটি ট্রাস্টেড স্পেস এনভায়রনমেন্ট স্থাপন ও কনফিগার করতে হয়, তা জানুন।
আপনার যা যা লাগবে
- একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রকল্প
- গুগল কম্পিউট ইঞ্জিন ও অ্যাক্সিলারেটর সম্পর্কে প্রাথমিক জ্ঞান।
- সার্ভিস অ্যাকাউন্ট , কী ম্যানেজমেন্ট , ওয়ার্কলোড আইডেন্টিটি ফেডারেশন এবং অ্যাট্রিবিউট কন্ডিশন সম্পর্কে প্রাথমিক জ্ঞান।
- কন্টেইনার এবং আর্টিফ্যাক্ট রেজিস্ট্রি সম্পর্কে প্রাথমিক জ্ঞান
প্রাইমাস কোম্পানির মাধ্যমে সংবেদনশীল কোড জেনারেশন প্রম্পট সুরক্ষিত করা
এই কোডল্যাবে, আমরা প্রাইমাস নামক একটি কোম্পানির দৃষ্টিকোণ থেকে বিষয়টি দেখব, যারা তাদের কর্মীদের তথ্যের গোপনীয়তা এবং নিরাপত্তাকে অগ্রাধিকার দেয়। প্রাইমাস তাদের ডেভেলপারদের কোডিংয়ের কাজে সহায়তা করার জন্য একটি কোড জেনারেশন মডেল স্থাপন করতে চায়। তবে, তারা তাদের কর্মীদের দ্বারা জমা দেওয়া প্রম্পটগুলোর গোপনীয়তা রক্ষা করা নিয়ে উদ্বিগ্ন, কারণ এই প্রম্পটগুলোতে প্রায়শই সংবেদনশীল কোডের অংশ, অভ্যন্তরীণ প্রকল্পের বিবরণ বা মালিকানাধীন অ্যালগরিদম থাকে।
প্রাইমাস কোম্পানি কেন অপারেটরকে বিশ্বাস করে না?
প্রাইমাস কর্প একটি অত্যন্ত প্রতিযোগিতামূলক বাজারে কাজ করে। তাদের কোডবেসে মূল্যবান মেধাস্বত্ব রয়েছে, যার মধ্যে মালিকানাধীন অ্যালগরিদম এবং সংবেদনশীল কোড স্নিপেট অন্তর্ভুক্ত, যা তাদের প্রতিযোগিতামূলক সুবিধা প্রদান করে। তারা ওয়ার্কলোড অপারেটরদের দ্বারা কর্পোরেট গুপ্তচরবৃত্তির সম্ভাবনা নিয়ে উদ্বিগ্ন। এছাড়াও, কর্মচারীদের নির্দেশনায় কোডের এমন গোপনীয় ও অত্যাবশ্যকীয় অংশ থাকতে পারে, যা প্রাইমাস কর্প সুরক্ষিত রাখতে চায়।
এই উদ্বেগ নিরসনে, প্রাইমাস কর্প কোড জেনারেশনের জন্য মডেল চালনাকারী ইনফারেন্স সার্ভারটিকে বিচ্ছিন্ন করতে ট্রাস্টেড স্পেস ব্যবহার করবে। এটি যেভাবে কাজ করে তা নিচে দেওয়া হলো:
- প্রম্পট এনক্রিপশন: ইনফারেন্স সার্ভারে প্রম্পট পাঠানোর আগে, প্রত্যেক কর্মচারী গুগল ক্লাউডে প্রাইমাস কর্প দ্বারা পরিচালিত একটি কেএমএস (KMS) কী ব্যবহার করে এটি এনক্রিপ্ট করবেন। এটি নিশ্চিত করে যে শুধুমাত্র ট্রাস্টেড স্পেস এনভায়রনমেন্ট, যেখানে সংশ্লিষ্ট ডিক্রিপশন কী উপলব্ধ আছে, সেটিই এটিকে ডিক্রিপ্ট করতে এবং প্লেইনটেক্সট প্রম্পটটি অ্যাক্সেস করতে পারবে। বাস্তব ক্ষেত্রে, ক্লায়েন্ট-সাইড এনক্রিপশন উপলব্ধ লাইব্রেরি (যেমন টিঙ্ক ) দ্বারা পরিচালনা করা যেতে পারে। এই কোডল্যাবের অংশ হিসেবে, আমরা এনভেলপ এনক্রিপশন সহ এই নমুনা ক্লায়েন্ট অ্যাপ্লিকেশনটি ব্যবহার করব।
- অপারেটর আইসোলেশন: শুধুমাত্র ট্রাস্টেড স্পেস এনভায়রনমেন্টের মধ্যে চলমান ইনফারেন্স সার্ভারই এনক্রিপশনের জন্য ব্যবহৃত কী-টির অ্যাক্সেস পাবে এবং একটি ট্রাস্টেড এনভায়রনমেন্টের অধীনে প্রম্পটটি ডিক্রিপ্ট করতে সক্ষম হবে। এনক্রিপশন কী-টির অ্যাক্সেস ওয়ার্কলোড আইডেন্টিটি পুল দ্বারা সুরক্ষিত থাকবে। ট্রাস্টেড স্পেসের আইসোলেশন নিশ্চয়তার কারণে, এমনকি ওয়ার্কলোড অপারেটরও এনক্রিপশনের জন্য ব্যবহৃত কী এবং ডিক্রিপ্ট করা কন্টেন্ট অ্যাক্সেস করতে পারে না।
- অ্যাক্সিলারেটর ব্যবহার করে সুরক্ষিত ইনফারেন্স: ইনফারেন্স সার্ভারটি একটি শিল্ডেড ভিএম-এ (ট্রাস্টেড স্পেস সেটআপের অংশ হিসেবে) চালু করা হবে, যা নিশ্চিত করবে যে ওয়ার্কলোড ইনস্ট্যান্সটি বুট- বা কার্নেল-স্তরের ম্যালওয়্যার বা রুটকিট দ্বারা আক্রান্ত হয়নি। এই সার্ভারটি ট্রাস্টেড স্পেস পরিবেশের মধ্যে প্রম্পট ডিক্রিপ্ট করে, কোড জেনারেশন মডেল ব্যবহার করে ইনফারেন্স সম্পাদন করে এবং জেনারেট করা কোডটি কর্মচারীর কাছে ফেরত পাঠায়।
২. ক্লাউড রিসোর্স সেট আপ করুন
শুরু করার আগে
- এই কোডল্যাবের অংশ হিসেবে ব্যবহৃত প্রয়োজনীয় স্ক্রিপ্টগুলো পেতে নিচের কমান্ডটি ব্যবহার করে এই রিপোজিটরিটি ক্লোন করুন।
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')
- আপনি প্রাইমাস প্রজেক্টে বিদ্যমান ক্লাউড রিসোর্সের নাম দিয়ে নিম্নলিখিত ভেরিয়েবলগুলো সেট করতে পারেন। যদি ভেরিয়েবলটি সেট করা থাকে, তাহলে প্রাইমাস প্রজেক্ট থেকে সংশ্লিষ্ট বিদ্যমান ক্লাউড রিসোর্সটি ব্যবহার করা হবে। যদি ভেরিয়েবলটি সেট করা না থাকে, তাহলে প্রজেক্টের নাম থেকে ক্লাউড রিসোর্সের নামটি তৈরি করা হবে এবং সেই নামে একটি নতুন ক্লাউড-রিসোর্স তৈরি করা হবে। রিসোর্সের নামের জন্য নিম্নলিখিত ভেরিয়েবলগুলো সমর্থিত:
| যে অঞ্চলের অধীনে প্রাইমাস কোম্পানির জন্য আঞ্চলিক সম্পদ তৈরি করা হবে |
| প্রাইমাস কোম্পানির জন্য সম্পদ তৈরির স্থান। |
| যে অঞ্চলের অধীনে প্রাইমাস কোম্পানির জন্য আঞ্চলিক সম্পদ তৈরি করা হবে। |
| ক্লাউড রিসোর্স সুরক্ষিত করার জন্য প্রাইমাস কোম্পানির ওয়ার্কলোড আইডেন্টিটি পুল। |
| প্রাইমাস কোম্পানির ওয়ার্কলোড আইডেন্টিটি পুল প্রোভাইডার, যার মধ্যে অ্যাটেস্টেশন ভেরিফায়ার সার্ভিস দ্বারা স্বাক্ষরিত টোকেন ব্যবহারের জন্য অনুমোদনের শর্ত অন্তর্ভুক্ত রয়েছে। |
| প্রাইমাস কোম্পানির সার্ভিস অ্যাকাউন্ট যা |
| প্রাইমাস কোম্পানির কর্মচারীদের দেওয়া প্রম্পটগুলো এনক্রিপ্ট করতে কেএমএস কী ব্যবহার করা হয়। |
| কেএমএস কী-রিং যা প্রাইমাস কোম্পানির জন্য |
| |
| আর্টিফ্যাক্ট রিপোজিটরি যেখানে ওয়ার্কলোড ডকার ইমেজটি পুশ করা হবে। |
| আর্টিফ্যাক্ট রিপোজিটরির সেই অঞ্চল যেখানে প্রকাশিত ওয়ার্কলোড ডকার ইমেজটি থাকবে। |
| ওয়ার্কলোড ভিএম-এর নাম। |
| ওয়ার্কলোড ডকার ইমেজের নাম। |
| ওয়ার্কলোড কন্টেইনার ইমেজের ট্যাগ। |
| যে সার্ভিস অ্যাকাউন্টের কাছে ওয়ার্কলোড চালনাকারী গোপনীয় ভিএম-টি অ্যাক্সেস করার অনুমতি আছে। |
| ক্লায়েন্ট ভিএম-এর নাম, যেটিতে ইনফারেন্স সার্ভারের ক্লায়েন্ট অ্যাপ্লিকেশনটি চলবে। |
| |
-
$PRIMUS_PROJECT_IDপ্রজেক্টটির জন্য আপনার Storage Admin, Artifact Registry Administrator, Cloud KMS Admin, Service Account Admin, IAM Workload Identity Pool Admin রোলগুলোর প্রয়োজন হবে। GCP কনসোল ব্যবহার করে কীভাবে IAM রোল প্রদান করতে হয়, তা জানতে আপনি এই গাইডটি দেখতে পারেন। -
$PRIMUS_PROJECT_IDএর জন্য, রিসোর্স নামগুলোর ক্ষেত্রে আপনার প্রজেক্ট আইডির উপর ভিত্তি করে বাকি ভেরিয়েবল নামগুলোর মান সেট করতে নিম্নলিখিত স্ক্রিপ্টটি চালান।
source config_env.sh
প্রাইমাস কোম্পানির রিসোর্স সেট আপ করুন
এই ধাপের অংশ হিসেবে, আপনি প্রাইমাসের জন্য প্রয়োজনীয় ক্লাউড রিসোর্সগুলো সেট আপ করবেন। প্রাইমাসের জন্য রিসোর্সগুলো সেট আপ করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। স্ক্রিপ্টটি কার্যকর হওয়ার ফলে নিম্নলিখিত রিসোর্সগুলো তৈরি হবে:
- প্রাইমাস কোম্পানির গ্রাহক ডেটা ফাইল এনক্রিপ্ট করার জন্য KMS-এ এনক্রিপশন কী (
$PRIMUS_ENC_KEY) এবং কী-রিং ($PRIMUS_ENC_KEYRING)। - এর প্রোভাইডারের অধীনে কনফিগার করা অ্যাট্রিবিউট শর্তাবলীর উপর ভিত্তি করে ক্লেইম যাচাই করার জন্য ওয়ার্কলোড আইডেন্টিটি পুল (
$PRIMUS_WORKLOAD_IDENTITY_POOL)। - উপরে উল্লিখিত ওয়ার্কলোড আইডেন্টিটি পুল (
$PRIMUS_WORKLOAD_IDENTITY_POOL)-এর সাথে সংযুক্ত সার্ভিস অ্যাকাউন্ট ($PRIMUS_SERVICE_ACCOUNT)-এর নিম্নলিখিত অ্যাক্সেস রয়েছে: KMS কী ব্যবহার করে ডেটা ডিক্রিপ্ট করা (roles/cloudkms.cryptoKeyDecrypterরোল ব্যবহার করে), KMS কী ব্যবহার করে ডেটা এনক্রিপ্ট করা (roles/cloudkms.cryptoKeyEncrypterরোল ব্যবহার করে), ক্লাউড স্টোরেজ বাকেট থেকে ডেটা পড়া (objectViewerরোল ব্যবহার করে) এবং সার্ভিস-অ্যাকাউন্টটিকে ওয়ার্কলোড আইডেন্টিটি পুলের সাথে সংযুক্ত করা (roles/iam.workloadIdentityUserব্যবহার করে)।
./setup_primus_resources.sh
৩. কাজের চাপ তৈরি করুন
ওয়ার্কলোড পরিষেবা অ্যাকাউন্ট তৈরি করুন
এখন, আপনি প্রয়োজনীয় রোল এবং পারমিশন সহ ওয়ার্কলোডের জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন। প্রাইমাস প্রজেক্টে একটি ওয়ার্কলোড সার্ভিস অ্যাকাউন্ট তৈরি করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। এই সার্ভিস অ্যাকাউন্টটি সেই ভিএম ব্যবহার করবে যেটি ইনফারেন্স সার্ভার চালায়।
এই ওয়ার্কলোড সার্ভিস-অ্যাকাউন্ট ( $WORKLOAD_SERVICEACCOUNT )-এর নিম্নলিখিত ভূমিকাগুলো থাকবে:
- একটি অ্যাটেস্টেশন টোকেন পেতে
confidentialcomputing.workloadUserযান। - ক্লাউড লগিং-এ লগ লেখার জন্য
logging.logWriterব্যবহার করা হয়।
./create_workload_service_account.sh
কাজের চাপ তৈরি করুন
এই ধাপের অংশ হিসেবে, আপনি একটি ওয়ার্কলোড ডকার ইমেজ তৈরি করবেন। ওয়ার্কলোডটি প্রাইমাস কোম্পানি দ্বারা নির্মিত হবে। এই কোডল্যাবে ব্যবহৃত ওয়ার্কলোডটি হলো পাইথন কোড, যা সর্বজনীনভাবে উপলব্ধ GCS বাকেট (ভার্টেক্স মডেল গার্ডেনের) থেকে কোডজেমা মডেলটি ব্যবহার করে। ওয়ার্কলোডটি কোডজেমা মডেলটি লোড করবে এবং ইনফারেন্স সার্ভারটি চালু করবে, যা প্রাইমাসের ডেভেলপারদের কাছ থেকে আসা কোড জেনারেশনের অনুরোধগুলো পূরণ করবে।
কোড জেনারেশন অনুরোধের পর, ওয়ার্কলোড একটি এনক্রিপ্টেড প্রম্পট সহ র্যাপ করা DEK পাবে। এরপর ওয়ার্কলোড DEK ডিক্রিপ্ট করার জন্য KMS API কল করবে এবং তারপর এই DEK ব্যবহার করে প্রম্পটটি ডিক্রিপ্ট করবে। এনক্রিপশন কী (DEK-এর জন্য) ওয়ার্কলোড আইডেন্টিটি পুলের মাধ্যমে সুরক্ষিত থাকবে এবং যে ওয়ার্কলোডগুলো অ্যাট্রিবিউট শর্ত পূরণ করবে, তাদের অ্যাক্সেস দেওয়া হবে। এই অ্যাট্রিবিউট শর্তগুলো ওয়ার্কলোডকে অনুমোদন দেওয়ার পরবর্তী বিভাগে আরও বিস্তারিতভাবে বর্ণনা করা হয়েছে। ইনফারেন্স সার্ভার ডিক্রিপ্ট করা প্রম্পটটি পেয়ে গেলে, এটি একটি লোড করা মডেল ব্যবহার করে কোড জেনারেট করবে এবং প্রতিক্রিয়াটি ফেরত পাঠাবে।
এমন একটি ওয়ার্কলোড তৈরি করতে নিম্নলিখিত স্ক্রিপ্টটি চালান, যেখানে নিম্নলিখিত ধাপগুলি সম্পাদন করা হবে:
- প্রাইমাসের মালিকানাধীন আর্টিফ্যাক্ট রেজিস্ট্রি (
$PRIMUS_ARTIFACT_REGISTRY) তৈরি করুন। - প্রয়োজনীয় রিসোর্সগুলোর নাম দিয়ে ওয়ার্কলোড কোডটি আপডেট করুন।
- ইনফারেন্স সার্ভার ওয়ার্কলোডটি বিল্ড করুন এবং ওয়ার্কলোড কোডের একটি ডকার ইমেজ তৈরির জন্য ডকারফাইল তৈরি করুন। এই কোডল্যাবের জন্য ব্যবহৃত ডকারফাইলটি নিচে দেওয়া হলো।
- প্রাইমাসের মালিকানাধীন আর্টিফ্যাক্ট রেজিস্ট্রি (
$PRIMUS_ARTIFACT_REGISTRY)-তে ডকার ইমেজটি তৈরি করে প্রকাশ করুন। -
$PRIMUS_ARTIFACT_REGISTRYএর জন্য$WORKLOAD_SERVICEACCOUNTরিড পারমিশন দিন। ওয়ার্কলোড কন্টেইনারের আর্টিফ্যাক্ট রেজিস্ট্রি থেকে ওয়ার্কলোড ডকার ইমেজ পুল করার জন্য এটি প্রয়োজন।
./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
৪. ওয়ার্কলোড অনুমোদন ও চালনা করুন
ওয়ার্কলোড অনুমোদন করুন
প্রাইমাস নিম্নলিখিত রিসোর্সগুলির অ্যাট্রিবিউটের উপর ভিত্তি করে প্রম্পট এনক্রিপশনের জন্য ব্যবহৃত তাদের কেএমএস (KMS) কী অ্যাক্সেস করার জন্য ওয়ার্কলোডগুলিকে অনুমোদন দিতে চায়:
- বিষয়বস্তু : যাচাইকৃত কোড
- কোথায় : একটি নিরাপদ পরিবেশ
- কে : একজন বিশ্বস্ত অপারেটর
প্রাইমাস এই প্রয়োজনীয়তাগুলোর উপর ভিত্তি করে একটি অ্যাক্সেস পলিসি প্রয়োগ করতে ওয়ার্কলোড আইডেন্টিটি ফেডারেশন ব্যবহার করে। ওয়ার্কলোড আইডেন্টিটি ফেডারেশন আপনাকে অ্যাট্রিবিউট কন্ডিশন নির্দিষ্ট করার সুযোগ দেয়। এই শর্তগুলো সীমাবদ্ধ করে যে কোন আইডেন্টিটিগুলো ওয়ার্কলোড আইডেন্টিটি পুল (WIP)- এর সাথে অথেন্টিকেট করতে পারবে। আপনি পরিমাপ উপস্থাপন করতে এবং পলিসি প্রয়োগ করতে অ্যাটেস্টেশন ভেরিফায়ার সার্ভিসকে একটি ওয়ার্কলোড আইডেন্টিটি পুল প্রোভাইডার হিসেবে WIP-তে যুক্ত করতে পারেন।
ক্লাউড রিসোর্স সেটআপ ধাপের অংশ হিসেবে ওয়ার্কলোড আইডেন্টিটি পুলটি আগেই তৈরি করা হয়েছিল। এখন প্রাইমাস একটি নতুন OIDC ওয়ার্কলোড আইডেন্টিটি পুল প্রোভাইডার তৈরি করবে। নির্দিষ্ট --attribute-condition ওয়ার্কলোড কন্টেইনারে অ্যাক্সেসের অনুমোদন দেয়। এর জন্য প্রয়োজন:
- বিষয় :
$PRIMUS_ARTIFACT_REPOSITORYরিপোজিটরিতে আপলোড করা সর্বশেষ$WORKLOAD_IMAGE_NAME। - অবস্থান : কনফিডেনশিয়াল স্পেস বিশ্বস্ত এক্সিকিউশন এনভায়রনমেন্টটি সম্পূর্ণরূপে সমর্থিত কনফিডেনশিয়াল স্পেস ভিএম ইমেজে চলছে।
- কে : প্রাইমাস
$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 আর্গুমেন্টগুলো মেটাডেটা ফ্ল্যাগ ব্যবহার করে পাস করা হয়। ওয়ার্কলোড কন্টেইনারের জন্য আর্গুমেন্টগুলো ফ্ল্যাগের " tee-cmd " অংশ ব্যবহার করে পাস করা হয়। ওয়ার্কলোড ভিএম-কে একটি Nvidia Tesla T4 GPU দিয়ে সজ্জিত করতে, আমরা --accelerator=type=nvidia-tesla-t4,count=1 ফ্ল্যাগটি ব্যবহার করব। এটি ভিএম-এর সাথে একটি GPU সংযুক্ত করবে। উপযুক্ত GPU ড্রাইভারের ইনস্টলেশন শুরু করার জন্য আমাদের মেটাডেটা ফ্ল্যাগে 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"
ইনফারেন্স কোয়েরি চালান
ওয়ার্কলোড ইনফারেন্স সার্ভারটি সফলভাবে চালু হওয়ার পর, এখন প্রাইমাস কোম্পানির কর্মীরা ইনফারেন্স সার্ভারে কোড জেনারেশনের অনুরোধ পাঠাতে পারবেন।
এই কোডল্যাবের অংশ হিসেবে, আমরা ইনফারেন্স সার্ভারের সাথে যোগাযোগকারী ক্লায়েন্ট অ্যাপ্লিকেশনটি সেট আপ করার জন্য নিম্নলিখিত স্ক্রিপ্টটি ব্যবহার করব। ক্লায়েন্ট ভিএম সেট আপ করতে এই স্ক্রিপ্টটি চালান।
./setup_client.sh
নিম্নলিখিত ধাপগুলিতে দেখানো হয়েছে কীভাবে ক্লায়েন্ট ভিএম-এ SSH করতে হয় এবং একটি পাইথন ভার্চুয়াল এনভায়রনমেন্টের মধ্যে একটি নমুনা ক্লায়েন্ট অ্যাপ্লিকেশন চালাতে হয়। এই উদাহরণ অ্যাপ্লিকেশনটি Fernet লাইব্রেরির সাহায্যে এনভেলপ এনক্রিপশন ব্যবহার করে, তবে মনে রাখবেন যে বিভিন্ন ব্যবহারের ক্ষেত্র অনুযায়ী নির্দিষ্ট এনক্রিপশন লাইব্রেরিগুলি পরিবর্তন করা যেতে পারে।
gcloud compute ssh ${CLIENT_VM} --zone=${PRIMUS_PROJECT_ZONE}
ক্লায়েন্ট ভিএম-এ পাইথন ভার্চুয়াল এনভায়রনমেন্ট সক্রিয় করতে এবং ক্লায়েন্ট অ্যাপ্লিকেশনটি চালু করতে নিম্নলিখিত কমান্ডগুলো চালান।
source venv/bin/activate
python3 inference_client.py
এই নমুনা ক্লায়েন্ট অ্যাপ্লিকেশনটির আউটপুটে এনক্রিপশন এবং প্লেইনটেক্সট প্রম্পট অনুরোধ এবং সেগুলোর সংশ্লিষ্ট এনক্রিপ্টেড ও ডিক্রিপ্টেড প্রতিক্রিয়াগুলো দেখানো হবে।
৫. পরিষ্কার করা
এই কোডল্যাবের অংশ হিসেবে আমরা যে রিসোর্সগুলো তৈরি করেছি, সেগুলো পরিষ্কার করার জন্য এই স্ক্রিপ্টটি ব্যবহার করা যেতে পারে। এই পরিষ্কার-পরিচ্ছন্নতার অংশ হিসেবে, নিম্নলিখিত রিসোর্সগুলো মুছে ফেলা হবে:
- প্রাইমাস পরিষেবা-অ্যাকাউন্ট (
$PRIMUS_SERVICEACCOUNT)। - প্রাইমাস এনক্রিপশন কী (
$PRIMUS_ENC_KEY)। - প্রাইমাসের প্রত্নবস্তু সংগ্রহশালা (
$PRIMUS_ARTIFACT_REPOSITORY)। - প্রাইমাস ওয়ার্কলোড আইডেন্টিটি পুল (
$PRIMUS_WORKLOAD_IDENTITY_POOL) এবং এর প্রোভাইডার। - প্রাইমাসের ওয়ার্কলোড সার্ভিস অ্যাকাউন্ট (
$WORKLOAD_SERVICEACCOUNT)। - ওয়ার্কলোড ভিএম (
$WORKLOAD_VM) এবং ক্লায়েন্ট ভিএম ($CLIENT_VM)।
./cleanup.sh
আপনার অনুসন্ধান শেষ হয়ে গেলে, অনুগ্রহ করে আপনার প্রজেক্টটি মুছে ফেলার কথা বিবেচনা করুন।
- ক্লাউড প্ল্যাটফর্ম কনসোলে যান
- যে প্রজেক্টটি বন্ধ করতে চান সেটি নির্বাচন করুন, তারপর উপরে থাকা 'ডিলিট' বোতামে ক্লিক করুন: এটি প্রজেক্টটিকে মুছে ফেলার জন্য নির্ধারিত করবে।