বিশ্বস্ত স্পেস কোডল্যাব

1. ওভারভিউ

আপনার GPU-ত্বরিত কাজের চাপের নিরাপত্তা এবং গোপনীয়তা উন্নত করতে প্রস্তুত? এই কোডল্যাব আপনাকে ট্রাস্টেড স্পেস -এর ক্ষমতার মাধ্যমে গাইড করবে, যা আপনার সংবেদনশীল AI/ML কাজের চাপের জন্য শক্তিশালী অপারেটর আইসোলেশন এবং অ্যাক্সিলারেটর সমর্থন প্রদানের অফার।

মূল্যবান ডেটা, মডেল এবং কীগুলি সুরক্ষিত করা আগের চেয়ে আরও গুরুত্বপূর্ণ৷ ট্রাস্টেড স্পেস আপনার ওয়ার্কলোডগুলি একটি নিরাপদ, বিশ্বস্ত পরিবেশের মধ্যে কাজ করে যেখানে এমনকি ওয়ার্কলোড অপারেটরেরও অ্যাক্সেস নেই তা নিশ্চিত করে একটি সমাধান অফার করে৷

বিশ্বস্ত স্থান যা অফার করে তা এখানে:

  • উন্নত গোপনীয়তা এবং নিরাপত্তা: বিশ্বস্ত স্থান একটি বিশ্বস্ত কার্যকরী পরিবেশ প্রদান করে যেখানে আপনার সংবেদনশীল সম্পদ (যেমন মডেল, মূল্যবান ডেটা এবং কী) সুরক্ষিত থাকে, ক্রিপ্টোগ্রাফিক প্রমাণ দ্বারা সমর্থিত।
  • অপারেটর বিচ্ছিন্নতা: অপারেটরের হস্তক্ষেপ সম্পর্কে উদ্বেগ দূর করুন। বিশ্বস্ত স্থানের সাথে, এমনকি আপনার কাজের চাপ অপারেটরদেরও কোনো অ্যাক্সেস নেই, তাদের SSHing থেকে আটকানো, ডেটা অ্যাক্সেস করা, সফ্টওয়্যার ইনস্টল করা, বা আপনার কোডের সাথে টেম্পারিং করা।
  • অ্যাক্সিলারেটর সমর্থন: বিশ্বস্ত স্থানকে H100, A100, T4, এবং L4 এর মতো GPU সহ বিস্তৃত হার্ডওয়্যার এক্সিলারেটরের সাথে নির্বিঘ্নে কাজ করার জন্য ডিজাইন করা হয়েছে। এটি নিশ্চিত করে যে আপনার কর্মক্ষমতা-সমালোচনামূলক AI/ML অ্যাপ্লিকেশনগুলি মসৃণভাবে চলছে৷

আপনি কি শিখবেন

  • ট্রাস্টেড স্পেস এর মূল অফারগুলি সম্পর্কে বোধগম্যতা লাভ করুন৷
  • আপনার AI/Ml কাজের চাপের মূল্যবান সম্পদ সুরক্ষিত করার জন্য কীভাবে একটি বিশ্বস্ত স্থান পরিবেশ স্থাপন এবং কনফিগার করবেন তা শিখুন।

আপনি কি প্রয়োজন হবে

প্রাইমাস কোম্পানির সাথে সংবেদনশীল কোড জেনারেশন প্রম্পট রক্ষা করা

এই কোডল্যাবে, আমরা প্রাইমাসের জুতাগুলিতে পা রাখব, এমন একটি সংস্থা যা তার কর্মীদের ডেটার গোপনীয়তা এবং সুরক্ষাকে অগ্রাধিকার দেয়৷ প্রাইমাস তার ডেভেলপারদের তাদের কোডিং কাজে সহায়তা করার জন্য একটি কোড জেনারেশন মডেল স্থাপন করতে চায়। যাইহোক, তারা তাদের কর্মীদের দ্বারা জমা দেওয়া প্রম্পটের গোপনীয়তা রক্ষার বিষয়ে উদ্বিগ্ন, কারণ এই প্রম্পটে প্রায়ই সংবেদনশীল কোড স্নিপেট, অভ্যন্তরীণ প্রকল্পের বিবরণ, বা মালিকানাধীন অ্যালগরিদম থাকে।

