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

1. সংক্ষিপ্ত বিবরণ

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

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

ট্রাস্টেড স্পেস যা অফার করে তা এখানে:

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

তুমি কি শিখবে

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

তোমার যা লাগবে

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

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

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

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

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

  • প্রম্পট এনক্রিপশন: ইনফারেন্স সার্ভারে একটি প্রম্পট পাঠানোর আগে, প্রতিটি কর্মচারী গুগল ক্লাউডে প্রাইমাস কর্প দ্বারা পরিচালিত একটি 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_WORKLOAD_IDENTITY_POOL সুরক্ষিত সংস্থানগুলি অ্যাক্সেস করতে ব্যবহার করে। এই ধাপে এটি $PRIMUS_INPUT_STORAGE_BUCKET বাকেটে সংরক্ষিত গ্রাহক ডেটা দেখার অনুমতি পাবে।

$PRIMUS_ENC_KEY

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

$PRIMUS_ENC_KEYRING

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

$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 প্রকল্পের জন্য আপনার স্টোরেজ অ্যাডমিন, আর্টিফ্যাক্ট রেজিস্ট্রি অ্যাডমিনিস্ট্রেটর, ক্লাউড KMS অ্যাডমিন, সার্ভিস অ্যাকাউন্ট অ্যাডমিন, IAM ওয়ার্কলোড আইডেন্টিটি পুল অ্যাডমিন ভূমিকা প্রয়োজন হবে। 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" তে সেট করা আছে কিনা তা পরীক্ষা করে একটি বিশ্বস্ত স্থান পরিবেশে ওয়ার্কলোড চলছে। অধিকন্তু, এতে নিরাপত্তা বৃদ্ধি এবং চলমান ওয়ার্কলোডের অখণ্ডতা নিশ্চিত করার জন্য workload-নির্দিষ্ট assertions, যেমন image_digest এবং image_reference অন্তর্ভুক্ত রয়েছে।

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

এই ধাপের অংশ হিসেবে, আমরা Trusted Space 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 ভার্চুয়াল পরিবেশের মধ্যে একটি নমুনা ক্লায়েন্ট অ্যাপ্লিকেশন কার্যকর করা যায়। এই উদাহরণ অ্যাপ্লিকেশনটি Fernet লাইব্রেরির সাথে এনভেলপ এনক্রিপশন ব্যবহার করে, তবে মনে রাখবেন যে নির্দিষ্ট এনক্রিপশন লাইব্রেরিগুলি বিভিন্ন ব্যবহারের ক্ষেত্রে উপযুক্তভাবে অভিযোজিত হতে পারে।

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

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

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

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

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