VPC পরিষেবা নিয়ন্ত্রণ - BigQuery ডেটা স্থানান্তর পরিষেবা সুরক্ষা৷

১. ভূমিকা

এই ল্যাবে, আমরা শিখব কিভাবে ক্লাউড স্টোরেজ থেকে একটি BigQuery ডেটাসেটে ডেটা স্থানান্তরের সময় VPC সার্ভিস কন্ট্রোলস ব্যবহার করে BigQuery ডেটা ট্রান্সফার সার্ভিসকে সুরক্ষিত করতে হয়। এরপর আমরা ক্লাউড স্টোরেজকে সুরক্ষিত করি এবং ক্লাউড স্টোরেজ থেকে BigQuery-তে ডেটা স্থানান্তরের জন্য প্রক্রিয়াটি পুনরাবৃত্তি করি। ক্লাউড স্টোরেজকে সুরক্ষিত করার ফলে একটি VPC সার্ভিস কন্ট্রোলস ভায়োলেশন ঘটে, যা সফলভাবে স্থানান্তরের জন্য ঠিক করা প্রয়োজন। সবশেষে, আমরা BigQuery-কেও সুরক্ষিত করি এবং তারপর প্রজেক্টগুলোর মধ্যে ডেটাসেট কপি করার চেষ্টা করি, যার ফলেও একটি ভায়োলেশন ঘটে যা ঠিক করা প্রয়োজন।

এই ল্যাব জুড়ে আমরা দেখব কিভাবে যথাক্রমে ইনগ্রেস এবং ইগ্রেস রুল ব্যবহার করে ইনগ্রেস এবং ইগ্রেস ভায়োলেশন উভয়ই সমাধান করা যায়। আমরা BigQuery ডেটা ট্রান্সফার ইনগ্রেস ভায়োলেশন সমাধান করার জন্য একটি অ্যাক্সেস লেভেলও ব্যবহার করব। এই কোডল্যাবের লক্ষ্যগুলো হলো:

  • বিভিন্ন পরিষেবা, বিশেষ করে ক্লাউড স্টোরেজ, বিগকোয়েরি এবং বিগকোয়েরি ডেটা ট্রান্সফার সার্ভিসে, যথাক্রমে ইনগ্রেস এবং ইগ্রেস রুল ব্যবহার করে কীভাবে ইনগ্রেস ও ইগ্রেস ভায়োলেশন সমাধান করতে হয় তা বুঝুন।
  • একটি নির্দিষ্ট লঙ্ঘন কেন ঘটেছে তা বুঝুন।

২. সম্পদ স্থাপন এবং প্রয়োজনীয়তা

শুরু করার আগে

এই কোডল্যাবে আমরা ধরে নিচ্ছি যে আপনি ইতিমধ্যেই জানেন:

সেটআপ

আমাদের প্রাথমিক সেটআপটি নিম্নরূপভাবে ডিজাইন করা হয়েছে:

কোডল্যাব প্রাথমিক সেটআপ ডায়াগ্রাম

একটি সীমিত পরিসরের নীতি এবং একটি নিয়মিত পরিষেবা পরিধি তৈরি করুন

এই কোডল্যাবে, আমরা project-2 সুরক্ষিত করার জন্য একটি সাধারণ সার্ভিস পেরিমিটার ব্যবহার করব।

perimeter-2 এর মধ্যে BigQuery Data Transfer API সীমাবদ্ধ করুন।

ডেটা ট্রান্সফার সার্ভিসকে সুরক্ষিতকারী VPC SC কনফিগারেশন।

ক্লাউড স্টোরেজ বাকেট এবং বিগকোয়েরি ডেটাসেট তৈরি করা

এই কোডল্যাবের জন্য, বিষয়বস্তু নির্বিশেষে যেকোনো 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

ক্লাউড স্টোরেজে csv ফাইল আপলোড করতে cp কমান্ড চালান।

তৈরি করা বাকেটে ফাইলটি আপলোড হয়েছে কিনা তা আপনি বাকেটের অবজেক্টগুলো তালিকাভুক্ত করে অথবা নিম্নলিখিত কমান্ডটি চালিয়ে যাচাই করতে পারেন:

gcloud storage ls --recursive gs://codelab-bqtransfer-bucket/**