প্রাইমাস কোম্পানি কেন অপারেটরকে বিশ্বাস করে না?

Primus Corp একটি অত্যন্ত প্রতিযোগিতামূলক বাজারে কাজ করে। তাদের কোডবেসে মূল্যবান বৌদ্ধিক সম্পত্তি রয়েছে, যার মধ্যে রয়েছে মালিকানাধীন অ্যালগরিদম এবং সংবেদনশীল কোড স্নিপেট যা একটি প্রতিযোগিতামূলক প্রান্ত প্রদান করে। তারা কাজের চাপ অপারেটরদের কর্পোরেট গুপ্তচরবৃত্তির সম্ভাবনা নিয়ে উদ্বিগ্ন। উপরন্তু, কর্মচারী প্রম্পটগুলিতে গোপনীয় "জানা দরকার" কোডের অংশগুলি অন্তর্ভুক্ত থাকতে পারে যা প্রাইমাস কর্প সুরক্ষা করতে চায়।

এই উদ্বেগ মোকাবেলা করার জন্য, Primus Corp ট্রাস্টেড স্পেসকে লিভারেজ করবে যাতে কোড জেনারেশনের জন্য মডেল চালিত ইনফারেন্স সার্ভারকে আলাদা করা যায়। এটি কিভাবে কাজ করে তা এখানে:

  • প্রম্পট এনক্রিপশন: ইনফারেন্স সার্ভারে একটি প্রম্পট পাঠানোর আগে, প্রতিটি কর্মচারী Google ক্লাউডে Primus Corp দ্বারা পরিচালিত একটি KMS কী ব্যবহার করে এটি এনক্রিপ্ট করবে। এটি নিশ্চিত করে যে শুধুমাত্র বিশ্বস্ত স্থান পরিবেশ, যেখানে সংশ্লিষ্ট ডিক্রিপশন কী উপলব্ধ, এটিকে ডিক্রিপ্ট করতে পারে এবং প্লেইনটেক্সট প্রম্পটে অ্যাক্সেস করতে পারে। একটি বাস্তব-বিশ্বের দৃশ্যে, ক্লায়েন্ট-সাইড এনক্রিপশন উপলব্ধ লাইব্রেরি দ্বারা পরিচালনা করা যেতে পারে (যেমন tink )। এই কোডল্যাবের অংশ হিসাবে, আমরা খাম এনক্রিপশন সহ এই নমুনা ক্লায়েন্ট অ্যাপ্লিকেশনটি ব্যবহার করব।
  • অপারেটর বিচ্ছিন্নতা: শুধুমাত্র অনুমান সার্ভার, একটি বিশ্বস্ত স্থান পরিবেশের মধ্যে চলমান, এনক্রিপশনের জন্য ব্যবহৃত কীটিতে অ্যাক্সেস পাবে এবং একটি বিশ্বস্ত পরিবেশের অধীনে প্রম্পটটিকে ডিক্রিপ্ট করতে সক্ষম হবে। এনক্রিপশন কী-এর অ্যাক্সেস ওয়ার্কলোড আইডেন্টিটি পুল দ্বারা সুরক্ষিত হবে। বিশ্বস্ত স্থানের বিচ্ছিন্নতার গ্যারান্টির কারণে, এমনকি কাজের চাপ অপারেটর এনক্রিপশনের জন্য ব্যবহৃত কী এবং ডিক্রিপ্ট করা বিষয়বস্তু অ্যাক্সেস করতে পারে না।
  • অ্যাক্সিলারেটর ব্যবহার করে সুরক্ষিত অনুমান: ইনফারেন্স সার্ভারটি একটি শিল্ডেড ভিএম (বিশ্বস্ত স্থান সেটআপের অংশ হিসাবে) চালু করা হবে যা বুট- বা কার্নেল-লেভেল ম্যালওয়্যার বা রুটকিট দ্বারা কাজের চাপের উদাহরণের সাথে আপস করা হয়নি তা নিশ্চিত করবে। এই সার্ভারটি ট্রাস্টেড স্পেস এনভায়রনমেন্টের মধ্যে প্রম্পটটিকে ডিক্রিপ্ট করে, কোড জেনারেশন মডেল ব্যবহার করে অনুমান সম্পাদন করে এবং জেনারেট করা কোডটি কর্মচারীকে ফেরত দেয়।

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>
  • আপনার প্রকল্পগুলির জন্য বিলিং সক্ষম করুন
  • উভয় প্রকল্পের জন্য গোপনীয় কম্পিউটিং API এবং নিম্নলিখিত 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' )
  1. আপনি প্রাইমাস প্রজেক্টে বিদ্যমান ক্লাউড রিসোর্স নামের সাথে নিম্নলিখিত ভেরিয়েবল সেট করতে পারেন। যদি ভেরিয়েবল সেট করা হয়, তাহলে প্রাইমাস প্রজেক্ট থেকে সংশ্লিষ্ট বিদ্যমান ক্লাউড রিসোর্স ব্যবহার করা হবে। ভেরিয়েবল সেট করা না থাকলে, প্রকল্প-নাম থেকে ক্লাউড রিসোর্স নাম তৈরি করা হবে এবং সেই নামের সাথে একটি নতুন ক্লাউড-রিসোর্স তৈরি করা হবে। সম্পদের নামের জন্য সমর্থিত ভেরিয়েবলগুলি নিম্নরূপ:

