১. ভূমিকা
এই ল্যাবে, আমরা শিখব কিভাবে ক্লাউড স্টোরেজ থেকে একটি BigQuery ডেটাসেটে ডেটা স্থানান্তরের সময় VPC সার্ভিস কন্ট্রোলস ব্যবহার করে BigQuery ডেটা ট্রান্সফার সার্ভিসকে সুরক্ষিত করতে হয়। এরপর আমরা ক্লাউড স্টোরেজকে সুরক্ষিত করি এবং ক্লাউড স্টোরেজ থেকে BigQuery-তে ডেটা স্থানান্তরের জন্য প্রক্রিয়াটি পুনরাবৃত্তি করি। ক্লাউড স্টোরেজকে সুরক্ষিত করার ফলে একটি VPC সার্ভিস কন্ট্রোলস ভায়োলেশন ঘটে, যা সফলভাবে স্থানান্তরের জন্য ঠিক করা প্রয়োজন। সবশেষে, আমরা BigQuery-কেও সুরক্ষিত করি এবং তারপর প্রজেক্টগুলোর মধ্যে ডেটাসেট কপি করার চেষ্টা করি, যার ফলেও একটি ভায়োলেশন ঘটে যা ঠিক করা প্রয়োজন।
এই ল্যাব জুড়ে আমরা দেখব কিভাবে যথাক্রমে ইনগ্রেস এবং ইগ্রেস রুল ব্যবহার করে ইনগ্রেস এবং ইগ্রেস ভায়োলেশন উভয়ই সমাধান করা যায়। আমরা BigQuery ডেটা ট্রান্সফার ইনগ্রেস ভায়োলেশন সমাধান করার জন্য একটি অ্যাক্সেস লেভেলও ব্যবহার করব। এই কোডল্যাবের লক্ষ্যগুলো হলো:
- বিভিন্ন পরিষেবা, বিশেষ করে ক্লাউড স্টোরেজ, বিগকোয়েরি এবং বিগকোয়েরি ডেটা ট্রান্সফার সার্ভিসে, যথাক্রমে ইনগ্রেস এবং ইগ্রেস রুল ব্যবহার করে কীভাবে ইনগ্রেস ও ইগ্রেস ভায়োলেশন সমাধান করতে হয় তা বুঝুন।
- একটি নির্দিষ্ট লঙ্ঘন কেন ঘটেছে তা বুঝুন।
২. সম্পদ স্থাপন এবং প্রয়োজনীয়তা
শুরু করার আগে
এই কোডল্যাবে আমরা ধরে নিচ্ছি যে আপনি ইতিমধ্যেই জানেন:
- কীভাবে একটি ফোল্ডার তৈরি করবেন
- একটি ফোল্ডারে কীভাবে প্রজেক্ট তৈরি করবেন বা বিদ্যমান প্রজেক্ট ফোল্ডারে সরাবেন
- স্কোপড অ্যাক্সেস পলিসি কীভাবে তৈরি করবেন
- গুগল ক্লাউড কনসোল থেকে কীভাবে একটি পরিষেবা পরিধি তৈরি এবং কনফিগার করবেন
- অডিট লগ থেকে লঙ্ঘন লগগুলি কীভাবে খুঁজে বের করবেন
সেটআপ
আমাদের প্রাথমিক সেটআপটি নিম্নরূপভাবে ডিজাইন করা হয়েছে:
- একটি গুগল ক্লাউড সংস্থা।
- অর্গানাইজেশনের অধীনে একটি ফোল্ডার। এই কোডল্যাবের জন্য, আমরা এটিকে
codelab-folderবলব। -
codelab-folderফোল্ডারে দুটি গুগল ক্লাউড প্রজেক্ট রয়েছে। এই কোডল্যাবের জন্য, আমরা প্রজেক্ট দুটিকেproject-1এবংproject-2নামে ডাকছি।- যদি আপনার ফোল্ডার এবং প্রজেক্টগুলো আগে থেকে তৈরি করা না থাকে, তাহলে গুগল ক্লাউড কনসোলে ' অর্গানাইজেশন'-এর অধীনে একটি ফোল্ডার তৈরি করুন এবং দুটি নতুন প্রজেক্ট তৈরি করুন ।
- প্রয়োজনীয় অনুমতিসমূহ: ফোল্ডার পরিচালনার জন্য IAM রোল , প্রজেক্ট পরিচালনার জন্য IAM রোল , VPC সার্ভিস কন্ট্রোল কনফিগার করার জন্য প্রয়োজনীয় IAM রোল , BigQuery পরিচালনার জন্য IAM রোল , এবং ক্লাউড স্টোরেজ পরিচালনার জন্য IAM রোল ।
-
project-1এবংproject-2উভয় প্রজেক্টের বিলিং অ্যাকাউন্ট।
একটি সীমিত পরিসরের নীতি এবং একটি নিয়মিত পরিষেবা পরিধি তৈরি করুন
এই কোডল্যাবে, আমরা project-2 সুরক্ষিত করার জন্য একটি সাধারণ সার্ভিস পেরিমিটার ব্যবহার করব।
- একটি স্কোপড অ্যাক্সেস পলিসি তৈরি করুন , যা
codelab-folderলেভেলে সীমাবদ্ধ থাকবে। এই কোডল্যাবের জন্য, আমরা ধরে নিচ্ছি যে তৈরি করা অ্যাক্সেস পলিসিটির আইডি হলো987654321। - একটি সুষম পরিসীমা তৈরি করুন , যার নাম দিন
perimeter-2, এবং এর সাথে প্রজেক্টproject-2যোগ করুন।
perimeter-2 এর মধ্যে BigQuery Data Transfer API সীমাবদ্ধ করুন।

