১. সংক্ষিপ্ত বিবরণ
এই কোডল্যাবটি কনফিডেনশিয়াল স্পেস কোডল্যাবের উপর ভিত্তি করে তৈরি। সাইনড কন্টেইনার ইমেজ সাপোর্টে, ওয়ার্কলোড আইডেন্টিটি পুল (WIP) পলিসিতে ইমেজ ডাইজেস্ট উল্লেখ করার পরিবর্তে একটি অ্যাটেস্টেড পাবলিক কী ব্যবহার করে কন্টেইনারকে অথেন্টিকেট করার একটি অপশন দেওয়া হয়েছে।
কনফিডেনশিয়াল স্পেসে স্বাক্ষরিত কন্টেইনার ইমেজ সমর্থনের ফলে কী পরিবর্তন এসেছে:
উন্নত ব্যবহারযোগ্যতা: স্বাক্ষরিত কন্টেইনার ইমেজ বৈশিষ্ট্যটি চালু হওয়ার ফলে, সহযোগী/নিরীক্ষকদের কোনো ইমেজ অনুমোদন করার ক্ষেত্রে আমরা এখন ওয়ার্কলোড ইমেজ ডাইজেস্ট পদ্ধতি থেকে কন্টেইনার সিগনেচার পদ্ধতিতে যেতে পারি।
- সরাসরি ইমেজ ডাইজেস্ট ব্যবহার করার ক্ষেত্রে, রিসোর্স মালিকদের অবশ্যই প্রতিবার একটি নতুন ইমেজ অনুমোদন করার সময় তাদের পলিসি একটি ইমেজ ডাইজেস্ট দিয়ে আপডেট করতে হবে। ইমেজ সিগনেচার ব্যবহার করলে, পলিসিতে একটি পাবলিক কী ফিঙ্গারপ্রিন্ট থাকে, যার সংশ্লিষ্ট প্রাইভেট কী-টি সহযোগী/অডিটরের মালিকানাধীন থাকে এবং অডিট করা ইমেজগুলোতে স্বাক্ষর করার জন্য ব্যবহৃত হয়।
- কিছু নিরাপত্তা মডেলের ক্ষেত্রে, নতুন ইমেজ ডাইজেস্ট ভ্যালুর তালিকা আপডেট করার চেয়ে একটি বিশ্বস্ত ইমেজ সাইনিং কী উল্লেখ করা বেশি সুবিধাজনক।
নিরাপত্তাজনিত অবনতির আশঙ্কা নেই: এই কন্টেইনার সিগনেচার পদ্ধতিটি পূর্ববর্তী ইমেজ ডাইজেস্ট পদ্ধতির তুলনায় কোনো নিরাপত্তাজনিত অবনতি ঘটাবে না, কারণ ট্রাস্ট বাউন্ডারি একই থাকে। কন্টেইনার সিগনেচার পদ্ধতিতে, রিসোর্স ওনার WIP পলিসিতে বিশ্বস্ত পাবলিক কী ফিঙ্গারপ্রিন্ট উল্লেখ করে একটি ভেরিফিকেশন কী-কে অনুমোদন দেন, এবং এই অনুমোদন যাচাইয়ের কাজটি অ্যাটেস্টেশন ভেরিফায়ার সার্ভিস ও WIP দ্বারা সম্পন্ন করা হয়; অ্যাটেস্টেশন ভেরিফায়ার সার্ভিস যাচাই করে যে সিগনেচারটি চলমান ওয়ার্কলোডের সাথে যুক্ত কিনা, এবং WIP পলিসি পরীক্ষা করে দেখে যে সার্ভিস দ্বারা অ্যাসার্ট করা পাবলিক কী-টি পলিসি দ্বারা অনুমোদিত কিনা।
শক্তিশালী নিরাপত্তা: কন্টেইনার ইমেজ সিগনেচার ব্যবহার করে ইমেজ সাইনারের উপর কিছুটা আস্থা স্থাপন করা যায়। অ্যাটেস্টেশন পলিসিতে একজন বিশ্বস্ত সাইনারের পাবলিক কী ফিঙ্গারপ্রিন্ট উল্লেখ করার মাধ্যমে, রিসোর্সের মালিক সেই সাইনারকে অনুমোদন দেন যে কোন কন্টেইনার ইমেজগুলো পলিসি মেনে চলে। অ্যাটেস্টেশন ভেরিফায়ার সার্ভিস যাচাই করে যে সিগনেচারটি চলমান ওয়ার্কলোডের সাথে যুক্ত কিনা, এবং পলিসি পরীক্ষা করে দেখে যে সিগনেচারটি তৈরি করা পাবলিক কী-টি পলিসি দ্বারা অনুমোদিত কিনা। এর মাধ্যমে, ইমেজ সাইনিং দ্বারা প্রদত্ত পরোক্ষ সুরক্ষার অতিরিক্ত স্তরটি কনফিডেনশিয়াল স্পেসের শক্তিশালী নিরাপত্তা নিশ্চয়তা বজায় রাখে।
এই পদ্ধতিগুলোর মধ্যে একমাত্র পার্থক্য হলো, পরবর্তী পদ্ধতিটিতে একটি অতিরিক্ত পরোক্ষ স্তর ব্যবহার করা হয়, যেখানে ওয়ার্কলোড ইমেজগুলোকে একটি সাইনিং কী দিয়ে অনুমোদন করা হয়। এতে কোনো নতুন নিরাপত্তা ঝুঁকি তৈরি হয় না, কারণ বিশ্বাসের সীমা একই থাকে।
আপনি যা শিখবেন
এই কোডল্যাবে, আপনি শিখবেন কীভাবে সুরক্ষিত রিসোর্সগুলিতে অ্যাক্সেস অনুমোদন করার জন্য একটি কন্টেইনার ইমেজ সিগনেচার ব্যবহার করতে হয়:
-
cosignব্যবহার করে কীভাবে একটি অডিট করা কন্টেইনার ইমেজ সাইন করবেন - সিগনেচার ডিসকভারি এবং স্টোরেজের জন্য কন্টেইনার ইমেজ সিগনেচারগুলো OCI রেজিস্ট্রিগুলোতে কীভাবে আপলোড করবেন
- Confidential Space চালানোর জন্য প্রয়োজনীয় ক্লাউড রিসোর্সগুলি কীভাবে কনফিগার করবেন
- স্বাক্ষরিত কন্টেইনার ইমেজ সাপোর্টের মাধ্যমে একটি কনফিডেনশিয়াল স্পেসে ওয়ার্কলোড কীভাবে চালাবেন
এই কোডল্যাবটি আপনাকে দেখাবে কিভাবে কনফিডেনশিয়াল স্পেস ব্যবহার করে গুগল কম্পিউট ইঞ্জিনে চলমান, একটি বিশ্বস্ত কী দ্বারা স্বাক্ষরিত কন্টেইনার ইমেজকে রিমোট অ্যাটেস্ট করা যায়।
আপনার যা যা লাগবে
- সম্পূর্ণ গোপনীয় স্থান কোডল্যাব
- একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রকল্প
- একটি ব্রাউজার, যেমন ক্রোম বা ফায়ারফক্স
- Vim, Emacs বা Nano-এর মতো স্ট্যান্ডার্ড লিনাক্স টেক্সট এডিটরগুলির সাথে পরিচিতি
- সিগস্টোর কোসাইন সম্পর্কে প্রাথমিক জ্ঞান
- গুগল কম্পিউট ইঞ্জিন ( কোডল্যাব ), কনফিডেনশিয়াল ভিএম , কন্টেইনার এবং রিমোট রিপোজিটরি সম্পর্কে প্রাথমিক জ্ঞান।
- ক্লাউড কেএমএস ( কোডল্যাব ) সম্পর্কে প্রাথমিক জ্ঞান
- সার্ভিস অ্যাকাউন্ট , ওয়ার্কলোড আইডেন্টিটি ফেডারেশন এবং অ্যাট্রিবিউট কন্ডিশন সম্পর্কে প্রাথমিক জ্ঞান।
- আর্টিফ্যাক্ট রেজিস্ট্রি সম্পর্কে প্রাথমিক জ্ঞান
- ডিজিটাল স্বাক্ষর সম্পর্কে প্রাথমিক জ্ঞান
স্বাক্ষরিত কন্টেইনার চিত্র সহ একটি গোপনীয় স্থানে জড়িত ভূমিকাসমূহ
এই কোডল্যাবে, প্রাইমাস ব্যাংক অডিটর এবং রিসোর্স ওনার হবে, যা নিম্নলিখিত বিষয়গুলির জন্য দায়ী থাকবে:
- নমুনা ডেটা দিয়ে প্রয়োজনীয় রিসোর্স সেট আপ করা হচ্ছে।
- ওয়ার্কলোড কোড নিরীক্ষা করা।
- ওয়ার্কলোড ইমেজটি সাইন করতে
cosignব্যবহার করা হচ্ছে। - রিপোজিটরিতে স্বাক্ষর আপলোড করা হচ্ছে।
- গ্রাহকের ডেটা সুরক্ষিত করার জন্য WIP পলিসি কনফিগার করা হচ্ছে।
সেকেন্ডাস ব্যাংক ওয়ার্কলোডের লেখক ও পরিচালক হবে এবং নিম্নলিখিত বিষয়গুলির জন্য দায়ী থাকবে:
- ফলাফল সংরক্ষণের জন্য প্রয়োজনীয় রিসোর্স সেট আপ করা হচ্ছে।
- ওয়ার্কলোড কোড লেখা।
- ওয়ার্কলোড ইমেজটি প্রকাশ করা হচ্ছে।
- স্বাক্ষরিত কন্টেইনার ইমেজ সমর্থনের মাধ্যমে গোপনীয় স্থানে ওয়ার্কলোড চালানো হচ্ছে।
সেকেন্ডাস ব্যাংক এমন একটি ওয়ার্কলোড তৈরি ও প্রকাশ করবে যা প্রাইমাস ব্যাংকের মালিকানাধীন একটি ক্লাউড স্টোরেজ বাকেটে সংরক্ষিত গ্রাহক ডেটা কোয়েরি করবে। প্রাইমাস ব্যাংক ওয়ার্কলোডটি নিরীক্ষা করবে, কন্টেইনার ইমেজটিতে স্বাক্ষর করবে এবং অনুমোদিত ওয়ার্কলোডগুলোকে তাদের ডেটাতে অ্যাক্সেস দেওয়ার জন্য WIP পলিসি কনফিগার করবে। এই ওয়ার্কলোড সম্পাদনের ফলাফল সেকেন্ডাস ব্যাংকের মালিকানাধীন একটি ক্লাউড স্টোরেজ বাকেটে সংরক্ষণ করা হবে।
একটি গোপনীয় স্থান স্থাপনের সাথে জড়িত সম্পদ
এই কোডল্যাবে এমন কিছু ভেরিয়েবলের উল্লেখ আছে, যেগুলোকে আপনার GCP প্রজেক্টের জন্য উপযুক্ত মানে সেট করতে হবে। এই কোডল্যাবের কমান্ডগুলো ধরে নেয় যে এই ভেরিয়েবলগুলো সেট করা হয়েছে। (উদাহরণস্বরূপ, প্রাইমাস ব্যাংকের ইনপুট স্টোরেজ বাকেটের নাম সেট করার জন্য export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket' ব্যবহার করা যেতে পারে।) যদি রিসোর্স-নামের ভেরিয়েবলগুলো সেট করা না থাকে, তাহলে এটি GCP প্রজেক্ট-আইডির উপর ভিত্তি করে তৈরি করা হবে।
প্রাইমাস প্রোজেক্টে নিম্নলিখিত বিষয়গুলো কনফিগার করুন:
-
$PRIMUS_INPUT_STORAGE_BUCKET: যে বাকেটে গ্রাহকের ডেটা ফাইল সংরক্ষিত থাকে। -
$PRIMUS_WORKLOAD_IDENTITY_POOL: ওয়ার্কলোড আইডেন্টিটি পুল (WIP) যা ক্লেইমগুলো যাচাই করে। -
$PRIMUS_WIP_PROVIDER: ওয়ার্কলোড আইডেন্টিটি পুল প্রোভাইডার, যার মধ্যে অ্যাটেস্টেশন ভেরিফায়ার সার্ভিস দ্বারা স্বাক্ষরিত টোকেন ব্যবহারের জন্য অনুমোদনের শর্ত অন্তর্ভুক্ত থাকে। -
$PRIMUS_SERVICEACCOUNT: এই সার্ভিস অ্যাকাউন্টটি$PRIMUS_WORKLOAD_IDENTITY_POOLসুরক্ষিত রিসোর্সগুলো অ্যাক্সেস করার জন্য ব্যবহার করে। এই ধাপে,$PRIMUS_INPUT_STORAGE_BUCKETবাকেটে সংরক্ষিত গ্রাহকের ডেটা দেখার অনুমতি এটির রয়েছে। -
$PRIMUS_ENC_KEY:$PRIMUS_INPUT_STORAGE_BUCKETএ সংরক্ষিত ডেটা এনক্রিপ্ট করতে ব্যবহৃত KMS কী।
এই কোডল্যাবে নতুন রিসোর্সসমূহ:
-
$PRIMUS_COSIGN_REPOSITORY: ওয়ার্কলোড ইমেজ সিগনেচার সংরক্ষণের জন্য আর্টিফ্যাক্ট রেজিস্ট্রি। -
$PRIMUS_SIGNING_KEY: অডিটর/ডেটা-সহযোগীদের (যেমন এই ক্ষেত্রে প্রাইমাস ব্যাংক) দ্বারা ওয়ার্কলোড ইমেজ স্বাক্ষর করার জন্য ব্যবহৃত KMS কী।
সেকেন্ডাস প্রোজেক্টে নিম্নলিখিত বিষয়গুলো কনফিগার করুন:
-
$SECUNDUS_ARTIFACT_REGISTRY: আর্টিফ্যাক্ট রেজিস্ট্রি যেখানে ওয়ার্কলোড ডকার ইমেজ পুশ করা হবে। -
$WORKLOAD_IMAGE_NAME: ওয়ার্কলোড ডকার ইমেজের নাম। -
$WORKLOAD_IMAGE_TAG: ওয়ার্কলোড ডকার ইমেজের ট্যাগ। -
$WORKLOAD_SERVICEACCOUNT: সেই সার্ভিস অ্যাকাউন্ট যার কাছে ওয়ার্কলোড চালনাকারী গোপনীয় ভিএম (VM) অ্যাক্সেস করার অনুমতি আছে। -
$SECUNDUS_RESULT_BUCKET: যে বাকেটটি ওয়ার্কলোডের ফলাফল সংরক্ষণ করে।
অন্যান্য সম্পদ:
-
primus_customer_list.csvফাইলে গ্রাহকের ডেটা রয়েছে। আমরা এই ডেটা$PRIMUS_INPUT_STORAGE_BUCKETএ আপলোড করব এবং একটি ওয়ার্কলোড তৈরি করব যা এই ডেটা কোয়েরি করবে।
বিদ্যমান কর্মপ্রবাহ
যখন আপনি কনফিডেনশিয়াল স্পেসে ওয়ার্কলোডটি চালান, তখন কনফিগার করা রিসোর্সগুলো ব্যবহার করে নিম্নলিখিত প্রক্রিয়াটি সম্পন্ন হয়:
- ওয়ার্কলোডটি WIP থেকে
$PRIMUS_SERVICEACCOUNTএর জন্য একটি সাধারণ গুগল অ্যাক্সেস টোকেন অনুরোধ করে। এটি ওয়ার্কলোড এবং এনভায়রনমেন্ট ক্লেইমসহ একটি অ্যাটেস্টেশন ভেরিফায়ার সার্ভিস টোকেন প্রদান করে। - যদি অ্যাটেস্টেশন ভেরিফায়ার সার্ভিস টোকেনের ওয়ার্কলোড মেজারমেন্ট ক্লেইমগুলো WIP-এর অ্যাট্রিবিউট কন্ডিশনের সাথে মিলে যায়, তাহলে এটি
$PRIMUS_SERVICEACCOUNT. - ওয়ার্কলোডটি
$PRIMUS_INPUT_STORAGE_BUCKETবাকেটে থাকা গ্রাহকের ডেটা অ্যাক্সেস করার জন্য$PRIMUS_SERVICEACCOUNTএর সাথে যুক্ত সার্ভিস অ্যাকাউন্ট অ্যাক্সেস টোকেন ব্যবহার করে। - ওয়ার্কলোডটি সেই ডেটার উপর একটি অপারেশন সম্পাদন করে।
- ওয়ার্কলোডটি
$WORKLOAD_SERVICEACCOUNTসার্ভিস অ্যাকাউন্ট ব্যবহার করে সেই অপারেশনের ফলাফল$SECUNDUS_RESULT_STORAGE_BUCKETবাকেটে লেখে।
স্বাক্ষরিত কন্টেইনার সমর্থন সহ নতুন ওয়ার্কফ্লো
স্বাক্ষরিত কন্টেইনার সমর্থন বিদ্যমান ওয়ার্কফ্লোতে একীভূত করা হবে, যেমনটি নীচে তুলে ধরা হয়েছে। যখন আপনি স্বাক্ষরিত কন্টেইনার ইমেজ সমর্থন সহ কনফিডেনশিয়াল স্পেসে ওয়ার্কলোড চালান, তখন কনফিগার করা রিসোর্স ব্যবহার করে নিম্নলিখিত প্রক্রিয়াটি সম্পন্ন হয়:
- কনফিডেনশিয়াল স্পেস বর্তমানে চলমান ওয়ার্কলোড ইমেজের সাথে সম্পর্কিত যেকোনো কন্টেইনার সিগনেচার শনাক্ত করে এবং সেগুলো অ্যাটেস্টেশন ভেরিফায়ারের কাছে পাঠায়। অ্যাটেস্টেশন ভেরিফায়ার সিগনেচারটি যাচাই করে এবং যেকোনো বৈধ সিগনেচারকে অ্যাটেস্টেশন ক্লেইমগুলোতে অন্তর্ভুক্ত করে।
- ওয়ার্কলোডটি WIP থেকে
$PRIMUS_SERVICEACCOUNTএর জন্য একটি সাধারণ গুগল অ্যাক্সেস টোকেন অনুরোধ করে। এটি ওয়ার্কলোড এবং এনভায়রনমেন্ট ক্লেইমসহ একটি অ্যাটেস্টেশন ভেরিফায়ার সার্ভিস টোকেন প্রদান করে। - যদি অ্যাটেস্টেশন ভেরিফায়ার সার্ভিস টোকেনের কন্টেইনার সিগনেচার ক্লেইমগুলো WIP-এর অ্যাট্রিবিউট শর্তের সাথে মিলে যায়, তবে এটি
$PRIMUS_SERVICEACCOUNTজন্য অ্যাক্সেস টোকেনটি ফেরত দেয় । - ওয়ার্কলোডটি
$PRIMUS_INPUT_STORAGE_BUCKETবাকেটে থাকা গ্রাহকের ডেটা অ্যাক্সেস করার জন্য$PRIMUS_SERVICEACCOUNTএর সাথে যুক্ত সার্ভিস অ্যাকাউন্ট অ্যাক্সেস টোকেন ব্যবহার করে। - ওয়ার্কলোডটি সেই ডেটার উপর একটি অপারেশন সম্পাদন করে।
- ওয়ার্কলোডটি
$WORKLOAD_SERVICEACCOUNTব্যবহার করে সেই অপারেশনের ফলাফল$SECUNDUS_RESULT_STORAGE_BUCKETবাকেটে লেখে।
২. ক্লাউড রিসোর্স সেট আপ করুন
কনফিডেনশিয়াল স্পেস সেটআপের অংশ হিসেবে, প্রথমে আপনাকে প্রাইমাস এবং সেকেন্ডাস ব্যাংকের জিসিপি (GCP) প্রোজেক্টের অধীনে প্রয়োজনীয় ক্লাউড রিসোর্সগুলো তৈরি করতে হবে। এই কোডল্যাবের জন্য রিসোর্সগুলো হলো:
প্রাইমাস প্রকল্পে:
- কোড অডিট করার পর, সেকেন্ডাস ওয়ার্কলোড সাইন করতে কেএমএস সাইনিং কী ব্যবহার করা হয়।
- সহ-স্বাক্ষরিত স্বাক্ষরগুলি সংরক্ষণ করার জন্য আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি।
সেকেন্ডাস প্রোজেক্টে কোনো নতুন রিসোর্স নেই। এই রিসোর্সগুলো সেট আপ হয়ে গেলে, আপনি প্রয়োজনীয় রোল এবং পারমিশনসহ ওয়ার্কলোডের জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন। এরপর আপনি একটি ওয়ার্কলোড ইমেজ তৈরি করবেন এবং অডিটর, প্রাইমাস ব্যাংক, ওয়ার্কলোড ইমেজটিতে স্বাক্ষর করবে। তারপর ডেটা-কোলাবোরেটররা (এই কোডল্যাবে প্রাইমাস ব্যাংক) ওয়ার্কলোডটিকে অনুমোদন দেবে এবং ওয়ার্কলোড অপারেটর (এই ক্ষেত্রে সেকেন্ডাস ব্যাংক) ওয়ার্কলোডটি চালাবে।
কনফিডেনশিয়াল স্পেস সেটআপের অংশ হিসেবে, আপনাকে প্রাইমাস এবং সেকেন্ডাস জিসিপি প্রজেক্টগুলোতে প্রয়োজনীয় ক্লাউড রিসোর্স তৈরি করতে হবে।
শুরু করার আগে
- এই কোডল্যাবের অংশ হিসেবে ব্যবহৃত প্রয়োজনীয় স্ক্রিপ্টগুলো পেতে নিচের কমান্ডটি ব্যবহার করে এই রিপোজিটরিটি ক্লোন করুন।
git clone https://github.com/GoogleCloudPlatform/confidential-space
- এই কোডল্যাবের ডিরেক্টরি পরিবর্তন করুন।
cd confidential-space/codelabs/signed_container_codelab/scripts
- নিচে দেখানো অনুযায়ী প্রয়োজনীয় প্রজেক্টগুলো সেট করেছেন কিনা তা নিশ্চিত করুন।
export PRIMUS_PROJECT_ID=<GCP project id of primus bank>
export SECUNDUS_PROJECT_ID=<GCP project id of secundus bank>
- এই কমান্ডটি ব্যবহার করে উপরে উল্লিখিত রিসোর্স নামগুলির জন্য ভেরিয়েবল সেট করুন। আপনি এই ভেরিয়েবলগুলি ব্যবহার করে রিসোর্স নামগুলি ওভাররাইড করতে পারেন (যেমন
export PRIMUS_INPUT_STORAGE_BUCKET='my-input-bucket')। - রিসোর্স নামগুলোর জন্য আপনার প্রজেক্ট আইডির উপর ভিত্তি করে বাকি ভেরিয়েবল নামগুলোর মান সেট করতে নিম্নলিখিত স্ক্রিপ্টটি চালান।
source config_env.sh
- এখান থেকে নির্দেশাবলী অনুসরণ করে সহ-স্বাক্ষর ইনস্টল করুন।
প্রাইমাস ব্যাংক রিসোর্স সেট আপ করুন
এই ধাপের অংশ হিসেবে, আপনি প্রাইমাস ব্যাংকের জন্য প্রয়োজনীয় ক্লাউড রিসোর্সগুলো সেট আপ করবেন। প্রাইমাস ব্যাংকের জন্য রিসোর্সগুলো সেট আপ করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। এই ধাপগুলোর অংশ হিসেবে, নিচে উল্লেখিত রিসোর্সগুলো তৈরি হবে:
- প্রাইমাস ব্যাংকের এনক্রিপ্টেড গ্রাহক ডেটা ফাইল সংরক্ষণের জন্য ক্লাউড স্টোরেজ বাকেট (
$PRIMUS_INPUT_STORAGE_BUCKET)। - প্রাইমাস ব্যাংকের ডেটা ফাইল এনক্রিপ্ট করার জন্য KMS-এ এনক্রিপশন কী (
$PRIMUS_ENC_KEY) এবং কী-রিং ($PRIMUS_ENC_KEYRING)। - এর প্রোভাইডারের অধীনে কনফিগার করা অ্যাট্রিবিউট শর্তাবলীর উপর ভিত্তি করে ক্লেইম যাচাই করার জন্য ওয়ার্কলোড আইডেন্টিটি পুল (
$PRIMUS_WORKLOAD_IDENTITY_POOL)। - উপরে উল্লিখিত ওয়ার্কলোড আইডেন্টিটি পুল (
$PRIMUS_WORKLOAD_IDENTITY_POOL)-এর সাথে নিম্নলিখিত IAM অ্যাক্সেস সহ সংযুক্ত সার্ভিস অ্যাকাউন্ট ($PRIMUS_SERVICEACCOUNT): - KMS কী ব্যবহার করে ডেটা ডিক্রিপ্ট করার জন্য
roles/cloudkms.cryptoKeyDecrypterব্যবহার করা হয়। - ক্লাউড স্টোরেজ বাকেট থেকে ডেটা পড়ার জন্য
objectViewer। - এই পরিষেবা অ্যাকাউন্টটিকে ওয়ার্কলোড আইডেন্টিটি পুলে সংযুক্ত করার জন্য
roles/iam.workloadIdentityUser।
./setup_primus_bank_resources.sh
Secundus ব্যাংক সম্পদ সেট আপ করুন
এই ধাপের অংশ হিসেবে, আপনি সেকেন্ডাস ব্যাংকের জন্য প্রয়োজনীয় ক্লাউড রিসোর্সগুলো সেট আপ করবেন। সেকেন্ডাস ব্যাংকের জন্য রিসোর্সগুলো সেট আপ করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। এই ধাপের অংশ হিসেবে নিচে উল্লেখিত রিসোর্সগুলো তৈরি হবে:
- সেকেন্ডাস ব্যাংক কর্তৃক ওয়ার্কলোড সম্পাদনের ফলাফল সংরক্ষণের জন্য ক্লাউড স্টোরেজ বাকেট (
$SECUNDUS_RESULT_STORAGE_BUCKET)।
./setup_secundus_bank_resources.sh
৩. ওয়ার্কলোড তৈরি ও স্বাক্ষর করুন
ওয়ার্কলোড পরিষেবা অ্যাকাউন্ট তৈরি করুন
এখন, আপনি প্রয়োজনীয় রোল এবং পারমিশন সহ ওয়ার্কলোডের জন্য একটি সার্ভিস অ্যাকাউন্ট তৈরি করবেন। সেকেন্ডাস ব্যাংক প্রজেক্টে একটি ওয়ার্কলোড সার্ভিস অ্যাকাউন্ট তৈরি করতে নিম্নলিখিত স্ক্রিপ্টটি চালান। এই সার্ভিস-অ্যাকাউন্টটি সেই ভিএম (VM) ব্যবহার করবে যেটি ওয়ার্কলোডটি চালায়।
- এই ওয়ার্কলোড সার্ভিস-অ্যাকাউন্ট (
$WORKLOAD_SERVICEACCOUNT)-এর নিম্নলিখিত ভূমিকাগুলো থাকবে: -
confidentialcomputing.workloadUserএকটি প্রত্যয়ন টোকেন পেতে হবে। - ক্লাউড লগিং-এ লগ লেখার জন্য
logging.logWriterব্যবহার করা হয়। -
$PRIMUS_INPUT_STORAGE_BUCKETক্লাউড স্টোরেজ বাকেট থেকে ডেটা পড়ার জন্যobjectViewer। -
objectAdminওয়ার্কলোডের ফলাফল$SECUNDUS_RESULT_STORAGE_BUCKETক্লাউড স্টোরেজ বাকেটে লিখবে।
./create_workload_serviceaccount.sh
কাজের চাপ তৈরি করুন
এই ধাপের অংশ হিসেবে, আপনি একটি ওয়ার্কলোড ডকার ইমেজ তৈরি করবেন। এই কোডল্যাবে ব্যবহৃত ওয়ার্কলোডটি হলো একটি সাধারণ CLI-ভিত্তিক Go অ্যাপ, যা আর্গুমেন্টে প্রদত্ত একটি ভৌগোলিক অবস্থান থেকে (প্রাইমাস ব্যাংকের গ্রাহক ডেটা থেকে) গ্রাহক সংখ্যা গণনা করে। এমন একটি ওয়ার্কলোড তৈরি করতে নিচের স্ক্রিপ্টটি চালান, যেখানে নিম্নলিখিত ধাপগুলো সম্পন্ন করা হবে:
- সেকেন্ডাস ব্যাংকের মালিকানাধীন আর্টিফ্যাক্ট রেজিস্ট্রি (
$SECUNDUS_ARTIFACT_REGISTRY) তৈরি করুন। - প্রয়োজনীয় রিসোর্সের নামগুলো দিয়ে ওয়ার্কলোড কোডটি আপডেট করুন। এই কোডল্যাবের জন্য ব্যবহৃত ওয়ার্কলোড কোডটি নিচে দেওয়া হলো।
- গো বাইনারি বিল্ড করুন এবং ওয়ার্কলোড কোডের ডকার ইমেজ তৈরির জন্য ডকারফাইল তৈরি করুন। এই কোডল্যাবের জন্য ব্যবহৃত ডকারফাইলটি নিচে দেওয়া হলো।
- সেকেন্ডাস ব্যাংকের মালিকানাধীন আর্টিফ্যাক্ট রেজিস্ট্রি (
$SECUNDUS_ARTIFACT_REGISTRY)-তে ডকার ইমেজটি তৈরি করে প্রকাশ করুন। -
$WORKLOAD_SERVICEACCOUNT$SECUNDUS_ARTIFACT_REGISTRYএর জন্য রিড পারমিশন দিন। ওয়ার্কলোড কন্টেইনারের আর্টিফ্যাক্ট রেজিস্ট্রি থেকে ওয়ার্কলোড ডকার ইমেজ পুল করার জন্য এটি প্রয়োজন।
./create_workload.sh
কাজের চাপ চিহ্নিত করুন
আমরা ওয়ার্কলোড ইমেজটি সাইন করার জন্য Cosign ব্যবহার করব। Cosign ডিফল্টভাবে যে ইমেজটি সাইন করছে, সেটির সাথেই সিগনেচারগুলো সংরক্ষণ করে। সিগনেচারের জন্য একটি ভিন্ন রিপোজিটরি নির্দিষ্ট করতে, আপনি COSIGN_REPOSITORY এনভায়রনমেন্ট ভেরিয়েবলটি সেট করতে পারেন।
এখানে আমরা উদাহরণ হিসেবে আর্টিফ্যাক্ট রেজিস্ট্রি ব্যবহার করব। আপনি আপনার পছন্দ অনুযায়ী ডকার হাব, এডব্লিউএস কোডআর্টিফ্যাক্ট-এর মতো অন্যান্য ওসিআই-ভিত্তিক রেজিস্ট্রিও বেছে নিতে পারেন।
- একটি আর্টিফ্যাক্ট রেজিস্ট্রি ডকার রিপোজিটরি তৈরি করুন।
gcloud config set project $PRIMUS_PROJECT_ID
gcloud artifacts repositories create $PRIMUS_COSIGN_REPOSITORY \
--repository-format=docker --location=${PRIMUS_PROJECT_REPOSITORY_REGION}
- একটি ওয়ার্কলোড ইমেজ সাইন করার জন্য KMS-এর অধীনে একটি কী-রিং এবং কী তৈরি করুন।
gcloud config set project $PRIMUS_PROJECT_ID
gcloud kms keyrings create $PRIMUS_SIGNING_KEYRING \
--location=${PRIMUS_PROJECT_LOCATION}
gcloud kms keys create $PRIMUS_SIGNING_KEY \
--keyring=$PRIMUS_SIGNING_KEYRING \
--purpose=asymmetric-signing \
--default-algorithm=ec-sign-p256-sha256 \
--location=${PRIMUS_PROJECT_LOCATION}
- আর্টিফ্যাক্ট রেজিস্ট্রির জন্য,
$LOCATION/$PROJECT/$REPOSITORY/$IMAGE_NAMEএর মতো একটি সম্পূর্ণ ইমেজের নাম প্রয়োজন। সিগনেচার সংরক্ষণের জন্য আপনি রিপোজিটরিতে যেকোনো কন্টেইনার ইমেজ আপলোড করতে পারেন।
export COSIGN_REPOSITORY=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo
-
$WORKLOAD_SERVICEACCOUNTসার্ভিস অ্যাকাউন্টকে$PRIMUS_COSIGN_REPOSITORYরিপোজিটরিতে ভিউয়ার (Viewer) রোলটি প্রদান করুন। এর ফলে কনফিডেনশিয়াল স্পেস (Confidential Space)$PRIMUS_COSIGN_REPOSITORYতে আপলোড করা যেকোনো কন্টেইনার ইমেজ সিগনেচার খুঁজে বের করতে পারবে।
gcloud artifacts repositories add-iam-policy-binding ${PRIMUS_COSIGN_REPOSITORY} \
--project=${PRIMUS_PROJECT_ID} --role='roles/viewer' --location=us \
--member="serviceAccount:${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com"
Cosign একাধিক সাইনিং বৈশিষ্ট্য সহ একটি শক্তিশালী টুল। আমাদের ব্যবহারের ক্ষেত্রে, শুধুমাত্র একটি কী পেয়ার দিয়ে সাইন করার জন্য Cosign প্রয়োজন। এই সাইন করা কন্টেইনার ইমেজ বৈশিষ্ট্যের জন্য Cosign-এর কী-বিহীন সাইনিং সমর্থিত নয়।
কী পেয়ার দিয়ে সাইন করার সময় দুটি বিকল্প থাকে:
- Cosign দ্বারা তৈরি একটি স্থানীয় কী পেয়ার দিয়ে স্বাক্ষর করুন।
- অন্য কোথাও সংরক্ষিত (যেমন, একটি KMS-এ) একটি কী পেয়ার দিয়ে স্বাক্ষর করুন।
- আপনার কাছে কী-পেয়ার না থাকলে Cosign-এ একটি তৈরি করুন। আরও বিস্তারিত জানতে সেলফ-ম্যানেজড কী দিয়ে সাইনিং দেখুন। এখানে আমরা কী-পেয়ার তৈরি এবং ওয়ার্কলোড সাইন করার উভয় পদ্ধতিই (স্থানীয়ভাবে এবং KMS প্রোভাইডার ব্যবহার করে) উল্লেখ করেছি, অনুগ্রহ করে ওয়ার্কলোড কন্টেইনারটি সাইন করার জন্য এই পদ্ধতিগুলোর মধ্যে যেকোনো একটি অনুসরণ করুন।
// Set Application Default Credentials.
gcloud auth application-default login
// Generate keys using a KMS provider.
cosign generate-key-pair --kms <provider>://<key>
// Generate keys using Cosign.
cosign generate-key-pair
উপরের <provider>://<key> এর পরিবর্তে gcpkms://projects/$PRIMUS_PROJECT_ID/locations/global/keyRings/$PRIMUS_SIGNING_KEYRING/cryptoKeys/$PRIMUS_SIGNING_KEY/cryptoKeyVersions/$PRIMUS_SIGNING_KEYVERSION ব্যবহার করুন।
- <প্রোভাইডার> : আপনি যে KMS সলিউশনটি ব্যবহার করছেন তাকে বোঝায়
- <key> : KMS-এ কী পাথকে বোঝায়
- যাচাইয়ের জন্য পাবলিক কী-টি সংগ্রহ করুন।
// For KMS providers.
cosign public-key --key <some provider>://<some key> > pub.pem
// For local key pair signing.
cosign public-key --key cosign.key > pub.pem
- Cosign ব্যবহার করে ওয়ার্কলোডটি সাইন করুন। পাবলিক কী-টির উপর আনপ্যাডেড বেস৬৪ এনকোডিং সম্পাদন করুন।
PUB=$(cat pub.pem | openssl base64)
// Remove spaces and trailing "=" signs.
PUB=$(echo $PUB | tr -d '[:space:]' | sed 's/[=]*$//')
- এক্সপোর্ট করা পাবলিক কী এবং সিগনেচার অ্যালগরিদম সংযুক্ত করে Cosign ব্যবহার করে ওয়ার্কলোডটি সাইন করুন।
IMAGE_REFERENCE=us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/$SECUNDUS_ARTIFACT_REPOSITORY/$WORKLOAD_IMAGE_NAME:$WORKLOAD_IMAGE_TAG
// Sign with KMS support.
cosign sign --key <some provider>://<some key> $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
// Sign with a local key pair.
cosign sign --key cosign.key $IMAGE_REFERENCE \
-a dev.cosignproject.cosign/sigalg=ECDSA_P256_SHA256 \
-a dev.cosignproject.cosign/pub=$PUB
--key[প্রয়োজনীয়] নির্দিষ্ট করে দেয় কোন সাইনিং কী ব্যবহার করতে হবে। যখন কোনো KMS প্রোভাইডার দ্বারা পরিচালিত কী-এর উল্লেখ করা হয়, তখন অনুগ্রহ করে Sigstore KMS সাপোর্ট থেকে নির্দিষ্ট URI ফরম্যাট অনুসরণ করুন। যখন Cosign দ্বারা জেনারেট করা কী-এর উল্লেখ করা হয়, তখন এর পরিবর্তে cosign.key ব্যবহার করুন।-
$IMAGE_REFERENCE[প্রয়োজনীয়] নির্দিষ্ট করে কোন কন্টেইনার ইমেজটি সাইন করতে হবে।IMAGE_REFERENCEএর ফরম্যাট ট্যাগ বা ইমেজ ডাইজেস্ট দ্বারা শনাক্ত করা যায়। উদাহরণস্বরূপ:us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container:latest or us-docker.pkg.dev/$SECUNDUS_PROJECT_ID/secundus-workloads/workload-container[IMAGE-digest] - -a [REQUIRED] সিগনেচার পেলোডের সাথে সংযুক্ত অ্যানোটেশনগুলো নির্দিষ্ট করে। কনফিডেনশিয়াল স্পেস স্বাক্ষরিত কন্টেইনার ইমেজগুলোর জন্য, সিগনেচার পেলোডের সাথে পাবলিক কী এবং সিগনেচার অ্যালগরিদম সংযুক্ত থাকা আবশ্যক।
-
dev.cosignproject.cosign/sigalgশুধুমাত্র তিনটি মান গ্রহণ করে: - RSASSA_PSS_SHA256: PSS প্যাডিং সহ RSASSA অ্যালগরিদম এবং একটি SHA256 ডাইজেস্ট।
- RSASSA_PKCS1V15_SHA256: PKCS#1 v1.5 প্যাডিং এবং একটি SHA256 ডাইজেস্ট সহ RSASSA অ্যালগরিদম।
- ECDSA_P256_SHA256: P-256 কার্ভের উপর ভিত্তি করে তৈরি ECDSA, যার একটি SHA256 ডাইজেস্ট রয়েছে। এটি Cosign দ্বারা তৈরি কী পেয়ারের জন্য ডিফল্ট সিগনেচার অ্যালগরিদমও।
- ডকার রিপোজিটরিতে স্বাক্ষর আপলোড করুন
Cosign স্বয়ংক্রিয়ভাবে স্বাক্ষরগুলো নির্দিষ্ট COSIGN_REPOSITORY.
৪. ওয়ার্কলোড অনুমোদন ও চালনা করুন
ওয়ার্কলোড অনুমোদন করুন
এই ধাপের অংশ হিসেবে, আমরা ওয়ার্কলোড আইডেন্টিটি পুলের ( $PRIMUS_WORKLOAD_IDENTITY_POOL ) অধীনে ওয়ার্কলোড আইডেন্টিটি প্রোভাইডারটি সেট আপ করব। নিচে দেখানো অনুযায়ী ওয়ার্কলোড আইডেন্টিটির জন্য অ্যাট্রিবিউট-কন্ডিশন কনফিগার করা আছে। শর্তগুলোর মধ্যে একটি হলো সাইনিং পাবলিক কী-এর ফিঙ্গারপ্রিন্টের সাথে ওয়ার্কলোড ইমেজ সিগনেচারের ফিঙ্গারপ্রিন্ট যাচাই করা। এই অ্যাট্রিবিউট কন্ডিশনের ফলে, যখন সেকেন্ডাস ব্যাংক একটি নতুন ওয়ার্কলোড ইমেজ রিলিজ করে, তখন প্রাইমাস ব্যাংক ওয়ার্কলোড কোডটি অডিট করে এবং ইমেজ ডাইজেস্ট দিয়ে WIP পলিসি আপডেট করার প্রয়োজন ছাড়াই নতুন ওয়ার্কলোড ইমেজটিতে সাইন করে।
gcloud config set project $PRIMUS_PROJECT_ID
PUBLIC_KEY_FINGERPRINT=$(openssl pkey -pubin -in pub.pem -outform DER | openssl sha256 | cut -d' ' -f2)
gcloud iam workload-identity-pools providers create-oidc ${PRIMUS_WIP_PROVIDER} \
--location="global" \
--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 == 'CONFIDENTIAL_SPACE' &&
'STABLE' in assertion.submods.confidential_space.support_attributes
&& '${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com' in
assertion.google_service_accounts
&& ['ECDSA_P256_SHA256:${PUBLIC_KEY_FINGERPRINT}']
.exists(fingerprint, fingerprint in assertion.submods.container.image_signatures.map(sig,sig.signature_algorithm+':'+sig.key_id))"
রান ওয়ার্কলোড
এই ধাপের অংশ হিসেবে, আমরা কনফিডেনশিয়াল ভিএম-এ ওয়ার্কলোডটি চালাব। প্রয়োজনীয় TEE আর্গুমেন্টগুলো মেটাডেটা ফ্ল্যাগ ব্যবহার করে পাস করা হয়। ওয়ার্কলোড কন্টেইনারের জন্য আর্গুমেন্টগুলো ফ্ল্যাগের " tee-cmd " অংশটি ব্যবহার করে পাস করা হয়। ওয়ার্কলোডটি তার ফলাফল $SECUNDUS_RESULT_STORAGE_BUCKET এ প্রকাশ করার জন্য কোড করা হয়েছে।
gcloud compute instances create ${WORKLOAD_VM} \
--confidential-compute-type=SEV \
--shielded-secure-boot \
--maintenance-policy=MIGRATE \
--scopes=cloud-platform \
--zone=${SECUNDUS_PROJECT_ZONE} \
--project=${SECUNDUS_PROJECT_ID} \
--image-project=confidential-space-images \
--image-family=confidential-space \
--service-account=${WORKLOAD_SERVICEACCOUNT}@${SECUNDUS_PROJECT_ID}.iam.gserviceaccount.com \
--metadata "^~^tee-image-reference=us-docker.pkg.dev/${SECUNDUS_PROJECT_ID}/${SECUNDUS_ARTIFACT_REPOSITORY}/${WORKLOAD_IMAGE_NAME}:${WORKLOAD_IMAGE_TAG}~tee-restart-policy=Never~tee-cmd="[\"count-location\",\"Seattle\",\"gs://${SECUNDUS_RESULT_STORAGE_BUCKET}/seattle-result\"]"~tee-signed-image-repos=us-docker.pkg.dev/${PRIMUS_PROJECT_ID}/${PRIMUS_COSIGN_REPOSITORY}/demo"
ফলাফল দেখুন
সেকেন্ডাস প্রোজেক্টে ওয়ার্কলোডের ফলাফল দেখুন।
gcloud config set project $SECUNDUS_PROJECT_ID
gsutil cat gs://$SECUNDUS_RESULT_STORAGE_BUCKET/seattle-result
ফলাফল 3 হওয়া উচিত, কারণ primus_customer_list.csv ফাইলটিতে সিয়াটলের এতজন লোকের নাম তালিকাভুক্ত আছে!
৫. পরিষ্কার করা
এই কোডল্যাবের অংশ হিসেবে আমরা যে রিসোর্সগুলো তৈরি করেছি, সেগুলো পরিষ্কার করার জন্য এই স্ক্রিপ্টটি ব্যবহার করা যেতে পারে। এই পরিষ্কার-পরিচ্ছন্নতার অংশ হিসেবে, নিম্নলিখিত রিসোর্সগুলো মুছে ফেলা হবে:
- প্রাইমাস ব্যাংকের ইনপুট স্টোরেজ বাকেট (
$PRIMUS_INPUT_STORAGE_BUCKET)। - প্রাইমাস ব্যাংক পরিষেবা-অ্যাকাউন্ট (
$PRIMUS_SERVICEACCOUNT)। - প্রাইমাস ব্যাংক আর্টিফ্যাক্ট রেজিস্ট্রি যা ইমেজ সিগনেচার ধারণ করে (
$PRIMUS_COSIGN_REPOSITORY)। - প্রাইমাস ব্যাংক ওয়ার্কলোড আইডেন্টিটি পুল (
$PRIMUS_WORKLOAD_IDENTITY_POOL)। - সেকেন্ডাস ব্যাংকের ওয়ার্কলোড সার্ভিস অ্যাকাউন্ট (
$WORKLOAD_SERVICEACCOUNT)। - ওয়ার্কলোড কম্পিউট ইনস্ট্যান্স।
- সেকেন্ডাস ব্যাংকের ফলাফল সংরক্ষণের বাকেট (
$SECUNDUS_RESULT_STORAGE_BUCKET)। - সেকেন্ডাস ব্যাংকের প্রত্নবস্তু রেজিস্ট্রি (
$SECUNDUS_ARTIFACT_REGISTRY)। - সেকেন্ডাস ব্যাংকের ওয়ার্কলোড ভিএম (
$WORKLOAD_VM)।
./cleanup.sh
আপনার অনুসন্ধান শেষ হলে, অনুগ্রহ করে আপনার প্রজেক্টটি মুছে ফেলার কথা বিবেচনা করুন।
- ক্লাউড প্ল্যাটফর্ম কনসোলে যান
- যে প্রজেক্টটি বন্ধ করতে চান সেটি নির্বাচন করুন, তারপর উপরে থাকা 'ডিলিট' বোতামে ক্লিক করুন: এটি প্রজেক্টটিকে মুছে ফেলার জন্য নির্ধারিত করবে।
অভিনন্দন
অভিনন্দন, আপনি সফলভাবে কোডল্যাবটি সম্পন্ন করেছেন!
আপনি শিখেছেন কীভাবে কনফিডেনশিয়াল স্পেসের ব্যবহারযোগ্যতা উন্নত করতে সাইনড কন্টেইনার ইমেজ ফিচারটি কাজে লাগাতে হয়।
এরপর কী?
এই ধরনের কয়েকটি কোডল্যাব দেখে নিন...
- গোপনীয় স্থানে ব্যবহৃত সুরক্ষিত শেয়ার করা ডেটা
- মাল্টি-পার্টি কম্পিউটেশন এবং কনফিডেনশিয়াল স্পেস ব্যবহার করে কীভাবে ডিজিটাল অ্যাসেট লেনদেন করা যায়
- গোপনীয় স্থান ব্যবহার করে গোপনীয় তথ্য বিশ্লেষণ করুন