$PRIMUS_PROJECT_REGION

যে অঞ্চলের অধীনে প্রাইমাস কোম্পানির জন্য আঞ্চলিক সম্পদ তৈরি করা হবে।

$PRIMUS_SERVICE_LOCATION

যে অবস্থানে প্রাইমাস কোম্পানির জন্য সম্পদ তৈরি করা হবে।

$PRIMUS_PROJECT_ZONE

যে অঞ্চলের অধীনে প্রাইমাস কোম্পানির জন্য জোনাল রিসোর্স তৈরি করা হবে।

$PRIMUS_WORKLOAD_IDENTITY_POOL

ক্লাউড সম্পদ রক্ষার জন্য প্রাইমাস কোম্পানির ওয়ার্কলোড আইডেন্টিটি পুল।

$PRIMUS_WIP_PROVIDER

প্রাইমাস কোম্পানির ওয়ার্কলোড আইডেন্টিটি পুল প্রদানকারী যা প্রত্যয়ন যাচাইকারী পরিষেবা দ্বারা স্বাক্ষরিত টোকেনের জন্য ব্যবহার করার অনুমোদন শর্ত অন্তর্ভুক্ত করে।

$PRIMUS_SERVICEACCOUNT

Primus কোম্পানির পরিষেবা অ্যাকাউন্ট যা $PRIMUS_WORKLOAD_IDENTITY_POOL সুরক্ষিত সংস্থানগুলি অ্যাক্সেস করতে ব্যবহার করে৷ এই ধাপে $PRIMUS_INPUT_STORAGE_BUCKET বালতিতে সংরক্ষিত গ্রাহক ডেটা দেখার অনুমতি রয়েছে৷

$PRIMUS_ENC_KEY

কেএমএস কী প্রাইমাস কোম্পানির কর্মীদের দ্বারা প্রদত্ত প্রম্পট এনক্রিপ্ট করতে ব্যবহৃত হয়।

$PRIMUS_ENC_KEYRING

KMS কীরিং যা Primus কোম্পানির জন্য $PRIMUS_ENC_KEY এনক্রিপশন কী তৈরি করতে ব্যবহার করা হবে।

$PRIMUS_ENC_KEYVERSION

এনক্রিপশন কী $PRIMUS_ENC_KEY এর KMS কী সংস্করণ। ডিফল্ট মান হল 1। আপনি যদি একটি বিদ্যমান কী ব্যবহার করেন যা অতীতে ঘোরানো হয়েছে এবং এর সংস্করণ আপডেট করা হয়েছে তাহলে এটি আপডেট করুন।

$PRIMUS_ARTIFACT_REPOSITORY

আর্টিফ্যাক্ট রিপোজিটরি যেখানে ওয়ার্কলোড ডকার ইমেজ পুশ করা হবে।

$PRIMUS_PROJECT_REPOSITORY_REGION