ক্লাউড স্টোরেজ বাকেট এবং বিগকোয়েরি ডেটাসেট তৈরি করা
এই কোডল্যাবের জন্য, বিষয়বস্তু নির্বিশেষে যেকোনো CSV ফাইলই যথেষ্ট। প্রধান সীমাবদ্ধতাটি কোলোকেশন সংক্রান্ত আবশ্যকতা , যা নিম্নলিখিত বিষয়গুলো বাধ্যতামূলক করে:
- আপনার BigQuery ডেটাসেট যদি একটি মাল্টি-রিজিওনে থাকে, তাহলে যে ক্লাউড স্টোরেজ বাকেটে আপনি ডেটা স্থানান্তর করছেন, সেটি অবশ্যই একই মাল্টি-রিজিওনে অথবা সেই মাল্টি-রিজিওনের অন্তর্ভুক্ত কোনো স্থানে থাকতে হবে।
- আপনার ডেটাসেট যদি কোনো একটি অঞ্চলে থাকে, তাহলে আপনার ক্লাউড স্টোরেজ বাকেটটিও অবশ্যই সেই একই অঞ্চলে থাকতে হবে।
এখন থেকে, এই কোডল্যাবের জন্য আমরা নিশ্চিত করব যে ক্লাউড স্টোরেজ বাকেট এবং বিগকোয়েরি ডেটাসেট উভয়ই একই অঞ্চলে বা একাধিক অঞ্চলে রয়েছে।
প্রজেক্ট project-1 এ নতুন ক্লাউড স্টোরেজ বাকেট তৈরি করুন
একটি নতুন ক্লাউড স্টোরেজ বাকেট তৈরি করতে, নতুন বাকেট তৈরির জন্য নথিভুক্ত ধাপগুলো অনুসরণ করুন।
- বাকেটের নামের জন্য, এমন একটি নাম লিখুন যা বাকেটের নামের শর্তগুলো পূরণ করে। এই কোডল্যাবের জন্য, আমরা বাকেটটির নাম দেব
codelab-bqtransfer-bucket। - ডেটা কোথায় সংরক্ষণ করা হবে, তার জন্য বাকেট লোকেশন, একটি লোকেশন টাইপ এবং সেই লোকেশন নির্বাচন করুন যেখানে বাকেটের ডেটা স্থায়ীভাবে সংরক্ষিত হবে। এই কোডল্যাবের জন্য, আমরা মার্কিন যুক্তরাষ্ট্রের একাধিক অঞ্চল ব্যবহার করব।