project-2 এ BigQuery ডেটাসেট এবং টেবিল তৈরি করুন

  1. এই ধাপগুলো অনুসরণ করে project-2 এ একটি BigQuery ডেটাসেট তৈরি করুন।
    1. ডেটা সেট আইডি-এর জন্য, একটি অনন্য ডেটা সেটের নাম লিখুন। এই কোডল্যাবের জন্য, আমরা ব্যবহার করি: codelab_bqtransfer_dataset
    2. লোকেশন টাইপ-এর জন্য, ডেটাসেটের জন্য একটি ভৌগোলিক অবস্থান বেছে নিন। এই কোডল্যাবের জন্য, আমরা ক্লাউড স্টোরেজ বাকেটের মতোই একই অবস্থান ব্যবহার করছি: ইউএস (মার্কিন যুক্তরাষ্ট্রের একাধিক অঞ্চল)BigQuery ডেটাসেট তৈরি।
  2. এই ধাপগুলো অনুসরণ করে codelab_bqtransfer_dataset নামক তৈরি করা ডেটাসেটের অধীনে একটি BigQuery টেবিল তৈরি করুন।
    1. সোর্স সেকশনে, 'Create table from list'-এ 'Empty table' নির্বাচন করুন।
    2. টেবিল ফিল্ডে, আপনি যে টেবিলটি তৈরি করতে চান তার নাম লিখুন। এই কোডল্যাবের জন্য, আমরা codelab-bqtransfer-table নামটি ব্যবহার করেছি।
    3. যাচাই করুন যে টেবিল টাইপ ফিল্ডটি নেটিভ টেবিলে সেট করা আছে।
    4. স্কিমা বিভাগে, স্কিমা সংজ্ঞাটি লিখুন। আপনি '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 এর বিগকোয়েরি ডেটা ট্রান্সফার সার্ভিসটিকে সুরক্ষিত রাখবে। শুধুমাত্র বিগকোয়েরি ডেটা ট্রান্সফার সার্ভিসকে সুরক্ষিত রাখলে (বিগকোয়েরি এবং ক্লাউড স্টোরেজকে সুরক্ষিত না করে), প্রিন্সিপালরা কেবল ডেটা ট্রান্সফার তৈরি এবং পরিচালনা করতে পারবে (যেমন ম্যানুয়ালি ডেটা ট্রান্সফার শুরু করা)।

ক্লাউড স্টোরেজ থেকে ডেটা স্থানান্তর সেটআপ করুন

ডেটা ট্রান্সফার তৈরি করতে, এই ধাপগুলো অনুসরণ করুন:

  1. project-2 এর গুগল ক্লাউড কনসোলে BigQuery পৃষ্ঠায় যান।
  2. ডেটা স্থানান্তর-এ ক্লিক করুন।

ডেটা ট্রান্সফার সার্ভিস পেজে VPC SC লঙ্ঘন।

ডেটা স্থানান্তর পৃষ্ঠা অ্যাক্সেস করার সময় লঙ্ঘনটি তদন্ত করুন।