আর্টিফ্যাক্ট রিপোজিটরির জন্য যে অঞ্চলে প্রকাশিত ওয়ার্কলোড ডকার ইমেজ থাকবে।

$WORKLOAD_VM

কাজের চাপ VM এর নাম।

$WORKLOAD_IMAGE_NAME

কাজের চাপ ডকার ছবির নাম।

$WORKLOAD_IMAGE_TAG

কাজের চাপ কন্টেইনার ছবির ট্যাগ।

$WORKLOAD_SERVICEACCOUNT

যে পরিষেবা অ্যাকাউন্টের গোপনীয় VM অ্যাক্সেস করার অনুমতি রয়েছে যা কাজের চাপ চালায়।

$CLIENT_VM

ক্লায়েন্ট VM এর নাম যা ইনফারেন্স সার্ভারের ক্লায়েন্ট অ্যাপ্লিকেশন চালাবে।

$CLIENT_SERVICEACCOUNT

$CLIENT_VM দ্বারা ব্যবহৃত পরিষেবা অ্যাকাউন্ট৷

  • $PRIMUS_PROJECT_ID প্রকল্পের জন্য আপনার স্টোরেজ অ্যাডমিন, আর্টিফ্যাক্ট রেজিস্ট্রি অ্যাডমিনিস্ট্রেটর, ক্লাউড কেএমএস অ্যাডমিন, সার্ভিস অ্যাকাউন্ট অ্যাডমিন, আইএএম ওয়ার্কলোড আইডেন্টিটি পুল অ্যাডমিন ভূমিকার প্রয়োজন হবে। কিভাবে GCP কনসোল ব্যবহার করে IAM ভূমিকা প্রদান করতে হয় আপনি এই নির্দেশিকাটি দেখতে পারেন।
  • $PRIMUS_PROJECT_ID এর জন্য, সম্পদের নামের জন্য আপনার প্রকল্প আইডির উপর ভিত্তি করে অবশিষ্ট পরিবর্তনশীল নামগুলিকে মানগুলিতে সেট করতে নিম্নলিখিত স্ক্রিপ্টটি চালান৷
source config_env.sh

প্রাইমাস কোম্পানির সংস্থান সেট আপ করুন