একটি CSV ফাইল তৈরি করুন
আপনার লোকাল মেশিন থেকে অথবা ক্লাউড শেল ব্যবহার করে, আমরা নিম্নলিখিত কমান্ডগুলো ব্যবহার করে echo কমান্ডের মাধ্যমে ` codelab-test-file.csv একটি নমুনা csv ফাইল তৈরি করতে পারি:
echo "name,age" > codelab-test-file.csv; \
echo "Alice,10" >> codelab-test-file.csv; \
echo "Bob,20" >> codelab-test-file.csv; \
echo "Carol,30" >> codelab-test-file.csv; \
echo "Dan,40" >> codelab-test-file.csv; \
echo "Eve,50" >> codelab-test-file.csv; \
echo "Frank,60" >> codelab-test-file.csv; \
echo "Grace,70" >> codelab-test-file.csv; \
echo "Heidi,80" >> codelab-test-file.csv;
ক্লাউড স্টোরেজ বাকেটে CSV ফাইল আপলোড করুন
csv ফাইলটি তৈরি হয়ে গেলে, তৈরি করা বাকেটে ফাইল অবজেক্টটি আপলোড করতে নিম্নলিখিত কমান্ডটি চালান:
gcloud storage cp codelab-test-file.csv gs://codelab-bqtransfer-bucket

তৈরি করা বাকেটে ফাইলটি আপলোড হয়েছে কিনা তা আপনি বাকেটের অবজেক্টগুলো তালিকাভুক্ত করে অথবা নিম্নলিখিত কমান্ডটি চালিয়ে যাচাই করতে পারেন:
gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**
project-2 এ BigQuery ডেটাসেট এবং টেবিল তৈরি করুন
- এই ধাপগুলো অনুসরণ করে
project-2এ একটি BigQuery ডেটাসেট তৈরি করুন।- ডেটা সেট আইডি-এর জন্য, একটি অনন্য ডেটা সেটের নাম লিখুন। এই কোডল্যাবের জন্য, আমরা ব্যবহার করি:
codelab_bqtransfer_dataset। - লোকেশন টাইপ-এর জন্য, ডেটাসেটের জন্য একটি ভৌগোলিক অবস্থান বেছে নিন। এই কোডল্যাবের জন্য, আমরা ক্লাউড স্টোরেজ বাকেটের মতোই একই অবস্থান ব্যবহার করছি: ইউএস (মার্কিন যুক্তরাষ্ট্রের একাধিক অঞ্চল) ।

- ডেটা সেট আইডি-এর জন্য, একটি অনন্য ডেটা সেটের নাম লিখুন। এই কোডল্যাবের জন্য, আমরা ব্যবহার করি:
- এই ধাপগুলো অনুসরণ করে
codelab_bqtransfer_datasetনামক তৈরি করা ডেটাসেটের অধীনে একটি BigQuery টেবিল তৈরি করুন।- সোর্স সেকশনে, 'Create table from list'-এ 'Empty table' নির্বাচন করুন।
- টেবিল ফিল্ডে, আপনি যে টেবিলটি তৈরি করতে চান তার নাম লিখুন। এই কোডল্যাবের জন্য, আমরা
codelab-bqtransfer-tableনামটি ব্যবহার করেছি। - যাচাই করুন যে টেবিল টাইপ ফিল্ডটি নেটিভ টেবিলে সেট করা আছে।
- স্কিমা বিভাগে, স্কিমা সংজ্ঞাটি লিখুন। আপনি 'Edit as text'- এ ক্লিক করে স্কিমার তথ্য লিখতে পারেন এবং তৈরি করা csv ফাইলের ফরম্যাট অনুযায়ী নিম্নলিখিত স্কিমাটি ইনপুট করতে পারেন।
[{ "name": "name", "type": "STRING", "mode": "NULLABLE", "description": "The name" }, { "name": "age", "type": "INTEGER", "mode": "NULLABLE", "description": "The age" }]
খরচ
ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে project-2 এবং project-1 প্রজেক্টগুলিতে বিলিং চালু করতে হবে। এই কোডল্যাবের বাইরে বিলিং এড়াতে ব্যবহৃত রিসোর্সগুলি বন্ধ করে দেওয়ার পরামর্শ দেওয়া হচ্ছে।
যে রিসোর্সগুলোর জন্য খরচ হয় সেগুলো হলো BigQuery এবং ক্লাউড স্টোরেজ। BigQuery প্রাইসিং ক্যালকুলেটর এবং ক্লাউড স্টোরেজ ক্যালকুলেটরে আনুমানিক খরচ জানা যাবে।
৩. ক্লাউড স্টোরেজ অবজেক্ট থেকে বিগকোয়েরি টেবিলে ডেটা স্থানান্তরের কনফিগারেশন করুন
আমরা এখন ( project-2 এ) একটি ডেটা ট্রান্সফার সার্ভিস তৈরি করার চেষ্টা করব, যা ( project-1 এ অবস্থিত) ক্লাউড স্টোরেজ থেকে ( project-2 এ অবস্থিত) বিগকোয়েরিতে ডেটা স্থানান্তর করবে। এক্ষেত্রে, ভিপিসি সার্ভিস কন্ট্রোলস (VPC Service Controls project-2 এর বিগকোয়েরি ডেটা ট্রান্সফার সার্ভিসটিকে সুরক্ষিত রাখবে। শুধুমাত্র বিগকোয়েরি ডেটা ট্রান্সফার সার্ভিসকে সুরক্ষিত রাখলে (বিগকোয়েরি এবং ক্লাউড স্টোরেজকে সুরক্ষিত না করে), প্রিন্সিপালরা কেবল ডেটা ট্রান্সফার তৈরি এবং পরিচালনা করতে পারবে (যেমন ম্যানুয়ালি ডেটা ট্রান্সফার শুরু করা)।
ক্লাউড স্টোরেজ থেকে ডেটা স্থানান্তর সেটআপ করুন
ডেটা ট্রান্সফার তৈরি করতে, এই ধাপগুলো অনুসরণ করুন:
-
project-2এর গুগল ক্লাউড কনসোলে BigQuery পৃষ্ঠায় যান। - ডেটা স্থানান্তর-এ ক্লিক করুন।

ডেটা স্থানান্তর পৃষ্ঠা অ্যাক্সেস করার সময় লঙ্ঘনটি তদন্ত করুন।
গুগল ক্লাউড কনসোলে, আমরা ভিপিসি সার্ভিস কন্ট্রোলস-এর অনন্য শনাক্তকারীটি দেখতে পাই। লগ ফিল্টার করতে এবং লঙ্ঘনের বিবরণ শনাক্ত করতে একই শনাক্তকারী ব্যবহার করুন (অবজার্ভড ডিনায়াল আইডি দিয়ে OBSERVED_VPCSC_DENIAL_UNIQUE_ID প্রতিস্থাপন করুন):
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="OBSERVED_VPCSC_DENIAL_UNIQUE_ID"
পর্যবেক্ষিত লঙ্ঘনটি হলো একটি NO_MATCHING_ACCESS_LEVEL , যা একটি ইনগ্রেস ভায়োলেশন এবং এর বিবরণ নিম্নরূপ:
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
}]
violationReason: "NO_MATCHING_ACCESS_LEVEL"
callerIp: "USER_PUBLIC_IP_ADDRESS"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.ListTransferConfigs"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
ডেটা ট্রান্সফার পেজ অ্যাক্সেস করলে কনফিগার করা যেকোনো ডেটা ট্রান্সফারের তালিকা দেখানোর চেষ্টা করা হয়; ফলে, ListTransferConfigs মেথডটির লঙ্ঘন ঘটে।
bigquerydatatransfer.googleapis.com পরিষেবার লঙ্ঘনটি সংশোধন করুন।
একটি ইনগ্রেস ভায়োলেশন সমাধান করতে অ্যাক্সেস লেভেল বা ইনগ্রেস রুল ব্যবহার করা যেতে পারে। এই কোডল্যাবে, আমরা ডিনাইড ইউজার আইডেন্টিটি দিয়ে কনফিগার করা একটি ইনগ্রেস রুল ব্যবহার করব, যা bigquerydatatransfer.googleapis.com সার্ভিস এবং এর সমস্ত মেথডে অ্যাক্সেসের অনুমতি দেয়।

ইনগ্রেস রুলটি সেট করা হয়ে গেলে, ডেটা ট্রান্সফার পেজটিতে প্রবেশ করতে কোনো সমস্যা হওয়ার কথা নয়।
ক্লাউড স্টোরেজ থেকে ডেটা স্থানান্তরের সেটআপ পুনরায় শুরু করুন।
পূর্ববর্তী ধাপগুলো থেকে, ডেটা ট্রান্সফার পেজে থাকাকালীন (ডেটা ট্রান্সফার-এ ক্লিক করার পর), নিম্নলিখিত ধাপগুলো অনুসরণ করুন:
- + ট্রান্সফার তৈরি করুন -এ ক্লিক করুন।
- সোর্স টাইপ সেকশনে, সোর্স-এর জন্য গুগল ক্লাউড স্টোরেজ বেছে নিন।
- 'Transfer config name' সেকশনের 'Display name' অংশে, ট্রান্সফারটির জন্য একটি নাম লিখুন, যেমন
Codelab Transfer। - সময়সূচী বিকল্প বিভাগে:
- পুনরাবৃত্তির হার নির্বাচন করুন, যেমন ১৫ মিনিট।
- এখনই শুরু করুন (Start now) নির্বাচন করতে ভুলবেন না; অন্যথায়, ডেটা স্থানান্তর শুধুমাত্র কনফিগার করা পুনরাবৃত্তির (Repeat frequency) পরেই শুরু হবে।
- গন্তব্য সেটিংস বিভাগে, গন্তব্য ডেটাসেট-এর জন্য, আপনার ডেটা সংরক্ষণের জন্য তৈরি করা ডেটাসেটটি বেছে নিন:
codelab_bqtransfer_dataset - ডেটা উৎসের বিবরণ বিভাগে
- গন্তব্য টেবিলের জন্য, আপনার গন্তব্য টেবিলের নাম লিখুন। গন্তব্য টেবিলটিকে অবশ্যই টেবিলের নামকরণের নিয়ম মেনে চলতে হবে। এই কোডল্যাবের জন্য, আমরা পূর্বে তৈরি করা টেবিলটি ব্যবহার করব:
codelab-bqtransfer-table - ক্লাউড স্টোরেজ ইউআরআই-এর জন্য, ক্লাউড স্টোরেজ ইউআরআই-টি প্রবেশ করান। এই কোডল্যাবের জন্য, আমরা তৈরি করা বাকেট এবং ফাইলটি ব্যবহার করব:
codelab-bqtransfer-bucket/codelab-test-file.csv - রাইট প্রেফারেন্সের জন্য,
APPENDরাখুন (অথবাMIRRORবেছে নিন)। - স্থানান্তরের পরে ফাইলগুলি মুছে ফেলার বিকল্পটি নির্বাচন করবেন না (কারণ আমরা একই ফাইল একাধিকবার ব্যবহার করব। তবে, আপনি একাধিক ফাইল ব্যবহার করতে পারেন এবং স্থানান্তরের পরে মূল ফাইলগুলি মুছে ফেলতে পারেন)।
- ফাইল ফরম্যাটের জন্য CSV নির্বাচন করুন।
- ট্রান্সফার অপশনস- এর মধ্যে, CSV- এর অধীনে, ফিল্ড ডিলিমিটার হিসেবে কমা (",") প্রবেশ করান।
- গন্তব্য টেবিলের জন্য, আপনার গন্তব্য টেবিলের নাম লিখুন। গন্তব্য টেবিলটিকে অবশ্যই টেবিলের নামকরণের নিয়ম মেনে চলতে হবে। এই কোডল্যাবের জন্য, আমরা পূর্বে তৈরি করা টেবিলটি ব্যবহার করব:
- সার্ভিস অ্যাকাউন্ট মেনুতে, আপনার গুগল ক্লাউড প্রজেক্টের সাথে যুক্ত সার্ভিস অ্যাকাউন্টগুলো থেকে একটি সার্ভিস অ্যাকাউন্ট নির্বাচন করুন।
- নির্বাচিত সার্ভিস অ্যাকাউন্টটির অবশ্যই স্টোরেজ বাকেট হোস্টকারী প্রজেক্টের (এই কোডল্যাবের
project-1) ক্লাউড স্টোরেজ উভয়ের জন্য প্রয়োজনীয় অনুমতি থাকতে হবে। - এই কোডল্যাবের জন্য, আমরা
project-2এ তৈরি করাcodelab-sa@project-2.iam.gserviceaccount.comসার্ভিস অ্যাকাউন্টটি ব্যবহার করব।
- নির্বাচিত সার্ভিস অ্যাকাউন্টটির অবশ্যই স্টোরেজ বাকেট হোস্টকারী প্রজেক্টের (এই কোডল্যাবের
- সংরক্ষণ করুন- এ ক্লিক করুন।
যেহেতু আমরা শিডিউল অপশন হিসেবে ‘এখনই শুরু করুন’ নির্বাচন করেছি, তাই ‘সংরক্ষণ করুন’ নির্বাচন করার সাথে সাথেই প্রথম স্থানান্তরটি শুরু হয়ে যাবে।
ডেটা স্থানান্তর পরিষেবার অবস্থা যাচাই করুন
কনফিগার করা ডেটা ট্রান্সফারের অবস্থা যাচাই করতে:
- Google Cloud কনসোলে BigQuery পৃষ্ঠায় যান
- ডেটা স্থানান্তর-এ ক্লিক করুন।
- কনফিগার করা ট্রান্সফারের তালিকা প্রদর্শিত হয়।

(ডিসপ্লে নেমের নিচে থাকা) Codelab Transfer এ ক্লিক করলে এ পর্যন্ত সম্পাদিত সমস্ত রানের একটি তালিকা প্রদর্শিত হবে।

ম্যানুয়ালি শুরু করা এবং নির্ধারিত সময়সূচী অনুযায়ী ডেটা ট্রান্সফার, উভয় ক্ষেত্রেই প্রক্রিয়াটি সফল হওয়া উচিত এবং কোনো VPC সার্ভিস কন্ট্রোলস লঙ্ঘন হওয়া উচিত নয়। উল্লেখ্য যে, শুধুমাত্র ম্যানুয়ালি শুরু করা ট্রান্সফারের ক্ষেত্রেই ইনগ্রেস রুলের মাধ্যমে সেই প্রিন্সিপালকে অ্যাক্সেস দেওয়ার প্রয়োজন হয়, যিনি ম্যানুয়ালি ট্রান্সফারটি শুরু করছেন।
৪. ম্যানুয়ালি শুরু করা ডেটা স্থানান্তরের জন্য আইপি অ্যাড্রেসের সীমাবদ্ধতা
বর্তমানে কনফিগার করা ইনগ্রেস নিয়মগুলি কনফিগার করা আইডেন্টিটিকে যেকোনো আইপি অ্যাড্রেস থেকে ম্যানুয়ালি ডেটা ট্রান্সফার শুরু করার অনুমতি দেয়।
অ্যাক্সেস লেভেল ব্যবহারের মাধ্যমে, ভিপিসি সার্ভিস কন্ট্রোলস নির্দিষ্ট এপিআই রিকোয়েস্ট অ্যাট্রিবিউটের ভিত্তিতে অনুমোদিত অ্যাক্সেস সীমিত করার সুবিধা প্রদান করে, বিশেষত:
- আইপি সাবনেটওয়ার্ক: অনুরোধটি কোনো নির্দিষ্ট আইপি ঠিকানা থেকে আসছে কিনা তা যাচাই করে।
- অঞ্চল: অনুরোধটি কোনো নির্দিষ্ট অঞ্চল থেকে আসছে কিনা তা যাচাই করে, যা আইপি অ্যাড্রেসের ভূ-অবস্থান দ্বারা নির্ধারিত হয়।
- প্রিন্সিপালস: অনুরোধটি কোনো নির্দিষ্ট অ্যাকাউন্ট থেকে আসছে কিনা তা যাচাই করে।
- ডিভাইস নীতি: অনুরোধটি নির্দিষ্ট শর্ত পূরণকারী কোনো ডিভাইস থেকে আসছে কিনা তা যাচাই করে।
ইতিমধ্যে কনফিগার করা ইনগ্রেস রুলের সাথে এই অ্যাট্রিবিউটগুলোর যাচাইকরণ কার্যকর করতে, আমাদের এমন একটি অ্যাক্সেস লেভেল তৈরি করতে হবে যা কাঙ্ক্ষিত অ্যাট্রিবিউটগুলোকে অনুমোদন করে, এবং তারপর তৈরি করা অ্যাক্সেস লেভেলটিকে ইনগ্রেস রুলের সোর্স হিসেবে যুক্ত করতে হবে।
এই ডায়াগ্রামটি তিনটি পরিস্থিতিতে দুটি প্রিন্সিপাল (
user@example.com এবং user2@example.com ) দ্বারা শুরু করা অ্যাক্সেস চিত্রিত করে, যা দেখায় কিভাবে VPC সার্ভিস কন্ট্রোলস সোর্স (ইনগ্রেস অ্যাক্সেস লেভেল) এবং আইডেন্টিটি অ্যাট্রিবিউটগুলোকে একটি AND শর্ত হিসাবে মূল্যায়ন করে, যেখানে উভয়কেই মিলতে হয়।
- ব্যবহারকারী user@example.com-কে অ্যাক্সেস লেভেল দ্বারা অনুমোদিত একটি আইপি অ্যাড্রেস থেকে অ্যাক্সেস করার অনুমতি দেওয়া হয়, কারণ তার আইপি অ্যাড্রেস এবং ইউজার অ্যাকাউন্ট ইনগ্রেস রুলের কনফিগারেশনের সাথে মিলে যায়।
- ব্যবহারকারী user@example.com-এর অ্যাক্সেস ব্লক করা হয়েছে, কারণ তার আইপি অ্যাড্রেস অনুমোদিত আইপি অ্যাড্রেসের সাথে মেলে না, যদিও তার অ্যাকাউন্টটিই ইনগ্রেস রুলে কনফিগার করা আছে।
- ব্যবহারকারী user2@example.com একটি অনুমোদিত আইপি ঠিকানা থেকে অ্যাক্সেসের চেষ্টা করা সত্ত্বেও তার অ্যাক্সেস ব্লক করা হয়েছে, কারণ ইনগ্রেস রুল দ্বারা তার অ্যাকাউন্টটি অনুমোদিত নয়।
অ্যাক্সেস স্তর তৈরি করুন
আইপি অ্যাড্রেস অনুযায়ী অ্যাক্সেস সীমিত করার জন্য অ্যাক্সেস লেভেল তৈরি করতে:
- গুগল ক্লাউড কনসোলে অ্যাক্সেস কনটেক্সট ম্যানেজার পৃষ্ঠাটি খুলুন।
- অনুরোধ করা হলে,
codelab-folderফোল্ডারটি নির্বাচন করুন।
- অনুরোধ করা হলে,
- অ্যাক্সেস কনটেক্সট ম্যানেজার পেজের শীর্ষে, ক্রিয়েট অ্যাক্সেস লেভেল (CREATE ACCESS LEVEL ) -এ ক্লিক করুন।
- 'New Access Level' প্যানে, নতুন অ্যাক্সেস লেভেলটির একটি শিরোনাম দিন। এই কোডল্যাবের জন্য, আমরা এর নাম দেব
project_2_al'। - Conditions সেকশনে, IP subnetworks- এর সামনে থাকা + চিহ্নে ক্লিক করুন।
- IP সাবনেটওয়ার্ক বক্সে, পাবলিক IP নির্বাচন করুন।
- বিকল্প হিসেবে, আপনি অ্যাক্সেস লেভেলে ইন্টারনাল আইপি অ্যাড্রেস ব্যবহার করার জন্য প্রাইভেট আইপি বেছে নিতে পারেন। তবে, এই কোডল্যাবের জন্য আমরা একটি পাবলিক আইপি ব্যবহার করছি।
- এক বা একাধিক IPv4 বা IPv6 রেঞ্জ CIDR ব্লক ফরম্যাটে প্রবেশ করান।
ইনগ্রেস রুলে অ্যাক্সেস লেভেল যোগ করুন
ইনগ্রেস রুলের মধ্যে, অ্যাক্সেস লেভেলকে sources ফিল্ডের অধীনে উল্লেখ করা হয়, যা ইনগ্রেস রুল রেফারেন্সে নথিভুক্ত একটি আবশ্যক ফিল্ড। রিসোর্সগুলিতে ইনগ্রেসের অনুমতি দেওয়ার জন্য, VPC সার্ভিস কন্ট্রোলস sources ' এবং identityType অ্যাট্রিবিউটগুলিকে একটি 'AND' শর্ত হিসাবে মূল্যায়ন করে। ইনগ্রেস রুলটি ডেটা ট্রান্সফার কনফিগারেশনে নির্দিষ্ট করা সার্ভিস অ্যাকাউন্ট ব্যবহার না করে, ম্যানুয়ালি ডেটা ট্রান্সফার শুরু করা প্রিন্সিপালের আইডেন্টিটি ব্যবহার করে।

আইপি অ্যাড্রেস দ্বারা অ্যাক্সেস সীমিত করার কনফিগারেশন সহ ট্রান্সফারটি পুনরায় চালান।
প্রয়োগকৃত কনফিগারেশনগুলোর কার্যকারিতা মূল্যায়ন করতে, নিম্নলিখিত সিনারিওগুলো ব্যবহার করে ট্রান্সফারটি পুনরায় চালু করুন:
- ইনগ্রেস রুল দ্বারা উল্লিখিত অ্যাক্সেস লেভেলে অনুমোদিত পরিসরের মধ্যে থাকা আইপি অ্যাড্রেস ব্যবহার করে।
- কনফিগারেশন দ্বারা অনুমোদিত নয় এমন একটি আইপি ঠিকানা ব্যবহার করা হচ্ছে
অনুমোদিত আইপি অ্যাড্রেস থেকে অ্যাক্সেস সফল হওয়া উচিত, অপরদিকে অননুমোদিত আইপি অ্যাড্রেস থেকে অ্যাক্সেস ব্যর্থ হওয়া উচিত এবং এর ফলে একটি ভিপিসি সার্ভিস কন্ট্রোলস ভায়োলেশন ঘটবে।
ভিন্ন আইপি অ্যাড্রেস ব্যবহার করে পরীক্ষা করার একটি সহজ উপায় হলো, গুগল ক্লাউড কনসোল ব্যবহার করার সময় বরাদ্দ করা আইপি অ্যাড্রেসটিকে অনুমতি দেওয়া এবং তারপর ক্লাউড শেল ব্যবহার করে পরীক্ষা করা।
ক্লাউড শেলে, RUN_TIME এবং RESOURCE_NAME উভয়ই প্রতিস্থাপন করে নিম্নলিখিত কমান্ডটি চালিয়ে ম্যানুয়ালি একটি ট্রান্সফার শুরু করুন :
bq mk \
--transfer_run \
--run_time='RUN_TIME' \
RESOURCE_NAME
উদাহরণস্বরূপ, 1234567890 প্রোজেক্টে 12345678-90ab-cdef-ghij-klmnopqrstuv ট্রান্সফার কনফিগারেশনের জন্য নিম্নলিখিত নমুনা কমান্ডটি অবিলম্বে চলে।
NOW=$(TZ=GMT date +"%Y-%m-%dT%H:%M:%SZ");
bq mk \
--transfer_run \
--run_time=$NOW \
projects/1234567890/locations/us/transferConfigs/12345678-90ab-cdef-ghij-klmnopqrstuv
পর্যবেক্ষিত আউটপুটে প্রত্যাশিতভাবেই একটি ভিপিসি সার্ভিস কন্ট্রোলস লঙ্ঘন দেখা যাচ্ছে, কারণ আইপি অ্যাড্রেসটি অনুমোদিত নয়।

পর্যবেক্ষিত লঙ্ঘনটি DataTransferService.StartManualTransferRuns মেথডে রয়েছে।
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
targetResource: "projects/[PROJECT2_NUMBER]"
targetResourcePermissions: [0: "vpcsc.permissions.unavailable"]
}]
violationReason: "RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER"
resource: {
labels: {
method: "google.cloud.bigquery.datatransfer.v1.DataTransferService.StartManualTransferRuns"
project_id: "project-2"
service: "bigquerydatatransfer.googleapis.com"
}
type: "audited_resource"
}
severity: "ERROR"
৫. ক্লাউড স্টোরেজ পরিষেবা সুরক্ষিত রেখে ডেটা স্থানান্তর শুরু করা
যেহেতু আমরা ক্লাউড স্টোরেজ থেকে বিগকোয়েরিতে ডেটা স্থানান্তর করছি, তাই ভিপিসি সার্ভিস কন্ট্রোলস দ্বারা সুরক্ষিত পরিষেবাগুলোর তালিকায় ক্লাউড স্টোরেজকে যুক্ত করে দেখা যাক স্থানান্তরটি সফল হয় কি না।
perimeter-2 কনফিগারেশনে, BigQuery Data Transfer API-এর পাশাপাশি Cloud Storage API- কেও Restricted Services-গুলোর একটি হিসেবে যুক্ত করুন।

ক্লাউড স্টোরেজ এপিআই সুরক্ষিত করার পর, পরবর্তী নির্ধারিত ডেটা ট্রান্সফারের জন্য অপেক্ষা করুন, অথবা নিম্নলিখিত ধাপগুলো অনুসরণ করে ম্যানুয়ালি একটি ট্রান্সফার শুরু করুন :
- Google Cloud কনসোলে BigQuery পৃষ্ঠায় যান।
- ডেটা স্থানান্তর-এ ক্লিক করুন।
- তালিকা থেকে আপনার ট্রান্সফার বেছে নিন: এই কোডল্যাবের জন্য, আমরা কোডল্যাব ট্রান্সফার ব্যবহার করছি।
- এখনই স্থানান্তর চালান-এ ক্লিক করুন
- OK ক্লিক করুন।
আরেকটি ট্রান্সফার শুরু করা হবে। এটি দেখার জন্য আপনাকে পেজটি রিফ্রেশ করতে হতে পারে। এবার VPC সার্ভিস কন্ট্রোলস ভায়োলেশনের কারণে ট্রান্সফারটি ব্যর্থ হবে।

ক্লাউড স্টোরেজ ভিপিসি পরিষেবা নিয়ন্ত্রণ লঙ্ঘনের তদন্ত করুন
ট্রান্সফার সামারিতে প্রদর্শিত vpcServiceControlsUniqueIdentifier ব্যবহার করে অডিট লগ ফিল্টার করুন।
পর্যবেক্ষিত লঙ্ঘনটি হলো একটি RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER বহির্গমন লঙ্ঘন, যার বিবরণ নিম্নরূপ:
- প্রিন্সিপাল হলো ডেটা ট্রান্সফার সার্ভিসে কনফিগার করা সার্ভিস অ্যাকাউন্ট (ম্যানুয়ালি ট্রিগার করা হোক বা নির্ধারিত ডেটা ট্রান্সফার চলুক, ডিনাইড প্রিন্সিপাল একই থাকবে)।
- প্রভাবিত পরিষেবাটি হলো ক্লাউড স্টোরেজ।
- অনুরোধের উৎস হলো সেই প্রজেক্ট যেখানে ডেটা ট্রান্সফার সার্ভিস কনফিগার করা আছে:
project-2 - লক্ষ্য প্রকল্প হলো সেই প্রকল্প যেখানে ক্লাউড স্টোরেজ অবজেক্টটি অবস্থিত:
project-1
principalEmail: "codelab-sa@project-2.iam.gserviceaccount.com"
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT2_NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT1_NUMBER]"
targetResourcePermissions: [0: "storage.objects.get"]
}]
labels: {
method: "google.storage.objects.get"
project_id: "project-2"
service: "storage.googleapis.com"
}
ক্লাউড স্টোরেজ বহির্গমন লঙ্ঘন ঠিক করুন
ইগ্রেস ভায়োলেশনটি সমাধান করতে, আমাদের এমন একটি ইগ্রেস রুল ব্যবহার করতে হবে যা ডিনাইড সার্ভিস অ্যাকাউন্ট থেকে ক্লাউড স্টোরেজ অবজেক্টযুক্ত প্রজেক্টের দিকে ট্র্যাফিকের অনুমতি দেয়।

সার্ভিস পেরিমিটার ' perimeter-2 পরিবর্তন করার পর, ট্রান্সফারটি পুনরায় চালু করতে প্রক্রিয়াটি পুনরাবৃত্তি করুন। ট্রান্সফারে কোনো ত্রুটি দেখা যাবে না।

৬. প্রজেক্ট-২ থেকে প্রজেক্ট-১ এ BigQuery ডেটাসেট কপি করুন
project-1 এর ক্লাউড স্টোরেজ বাকেট থেকে project-2 এর BigQuery ডেটাসেটে ডেটা স্থানান্তর করা সম্ভব, এটি নিশ্চিত করার পর, চলুন project-2 থেকে project-1 এর দিকে BigQuery ডেটাসেটটি কপি করি ; এক্ষেত্রে BigQuery API-টি VPC সার্ভিস কন্ট্রোল দ্বারা সুরক্ষিত থাকবে।
ডেটা সেট তৈরি ও কপি করার জন্য আমরা bq mk কমান্ডটি ব্যবহার করব, যা bq টুল ব্যবহার করে।
project-1 এ গন্তব্য ডেটাসেট তৈরি করুন
ডেটা সেট কপি করার আগে, প্রথমে গন্তব্য ডেটা সেটটি তৈরি করতে হবে। গন্তব্য ডেটা সেট তৈরি করার জন্য, আমরা নিম্নলিখিত কমান্ডটি চালাতে পারি, যা us অবস্থান সহ ' project-1 প্রোজেক্টে ' copied_dataset ' নামের একটি ডেটা সেট তৈরি করে।
bq mk \
--dataset \
--location=us \
project-1:copied_dataset
VPC সার্ভিস কন্ট্রোল ব্যবহার করে project-2 এর BigQuery সার্ভিসকে সুরক্ষিত করুন।
perimeter-2 এর কনফিগারেশন পরিবর্তন করুন এবং BigQuery ডেটা ট্রান্সফার ও ক্লাউড স্টোরেজ সার্ভিসের পাশাপাশি BigQuery API-কে সুরক্ষিত পরিষেবা হিসেবে যুক্ত করুন।

ডেটাসেট কপি শুরু করুন
ডেটা সেট কপি করতে, নিম্নলিখিত bq mk কমান্ডটি চালান, যা project-2 প্রোজেক্টের codelab_bqtransfer_dataset ডেটা সেটটিকে project-1 এর copied_dataset ডেটা সেটে কপি করে এবং ডেটা সেটের কোনো কন্টেন্ট থাকলে তা ওভাররাইট করে দেয়।
bq mk \
--transfer_config \
--project_id=project-1 \
--target_dataset=copied_dataset \
--data_source=cross_region_copy \
--display_name='Dataset from project-2 to project-1' \
--params='{
"source_dataset_id":"codelab_bqtransfer_dataset",
"source_project_id":"project-2",
"overwrite_destination_table":"true"
}'
কমান্ডটি সফলভাবে চলবে; এরই মধ্যে, ডেটাসেট কপি করার অপারেশনটি শুরু করার জন্য ট্রান্সফার কনফিগারেশনটি সফলভাবে তৈরি হয়ে যাবে। কিন্তু VPC সার্ভিস কন্ট্রোলস ভায়োলেশনের কারণে ডেটাসেট কপি করার প্রক্রিয়াটি ব্যর্থ হবে।
সংশ্লিষ্ট VPC সার্ভিস কন্ট্রোলস ভায়োলেশনের বিস্তারিত তথ্য খুঁজে পেতে, নিম্নলিখিত লগ কোয়েরি ব্যবহার করে project-2 (সোর্স ডেটাসেট প্রজেক্ট)-এর লগগুলো পরীক্ষা করুন। এই লগ কোয়েরিটি BigQuery সার্ভিস এবং যে ডেটাসেটটি কপি করা হচ্ছে তার রিসোর্স নেম ( codelab_bqtransfer_dataset )-এর উপর ভিত্তি করে লগ ফিল্টার করে।
resource.labels.service="bigquery.googleapis.com"
protoPayload.metadata.resourceNames:"datasets/codelab_bqtransfer_dataset"
পর্যবেক্ষিত VPC সার্ভিস কন্ট্রোলস লঙ্ঘনটি হলো project-2 থেকে project-1 এ বহির্গমন লঙ্ঘন।
egressViolations: [
0: {
servicePerimeter: "accessPolicies/987654321/servicePerimeters/perimeter-2"
source: "projects/[PROJECT-2-NUMBER]"
sourceType: "Resource"
targetResource: "projects/[PROJECT-1-NUMBER]"
targetResourcePermissions: [
0: "bigquery.transfers.update"
1: "bigquery.transfers.get"
2: "bigquery.jobs.create"
]
}
]
method: "bigquery.tables.getData"
service: "bigquery.googleapis.com"
BigQuery-এর সমস্ত লঙ্ঘন সংশোধন করুন এবং ডেটাসেট কপি করা আবার শুরু করুন।
ইগ্রেস ভায়োলেশনটি ঠিক করার জন্য, আমাদের একটি ইগ্রেস রুল তৈরি করতে হবে যা ডিনাইড প্রিন্সিপালকে অনুমতি দেবে। ডিনাইড প্রিন্সিপাল হলো সেই প্রিন্সিপাল যেটি mk কমান্ডটি চালাচ্ছে।

একবার ইগ্রেস রুলটি চালু হয়ে গেলে, perimeter-2 এ ডেটাসেটটি কপি করার জন্য একই কমান্ডটি চালান। এবার, এটি কোনো ভিপিসি সার্ভিস কন্ট্রোলস লঙ্ঘন ছাড়াই ডেটাসেটটি সফলভাবে কপি করে ফেলবে।
৭. পরিচ্ছন্নতা
সার্ভিসটি ব্যবহার না করা হলে ভিপিসি সার্ভিস কন্ট্রোলস ব্যবহারের জন্য কোনো আলাদা চার্জ না থাকলেও, এই ল্যাবরেটরিতে ব্যবহৃত সেটআপটি গুছিয়ে নেওয়া একটি উত্তম অভ্যাস। চার্জ এড়ানোর জন্য আপনি ভিএম ইনস্ট্যান্স এবং/অথবা ক্লাউড প্রজেক্ট ডিলিটও করতে পারেন। ক্লাউড প্রজেক্ট ডিলিট করলে সেই প্রজেক্টের অধীনে ব্যবহৃত সমস্ত রিসোর্সের বিলিং বন্ধ হয়ে যায়।
- ক্লাউড স্টোরেজ বাকেটটি মুছে ফেলার জন্য, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
- গুগল ক্লাউড কনসোলে, ক্লাউড স্টোরেজ বাকেটস পৃষ্ঠায় যান।
- যে বাকেটটি মুছতে চান তার চেকবক্সটি নির্বাচন করুন, এবং তারপর ডিলিট বাটনে ক্লিক করুন।
- প্রদর্শিত ওভারলে উইন্ডোতে, আপনি বাকেট এবং এর ভেতরের সবকিছু মুছে ফেলতে চান কিনা তা নিশ্চিত করুন।

- BigQuery ডেটাসেটটি মুছে ফেলার জন্য, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
- Google Cloud কনসোলে, BigQuery পৃষ্ঠায় যান।
- এক্সপ্লোরার প্যানে আপনার প্রজেক্টটি এক্সপ্যান্ড করুন এবং একটি ডেটাসেট সিলেক্ট করুন।
- তিন-বিন্দু মেনুটি প্রসারিত করুন এবং ডিলিট-এ ক্লিক করুন।
- ডেটাসেট মুছুন ডায়ালগ বক্সে, ফিল্ডটিতে
deleteটাইপ করুন এবং তারপরে ডিলিট-এ ক্লিক করুন।
- সার্ভিস পেরিমিটারটি মুছে ফেলার জন্য, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
- গুগল ক্লাউড কনসোলে, 'Security' নির্বাচন করুন এবং তারপরে 'VPC Service Controls'- এ যান, যেখানে অ্যাক্সেস পলিসিটি নির্ধারিত আছে, এক্ষেত্রে ফোল্ডার লেভেলে।
- VPC সার্ভিস কন্ট্রোলস পেজে, আপনি যে পেরিমিটারটি মুছে ফেলতে চান তার সংশ্লিষ্ট টেবিলের সারিতে,
Delete Iconনির্বাচন করুন।
- অ্যাক্সেস লেভেলটি মুছে ফেলতে , নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
- গুগল ক্লাউড কনসোলে, ফোল্ডার স্কোপের অধীনে অ্যাক্সেস কনটেক্সট ম্যানেজার পেজটি খুলুন।
- গ্রিডে, আপনি যে অ্যাক্সেস লেভেলটি মুছতে চান তার সারিটি চিহ্নিত করুন, তিন-বিন্দু মেনু নির্বাচন করুন এবং তারপরে মুছুন (Delete ) নির্বাচন করুন।
- প্রজেক্টগুলো বন্ধ করতে, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
- গুগল ক্লাউড কনসোলে, আপনি যে প্রজেক্টটি মুছে ফেলতে চান তার IAM ও অ্যাডমিন সেটিংস পৃষ্ঠায় যান।
- IAM ও অ্যাডমিন সেটিংস পেজে, শাটডাউন নির্বাচন করুন।
- প্রজেক্ট আইডি প্রবেশ করান এবং ‘যাইহোক শাটডাউন করুন’ নির্বাচন করুন।
৮. অভিনন্দন!
এই কোডল্যাবে, আপনি একটি VPC সার্ভিস কন্ট্রোলস পেরিমিটার তৈরি করেছেন, সেটি প্রয়োগ করেছেন এবং এর সমস্যা সমাধান করেছেন।
আরও জানুন
আপনি নিম্নলিখিত পরিস্থিতিগুলোও খতিয়ে দেখতে পারেন:
-
project-1একটি ভিন্ন পরিধিতে যুক্ত করুন যা BigQuery, BigQuery ডেটা ট্রান্সফার সার্ভিস এবং ক্লাউড স্টোরেজকেও সুরক্ষিত রাখে। - অন্যান্য সমর্থিত উৎস থেকে BigQuery ডেটা স্থানান্তর সম্পাদন করুন।
- অবস্থান বা ডিভাইস পলিসির মতো অন্যান্য বৈশিষ্ট্যের মাধ্যমে ব্যবহারকারীর অ্যাক্সেস সীমাবদ্ধ করুন।
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে লাইসেন্সকৃত।