গুগল ক্লাউড কনসোলে, আমরা ভিপিসি সার্ভিস কন্ট্রোলস-এর অনন্য শনাক্তকারীটি দেখতে পাই। লগ ফিল্টার করতে এবং লঙ্ঘনের বিবরণ শনাক্ত করতে একই শনাক্তকারী ব্যবহার করুন (অবজার্ভড ডিনায়াল আইডি দিয়ে 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 সার্ভিস এবং এর সমস্ত মেথডে অ্যাক্সেসের অনুমতি দেয়।

ডেটা স্থানান্তর পদ্ধতি অনুমোদনের জন্য ইনগ্রেস নিয়ম।

ইনগ্রেস রুলটি সেট করা হয়ে গেলে, ডেটা ট্রান্সফার পেজটিতে প্রবেশ করতে কোনো সমস্যা হওয়ার কথা নয়।

ক্লাউড স্টোরেজ থেকে ডেটা স্থানান্তরের সেটআপ পুনরায় শুরু করুন।

পূর্ববর্তী ধাপগুলো থেকে, ডেটা ট্রান্সফার পেজে থাকাকালীন (ডেটা ট্রান্সফার-এ ক্লিক করার পর), নিম্নলিখিত ধাপগুলো অনুসরণ করুন:

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

যেহেতু আমরা শিডিউল অপশন হিসেবে ‘এখনই শুরু করুন’ নির্বাচন করেছি, তাই ‘সংরক্ষণ করুন’ নির্বাচন করার সাথে সাথেই প্রথম স্থানান্তরটি শুরু হয়ে যাবে।

ডেটা স্থানান্তর পরিষেবার অবস্থা যাচাই করুন

কনফিগার করা ডেটা ট্রান্সফারের অবস্থা যাচাই করতে:

ডেটা ট্রান্সফার সার্ভিস জব।

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

ডেটা ট্রান্সফার সার্ভিস চালু থাকার বিবরণ।

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

৪. ম্যানুয়ালি শুরু করা ডেটা স্থানান্তরের জন্য আইপি অ্যাড্রেসের সীমাবদ্ধতা

বর্তমানে কনফিগার করা ইনগ্রেস নিয়মগুলি কনফিগার করা আইডেন্টিটিকে যেকোনো আইপি অ্যাড্রেস থেকে ম্যানুয়ালি ডেটা ট্রান্সফার শুরু করার অনুমতি দেয়।

অ্যাক্সেস লেভেল ব্যবহারের মাধ্যমে, ভিপিসি সার্ভিস কন্ট্রোলস নির্দিষ্ট এপিআই রিকোয়েস্ট অ্যাট্রিবিউটের ভিত্তিতে অনুমোদিত অ্যাক্সেস সীমিত করার সুবিধা প্রদান করে, বিশেষত:

  • আইপি সাবনেটওয়ার্ক: অনুরোধটি কোনো নির্দিষ্ট আইপি ঠিকানা থেকে আসছে কিনা তা যাচাই করে।
  • অঞ্চল: অনুরোধটি কোনো নির্দিষ্ট অঞ্চল থেকে আসছে কিনা তা যাচাই করে, যা আইপি অ্যাড্রেসের ভূ-অবস্থান দ্বারা নির্ধারিত হয়।
  • প্রিন্সিপালস: অনুরোধটি কোনো নির্দিষ্ট অ্যাকাউন্ট থেকে আসছে কিনা তা যাচাই করে।
  • ডিভাইস নীতি: অনুরোধটি নির্দিষ্ট শর্ত পূরণকারী কোনো ডিভাইস থেকে আসছে কিনা তা যাচাই করে।

ইতিমধ্যে কনফিগার করা ইনগ্রেস রুলের সাথে এই অ্যাট্রিবিউটগুলোর যাচাইকরণ কার্যকর করতে, আমাদের এমন একটি অ্যাক্সেস লেভেল তৈরি করতে হবে যা কাঙ্ক্ষিত অ্যাট্রিবিউটগুলোকে অনুমোদন করে, এবং তারপর তৈরি করা অ্যাক্সেস লেভেলটিকে ইনগ্রেস রুলের সোর্স হিসেবে যুক্ত করতে হবে।

ব্যবহারকারীর আইপি অ্যাড্রেস দ্বারা VPC SC দ্বারা অ্যাক্সেস সুরক্ষিত। এই ডায়াগ্রামটি তিনটি পরিস্থিতিতে দুটি প্রিন্সিপাল ( user@example.com এবং user2@example.com ) দ্বারা শুরু করা অ্যাক্সেস চিত্রিত করে, যা দেখায় কিভাবে VPC সার্ভিস কন্ট্রোলস সোর্স (ইনগ্রেস অ্যাক্সেস লেভেল) এবং আইডেন্টিটি অ্যাট্রিবিউটগুলোকে একটি AND শর্ত হিসাবে মূল্যায়ন করে, যেখানে উভয়কেই মিলতে হয়।

  1. ব্যবহারকারী user@example.com-কে অ্যাক্সেস লেভেল দ্বারা অনুমোদিত একটি আইপি অ্যাড্রেস থেকে অ্যাক্সেস করার অনুমতি দেওয়া হয়, কারণ তার আইপি অ্যাড্রেস এবং ইউজার অ্যাকাউন্ট ইনগ্রেস রুলের কনফিগারেশনের সাথে মিলে যায়।
  2. ব্যবহারকারী user@example.com-এর অ্যাক্সেস ব্লক করা হয়েছে, কারণ তার আইপি অ্যাড্রেস অনুমোদিত আইপি অ্যাড্রেসের সাথে মেলে না, যদিও তার অ্যাকাউন্টটিই ইনগ্রেস রুলে কনফিগার করা আছে।
  3. ব্যবহারকারী user2@example.com একটি অনুমোদিত আইপি ঠিকানা থেকে অ্যাক্সেসের চেষ্টা করা সত্ত্বেও তার অ্যাক্সেস ব্লক করা হয়েছে, কারণ ইনগ্রেস রুল দ্বারা তার অ্যাকাউন্টটি অনুমোদিত নয়।

অ্যাক্সেস স্তর তৈরি করুন

আইপি অ্যাড্রেস অনুযায়ী অ্যাক্সেস সীমিত করার জন্য অ্যাক্সেস লেভেল তৈরি করতে:

  1. গুগল ক্লাউড কনসোলে অ্যাক্সেস কনটেক্সট ম্যানেজার পৃষ্ঠাটি খুলুন।
    • অনুরোধ করা হলে, codelab-folder ফোল্ডারটি নির্বাচন করুন।
  2. অ্যাক্সেস কনটেক্সট ম্যানেজার পেজের শীর্ষে, ক্রিয়েট অ্যাক্সেস লেভেল (CREATE ACCESS LEVEL ) -এ ক্লিক করুন।
  3. 'New Access Level' প্যানে, নতুন অ্যাক্সেস লেভেলটির একটি শিরোনাম দিন। এই কোডল্যাবের জন্য, আমরা এর নাম দেব project_2_al '।
  4. Conditions সেকশনে, IP subnetworks- এর সামনে থাকা + চিহ্নে ক্লিক করুন।
  5. IP সাবনেটওয়ার্ক বক্সে, পাবলিক IP নির্বাচন করুন।

ইনগ্রেস রুলে অ্যাক্সেস লেভেল যোগ করুন

ইনগ্রেস রুলের মধ্যে, অ্যাক্সেস লেভেলকে 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-গুলোর একটি হিসেবে যুক্ত করুন।

ক্লাউড স্টোরেজকে সুরক্ষিতকারী ভিপিসি এসসি কনফিগারেশন।

ক্লাউড স্টোরেজ এপিআই সুরক্ষিত করার পর, পরবর্তী নির্ধারিত ডেটা ট্রান্সফারের জন্য অপেক্ষা করুন, অথবা নিম্নলিখিত ধাপগুলো অনুসরণ করে ম্যানুয়ালি একটি ট্রান্সফার শুরু করুন :

  1. Google Cloud কনসোলে BigQuery পৃষ্ঠায় যান।
  2. ডেটা স্থানান্তর-এ ক্লিক করুন।
  3. তালিকা থেকে আপনার ট্রান্সফার বেছে নিন: এই কোডল্যাবের জন্য, আমরা কোডল্যাব ট্রান্সফার ব্যবহার করছি।
  4. এখনই স্থানান্তর চালান-এ ক্লিক করুন
  5. OK ক্লিক করুন।

আরেকটি ট্রান্সফার শুরু করা হবে। এটি দেখার জন্য আপনাকে পেজটি রিফ্রেশ করতে হতে পারে। এবার VPC সার্ভিস কন্ট্রোলস ভায়োলেশনের কারণে ট্রান্সফারটি ব্যর্থ হবে।

BigQuery ডেটাসেট কপি করার জন্য VPC SC লঙ্ঘন।

ক্লাউড স্টোরেজ ভিপিসি পরিষেবা নিয়ন্ত্রণ লঙ্ঘনের তদন্ত করুন

ট্রান্সফার সামারিতে প্রদর্শিত 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 কমান্ডটি চালাচ্ছে।

BigQuery-এর সমস্ত মেথড অ্যাক্সেসের অনুমতি দেওয়ার জন্য ইগ্রেস রুল।

একবার ইগ্রেস রুলটি চালু হয়ে গেলে, perimeter-2 এ ডেটাসেটটি কপি করার জন্য একই কমান্ডটি চালান। এবার, এটি কোনো ভিপিসি সার্ভিস কন্ট্রোলস লঙ্ঘন ছাড়াই ডেটাসেটটি সফলভাবে কপি করে ফেলবে।

৭. পরিচ্ছন্নতা

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

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

৮. অভিনন্দন!

এই কোডল্যাবে, আপনি একটি VPC সার্ভিস কন্ট্রোলস পেরিমিটার তৈরি করেছেন, সেটি প্রয়োগ করেছেন এবং এর সমস্যা সমাধান করেছেন।

আরও জানুন

আপনি নিম্নলিখিত পরিস্থিতিগুলোও খতিয়ে দেখতে পারেন:

  • project-1 একটি ভিন্ন পরিধিতে যুক্ত করুন যা BigQuery, BigQuery ডেটা ট্রান্সফার সার্ভিস এবং ক্লাউড স্টোরেজকেও সুরক্ষিত রাখে।
  • অন্যান্য সমর্থিত উৎস থেকে BigQuery ডেটা স্থানান্তর সম্পাদন করুন।
  • অবস্থান বা ডিভাইস পলিসির মতো অন্যান্য বৈশিষ্ট্যের মাধ্যমে ব্যবহারকারীর অ্যাক্সেস সীমাবদ্ধ করুন।

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে লাইসেন্সকৃত।