এই পদক্ষেপের অংশ হিসাবে, আপনি প্রাইমাসের জন্য প্রয়োজনীয় ক্লাউড সংস্থানগুলি সেট আপ করবেন। Primus এর জন্য সম্পদ সেট আপ করতে নিম্নলিখিত স্ক্রিপ্ট চালান. স্ক্রিপ্ট সম্পাদনের অংশ হিসাবে নিম্নলিখিত সংস্থানগুলি তৈরি করা হবে:

  • এনক্রিপশন কী ( $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

3. কাজের চাপ তৈরি করুন

কাজের চাপ পরিষেবা অ্যাকাউন্ট তৈরি করুন

এখন, আপনি প্রয়োজনীয় ভূমিকা এবং অনুমতি সহ কাজের চাপের জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করবেন। Primus প্রকল্পে একটি কাজের চাপ পরিষেবা অ্যাকাউন্ট তৈরি করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। এই পরিষেবা অ্যাকাউন্টটি ভিএম দ্বারা ব্যবহার করা হবে যা ইনফারেন্স সার্ভার চালায়।

এই কাজের চাপ পরিষেবা-অ্যাকাউন্ট ( $WORKLOAD_SERVICEACCOUNT ) এর নিম্নলিখিত ভূমিকা থাকবে:

  • একটি প্রত্যয়ন টোকেন পেতে confidentialcomputing.workloadUser
  • logging.logWriter ক্লাউড লগিং-এ লগ লিখতে।
./create_workload_service_account.sh

কাজের চাপ তৈরি করুন

এই পদক্ষেপের অংশ হিসাবে, আপনি একটি ওয়ার্কলোড ডকার ইমেজ তৈরি করবেন। কাজের চাপ প্রাইমাস কোম্পানি দ্বারা রচিত হবে. এই কোডল্যাবে ব্যবহৃত কাজের চাপ হল পাইথন কোড যা সর্বজনীনভাবে উপলব্ধ জিসিএস বালতি (ভার্টেক্স মডেল বাগানের) থেকে কোডজেমা মডেল ব্যবহার করে। কাজের চাপ কোডজেমা মডেল লোড করবে এবং ইনফারেন্স সার্ভার চালু করবে যা প্রাইমাসের ডেভেলপারদের কোড জেনারেশনের অনুরোধ পূরণ করবে।

কোড তৈরির অনুরোধে, ওয়ার্কলোড একটি এনক্রিপ্ট করা প্রম্পটের সাথে মোড়ানো 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

4. অনুমোদন এবং কাজের চাপ চালান

কাজের চাপ অনুমোদন করুন

Primus নিম্নলিখিত সংস্থানগুলির বৈশিষ্ট্যগুলির উপর ভিত্তি করে প্রম্পট এনক্রিপশনের জন্য ব্যবহৃত তাদের KMS কী অ্যাক্সেস করার জন্য কাজের চাপকে অনুমোদন করতে চায়:

  • কি : কোড যা যাচাই করা হয়
  • কোথায় : নিরাপদ পরিবেশ
  • কে : বিশ্বস্ত একজন অপারেটর

প্রাইমাস এই প্রয়োজনীয়তার উপর ভিত্তি করে একটি অ্যাক্সেস নীতি প্রয়োগ করতে ওয়ার্কলোড আইডেন্টিটি ফেডারেশন ব্যবহার করে। ওয়ার্কলোড আইডেন্টিটি ফেডারেশন আপনাকে অ্যাট্রিবিউট শর্ত নির্দিষ্ট করতে দেয়। ওয়ার্কলোড আইডেন্টিটি পুল (ডব্লিউআইপি) দিয়ে কোন পরিচয় প্রমাণীকরণ করা যাবে তা এই শর্তগুলো সীমাবদ্ধ করে। আপনি পরিমাপ উপস্থাপন করতে এবং নীতি প্রয়োগ করতে ওয়ার্কলোড আইডেন্টিটি পুল প্রদানকারী হিসাবে WIP-তে প্রত্যয়ন যাচাইকারী পরিষেবা যোগ করতে পারেন।

ক্লাউড রিসোর্স সেটআপ ধাপের অংশ হিসেবে ওয়ার্কলোড আইডেন্টিটি পুল ইতিমধ্যেই তৈরি করা হয়েছে। এখন Primus একটি নতুন OIDC ওয়ার্কলোড আইডেন্টিটি পুল প্রদানকারী তৈরি করবে। নির্দিষ্ট --attribute-condition ওয়ার্কলোড কন্টেইনারে অ্যাক্সেস অনুমোদন করে। এটি প্রয়োজন:

  • কি : $PRIMUS_ARTIFACT_REPOSITORY সংগ্রহস্থলে সর্বশেষ $WORKLOAD_IMAGE_NAME আপলোড করা হয়েছে৷
  • কোথায় : কনফিডেন্সিয়াল স্পেস ট্রাস্টেড এক্সিকিউশন এনভায়রনমেন্ট সম্পূর্ণ সমর্থিত কনফিডেন্সিয়াল স্পেস ভিএম ইমেজে চলছে।
  • কে : 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 , নিরাপত্তা বাড়াতে এবং চলমান কাজের চাপের অখণ্ডতা নিশ্চিত করতে অন্তর্ভুক্ত রয়েছে।

কাজের চাপ চালান

এই পদক্ষেপের অংশ হিসাবে, আমরা বিশ্বস্ত স্পেস VM-এ কাজের চাপ চালাব যাতে একটি অ্যাক্সিলারেটর সংযুক্ত থাকবে। প্রয়োজনীয় TEE আর্গুমেন্ট মেটাডেটা পতাকা ব্যবহার করে পাস করা হয়। ওয়ার্কলোড কন্টেইনারের আর্গুমেন্টগুলি পতাকার " tee-cmd " অংশ ব্যবহার করে পাস করা হয়। একটি Nvidia Tesla T4 GPU দিয়ে কাজের চাপ VM সজ্জিত করতে, আমরা --accelerator=type=nvidia-tesla-t4,count=1 পতাকা ব্যবহার করব। এটি VM-এর সাথে একটি 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"

ইনফারেন্স কোয়েরি চালান

ওয়ার্কলোড ইনফারেন্স সার্ভার সফলভাবে চালু হওয়ার পর, এখন প্রাইমাস কোম্পানির কর্মীরা ইনফারেন্স সার্ভারে কোড জেনারেশনের অনুরোধ পাঠাতে পারবেন।

এই কোডল্যাবের অংশ হিসাবে আমরা ক্লায়েন্ট অ্যাপ্লিকেশন সেট আপ করতে নিম্নলিখিত স্ক্রিপ্ট ব্যবহার করব যা অনুমান সার্ভারের সাথে ইন্টারঅ্যাক্ট করবে। ক্লায়েন্ট VM সেট আপ করতে এই স্ক্রিপ্টটি চালান।

./setup_client.sh

নিম্নলিখিত ধাপগুলি দেখায় কিভাবে ক্লায়েন্ট VM-এ SSH করা যায় এবং Python ভার্চুয়াল পরিবেশের মধ্যে একটি নমুনা ক্লায়েন্ট অ্যাপ্লিকেশন চালানো যায়। এই উদাহরণ অ্যাপ্লিকেশনটি ফার্নেট লাইব্রেরির সাথে খাম এনক্রিপশন ব্যবহার করে, তবে মনে রাখবেন যে নির্দিষ্ট এনক্রিপশন লাইব্রেরিগুলি বিভিন্ন ব্যবহারের ক্ষেত্রে মানিয়ে নেওয়া যেতে পারে।

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

ক্লায়েন্ট ভিএম-এ পাইথন ভার্চুয়াল পরিবেশ সক্রিয় করতে এবং ক্লায়েন্ট অ্যাপ্লিকেশন চালানোর জন্য নিম্নলিখিত কমান্ডগুলি চালান।

source venv/bin/activate
python3 inference_client.py

এই নমুনা ক্লায়েন্ট অ্যাপ্লিকেশনের আউটপুট এনক্রিপশন এবং প্লেইনটেক্সট প্রম্পট অনুরোধ এবং তাদের সংশ্লিষ্ট এনক্রিপ্ট করা এবং ডিক্রিপ্ট করা প্রতিক্রিয়া দেখাবে।

5. পরিষ্কার করুন

এই কোডল্যাবের অংশ হিসাবে আমরা যে সংস্থানগুলি তৈরি করেছি তা পরিষ্কার করতে এখানে স্ক্রিপ্টটি ব্যবহার করা যেতে পারে। এই পরিষ্কারের অংশ হিসাবে, নিম্নলিখিত সংস্থানগুলি মুছে ফেলা হবে:

  • প্রাইমাস পরিষেবা-অ্যাকাউন্ট ( $PRIMUS_SERVICEACCOUNT )।
  • প্রাইমাস এনক্রিপশন কী ( $PRIMUS_ENC_KEY )।
  • প্রাইমাসের আর্টিফ্যাক্ট ভান্ডার ( $PRIMUS_ARTIFACT_REPOSITORY )।
  • প্রাইমাস ওয়ার্কলোড আইডেন্টিটি পুল ( $PRIMUS_WORKLOAD_IDENTITY_POOL ) এর প্রদানকারীর সাথে।
  • প্রাইমাসের ওয়ার্কলোড পরিষেবা অ্যাকাউন্ট ( $WORKLOAD_SERVICEACCOUNT )।
  • কাজের চাপ VM ( $WORKLOAD_VM ) এবং ক্লায়েন্ট VM ( $CLIENT_VM )।
./cleanup.sh

আপনি যদি অন্বেষণ শেষ করে থাকেন, তাহলে অনুগ্রহ করে আপনার প্রকল্প মুছে ফেলার কথা বিবেচনা করুন।

  • ক্লাউড প্ল্যাটফর্ম কনসোলে যান
  • আপনি যে প্রকল্পটি বন্ধ করতে চান সেটি নির্বাচন করুন, তারপর শীর্ষে 'মুছুন' এ ক্লিক করুন: এটি মুছে ফেলার জন্য প্রকল্পের সময় নির্ধারণ করে