১. ভূমিকা
এই কোডল্যাবে, আপনি VPC সার্ভিস কন্ট্রোল ব্যবহার করে BigQuery API-কে কীভাবে সুরক্ষিত করতে হয় তা শিখবেন। কোডল্যাবটি সার্ভিস পেরিমিটার দ্বারা সুরক্ষিত কোনো API সার্ভিস ছাড়াই শুরু হয়, যা পাবলিক ডেটাসেটে কোয়েরি চালানোর এবং ফলাফল একটি প্রজেক্ট টেবিলে সংরক্ষণ করার সুযোগ দেয়। কোয়েরিটি একটি প্রজেক্টে চলে এবং টেবিলটি (যেখানে ফলাফল সংরক্ষিত হয়) অন্য একটি প্রজেক্টে তৈরি করা হয়। এটি এমন একটি সেটআপের অনুকরণ করে যেখানে ডেটা একটি প্রজেক্টে সংরক্ষণ করা যায় কিন্তু অন্য একটি প্রজেক্ট ব্যবহার করে তা অ্যাক্সেস করার প্রয়োজন হয়।
এরপরে, ডেটা প্রজেক্টকে সুরক্ষিত করার জন্য আমরা একটি সার্ভিস পেরিমিটার চালু করব। আপনি শিখবেন কীভাবে ইনগ্রেস রুল এবং ইগ্রেস রুল ব্যবহার করে পর্যবেক্ষণকৃত লঙ্ঘনগুলো সমাধান করতে হয়, এবং পরবর্তীতে অভ্যন্তরীণ আইপি অ্যাড্রেস ব্যবহার করে অ্যাক্সেস সীমাবদ্ধ করার জন্য একটি অ্যাক্সেস লেভেল যোগ করতে হয়। এই কোডল্যাবের লক্ষ্যগুলো হলো:
- যথাক্রমে ইনগ্রেস এবং ইগ্রেস নিয়ম ব্যবহার করে কীভাবে ইনগ্রেস এবং ইগ্রেস লঙ্ঘন সমাধান করতে হয় তা বুঝুন।
- একটি নির্দিষ্ট লঙ্ঘন কেন ঘটেছে তা বুঝুন।
- প্রয়োগকৃত লঙ্ঘন সংশোধনের পরিধি বিশ্লেষণ করুন।
- অ্যাক্সেস লেভেল ব্যবহার করে একটি VPC নেটওয়ার্কের অভ্যন্তরীণ IP অ্যাড্রেস থেকে ট্র্যাফিক অনুমোদনের বিকল্পটি কাজে লাগিয়ে ফিক্স (ইনগ্রেস/ইগ্রেস রুল)-এর পরিধি পরিবর্তন করুন।
২. সম্পদ স্থাপন এবং প্রয়োজনীয়তা
শুরু করার আগে
এই কোডল্যাবে আমরা ধরে নিচ্ছি যে আপনি ইতিমধ্যেই জানেন:
- BigQuery কোয়েরি চালানোর প্রাথমিক বিষয়সমূহ: BigQuery-তে উইকিপিডিয়া ডেটাসেট কীভাবে কোয়েরি করতে হয় তা শিখতে আপনি এই কোডল্যাবটি দেখতে পারেন।
- কীভাবে একটি ফোল্ডার তৈরি এবং পরিচালনা করবেন
- একটি ফোল্ডারে কীভাবে একটি প্রজেক্ট তৈরি করবেন অথবা ফোল্ডারের মধ্যে থাকা কোনো প্রজেক্ট কীভাবে স্থানান্তর করবেন
- স্কোপড অ্যাক্সেস পলিসি কীভাবে তৈরি করবেন
- কীভাবে একটি পরিষেবা পরিধি তৈরি এবং কনফিগার করবেন
- লগ থেকে নিরাপত্তা নীতি লঙ্ঘন কীভাবে খুঁজে বের করবেন
সেটআপ
আমাদের প্রাথমিক সেটআপটি নিম্নরূপভাবে ডিজাইন করা হয়েছে:
- একটি গুগল ক্লাউড সংস্থা।
- সংস্থার অধীনে একটি ফোল্ডার। এই কোডল্যাবের জন্য আমরা এটিকে
codelab-folderবলব। - দুটি গুগল ক্লাউড প্রজেক্ট একই ফোল্ডার,
codelab-folderঅধীনে রাখা হয়েছে। এই কোডল্যাবের জন্য, আমরা সেগুলোকেproject-1এবংproject-2বলি।- যদি আপনার ফোল্ডার এবং প্রজেক্টগুলো আগে থেকে তৈরি করা না থাকে, তাহলে গুগল ক্লাউড কনসোলে প্রতিষ্ঠানের অধীনে একটি ফোল্ডার তৈরি করুন এবং সেই ফোল্ডারের অধীনে দুটি নতুন প্রজেক্ট তৈরি করুন ।
- প্রয়োজনীয় অনুমতিসমূহ:
- ফোল্ডার ব্যবস্থাপনার জন্য IAM রোল : ফোল্ডার স্তরে নির্ধারিত
- প্রকল্প ব্যবস্থাপনার জন্য IAM ভূমিকা : প্রকল্প পর্যায়ে নির্ধারিত
- VPC সার্ভিস কন্ট্রোল কনফিগার করার জন্য প্রয়োজনীয় IAM রোলসমূহ : সংস্থা পর্যায়ে নির্ধারিত।
- BigQuery পরিচালনার জন্য IAM রোল : প্রজেক্ট লেভেলে নির্ধারিত
- কম্পিউট ইঞ্জিন ইনস্ট্যান্স পরিচালনার জন্য IAM রোলসমূহ : প্রজেক্ট লেভেলে নির্ধারিত
-
project-2এবংproject-1, উভয় প্রজেক্টের বিলিং অ্যাকাউন্ট।
একটি নিয়মিত পরিষেবা পরিধি তৈরি করুন
এই কোডল্যাবে, আমরা project-1 সুরক্ষিত করার জন্য একটি সাধারণ সার্ভিস পেরিমিটার ব্যবহার করব।
- একটি নিয়মিত পরিসীমা ,
perimeter-1, তৈরি করুন এবংproject-1যোগ করুন।
কম্পিউট ইঞ্জিন ভিএম তৈরি করুন
এই কোডল্যাবে, আমরা project-2 এর ১টি কম্পিউট ইঞ্জিন ইনস্ট্যান্স ব্যবহার করব, যা us-central1 এ অবস্থিত এবং default নামের ডিফল্ট VPC নেটওয়ার্ক ব্যবহার করছে।
- একটি পাবলিক ইমেজ থেকে কম্পিউট ইঞ্জিন ইনস্ট্যান্স তৈরি করার জন্য আপনি নির্দেশিকা হিসেবে ডকুমেন্টেশনটি দেখতে পারেন।
খরচ
ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে গুগল ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবের বাইরে বিলিং এড়াতে ব্যবহৃত রিসোর্সগুলো বন্ধ করে দেওয়ার পরামর্শ দেওয়া হচ্ছে। নতুন গুগল ক্লাউড ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
যে রিসোর্সগুলোর জন্য খরচ হয় সেগুলো হলো BigQuery এবং Compute Engine ইনস্ট্যান্স। আপনি BigQuery প্রাইসিং ক্যালকুলেটর এবং Compute Engine প্রাইসিং ক্যালকুলেটর ব্যবহার করে খরচ অনুমান করতে পারেন।
৩. VPC পরিষেবা নিয়ন্ত্রণের সীমাবদ্ধতা ছাড়াই BigQuery-তে প্রবেশাধিকার
পাবলিক ডেটাসেট কোয়েরি করুন এবং project-1 এ ফলাফল সংরক্ষণ করুন।
- BigQuery Studio পেজে গিয়ে
project-2এবংproject-1অ্যাক্সেস করে যাচাই করুন যে আপনি BigQuery API অ্যাক্সেস করতে পারছেন কিনা। আপনার তা করতে পারার কথা, কারণproject-1একটি সার্ভিস পেরিমিটারের মধ্যে থাকলেও, সেই পেরিমিটারটি এখনও কোনো সার্ভিসকে সুরক্ষা দিচ্ছে না। -
project-2থেকে, একটি পাবলিক ডেটাসেট কোয়েরি করতে নিম্নলিখিত কোয়েরিটি চালান।
SELECT name, SUM(number) AS total
FROM `bigquery-public-data.usa_names.usa_1910_2013`
GROUP BY name
ORDER BY total DESC
LIMIT 10;
পাবলিক ডেটাসেটে কোয়েরিটি চালানোর পর ( project-2 এ থাকা অবস্থায়):
- সেভ রেজাল্টস -এ ক্লিক করুন এবং BigQuery টেবিলটি নির্বাচন করুন। (নিচের স্ক্রিনশটটি দেখুন)।

- গন্তব্য প্রকল্প হিসেবে
project-1নির্বাচন করুন। - ডেটা সেটটির নাম
codelab_datasetদিন। (বিদ্যমান ডেটা সেট ব্যবহার না করলে, নতুন ডেটা সেট তৈরি করুন (CREATE NEW DATASET ) নির্বাচন করুন)।
- টেবিলটির নাম দিন:
codelab-table। - সংরক্ষণ করুন- এ ক্লিক করুন।
project-2 থেকে কোয়েরিটি চালানোর ফলে পাবলিক ডেটাসেটের ডেটা সফলভাবে project-1 এ সংরক্ষিত হয়েছে।
project-2 থেকে project-1 এ সংরক্ষিত কোয়েরি ডেটাসেট
project-2 BigQuery Studio-তে থাকা অবস্থায়, ডেটা সিলেক্ট করার জন্য নিম্নলিখিত কোয়েরিটি চালান:
- প্রকল্প:
project-1 - ডেটাসেট:
codelab_dataset - টেবিল:
codelab-table
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
কোয়েরিটি সফলভাবে রান হওয়া উচিত, কারণ project-2 বা project-1 কোনোটিই BigQuery ব্যবহারে সীমাবদ্ধ নয়। ব্যবহারকারীর যথাযথ IAM পারমিশন থাকা সাপেক্ষে যেকোনো স্থান থেকে BigQuery অ্যাক্সেস করা যায়।
এই ডায়াগ্রামটি সেই প্রক্রিয়াটি তুলে ধরে যখন একজন প্রিন্সিপাল একটি BigQuery ডেটাসেট কোয়েরি করে। প্রতিটি BigQuery কোয়েরি একটি BigQuery জব শুরু করে, যা পরবর্তীতে প্রকৃত অপারেশনটি সম্পাদন করে, এই ক্ষেত্রে, ডেটা পুনরুদ্ধার করে। একটি Compute Engine ইনস্ট্যান্স এবং ইন্টারনেট থেকে প্রিন্সিপাল অ্যাক্সেস দেখানো হয়েছে, যেখানে একটি পাবলিক ডেটাসেট এবং একটি পৃথক Google Cloud প্রজেক্ট থেকে কোয়েরি করা হচ্ছে। ডেটা কোয়েরি করার প্রক্রিয়াটি (
GetData ) VPC সার্ভিস কন্ট্রোল দ্বারা ব্লক না হয়েই সফল হয়।
৪. সোর্স ডেটাসেট প্রজেক্টে BigQuery API সুরক্ষিত করুন
পেরিমিটার perimeter-1 এর কনফিগারেশন পরিবর্তন করুন এবং project-1 নামক সুরক্ষিত রিসোর্সটির সাথে BigQuery API পরিষেবা সীমাবদ্ধ করুন।

পরিষেবা পরিধি প্রয়োগ যাচাই করুন
পূর্ববর্তী ধাপের মতো, project-2 থেকে BigQuery Studio-তে নিম্নলিখিত কোয়েরিটি চালান:
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
একটি VPC সার্ভিস কন্ট্রোলস RESOURCES_NOT_IN_SAME_SERVICE_PERIMETER লঙ্ঘন ঘটবে।

লঙ্ঘন অডিট লগটি project-1 এ অবস্থিত থাকবে, কারণ সেখানেই পেরিমিটার অতিক্রম করার লঙ্ঘনটি ঘটেছে। পর্যবেক্ষণকৃত vpcServiceControlsUniqueId দিয়ে লগগুলি ফিল্টার করা যাবে ( VPC_SC_DENIAL_UNIQUE_ID জায়গায় পর্যবেক্ষণকৃত ইউনিক আইডিটি বসান)।
severity=ERROR
resource.type="audited_resource"
protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata"
protoPayload.metadata.vpcServiceControlsUniqueId="[*VPC_SC_DENIAL_UNIQUE_ID*]"
লঙ্ঘনটি হলো egressViolations সংক্রান্ত। লঙ্ঘনসমূহ:
-
principalEmail: [কোয়েরি চালনাকারী ব্যবহারকারীর অ্যাকাউন্ট] -
callerIp: [যে ইউজার এজেন্ট কোয়েরিটি চালাচ্ছে তার আইপি অ্যাড্রেস]
"egressViolations": [
{
"targetResource": "projects/project-2",
"sourceType": "Resource",
"source": "projects/project-1",
"servicePerimeter": "accessPolicies/REDACTED/servicePerimeters/perimeter-1",
"targetResourcePermissions": [ "bigquery.jobs.create"]
} ],
৫. BigQuery জব তৈরির লঙ্ঘন সংশোধন করা
এই ডায়াগ্রামটি দেখায় যখন কোনো প্রিন্সিপাল
project-2 থেকে project-1 এর একটি ডেটাসেটের জন্য একটি কোয়েরি চালায়। যে প্রজেক্ট থেকে কোয়েরিটি চালানো হচ্ছে ( project-2 ), সেখানে ডেটাসেট প্রজেক্ট (প্রজেক্ট project-1 ) থেকে একটি BigQuery জব তৈরি করার অপারেশনটি একটি VPC সার্ভিস কন্ট্রোলস ইগ্রেস ভায়োলেশনের কারণে ব্যর্থ হয়, কারণ সার্ভিস পেরিমিটার perimeter-1 BigQuery API-কে সুরক্ষিত রাখে। এই পেরিমিটারটি চালু থাকলে, সার্ভিস পেরিমিটার কনফিগারেশন দ্বারা অনুমোদিত না হলে, project-1 থেকে পেরিমিটারের বাইরে বা পেরিমিটারের বাইরে থেকে সুরক্ষিত প্রজেক্টের দিকে কোনো BigQuery API অনুরোধ শুরু করা যায় না।
একটি বহির্গমন লঙ্ঘন সমাধান করা যেতে পারে একটি বহির্গমন নিয়ম তৈরি করার মাধ্যমে, যা নিম্নলিখিত বিষয়ের উপর ভিত্তি করে তৈরি:
- উৎস (FROM): অর্থাৎ ব্যবহারকারীর ইমেল ঠিকানা এবং প্রেক্ষাপট (যেমন: কলারের আইপি ঠিকানা, ডিভাইসের অবস্থা, অবস্থান, ইত্যাদি)।
- গন্তব্য (TO): অর্থাৎ লক্ষ্য সম্পদ, পরিষেবা এবং পদ্ধতি বা অনুমতি।
পর্যবেক্ষিত বহির্গমন লঙ্ঘনটি সমাধান করতে, একটি বহির্গমন নিয়ম তৈরি করুন যা BigQuery পরিষেবাতে এবং bigquery.jobs.create পদ্ধতি/অনুমতি ব্যবহার করে কোয়েরি চালনাকারী ব্যবহারকারী অ্যাকাউন্ট ( user@example.com ) দ্বারা টার্গেট রিসোর্স ( project-2 )-এর দিকে ট্র্যাফিকের অনুমতি দেয়।

কনফিগার করা বহির্গমন নিয়ম থেকে প্রত্যাশিত আচরণ:
- প্রেরক | পরিচয়: শুধুমাত্র নির্দিষ্ট পরিচয়
user@example.comকেই পরিধির সীমানা অতিক্রম করার অনুমতি দিতে হবে। - প্রতি | প্রকল্পসমূহ: নির্দিষ্ট পরিচয়টি শুধুমাত্র তখনই পরিধির সীমানা অতিক্রম করতে পারবে, যদি গন্তব্যস্থলটি নির্দিষ্ট প্রকল্প '
project-2হয়। - প্রতি | পরিষেবা: নির্দিষ্ট পরিচয়টি শুধুমাত্র নির্দিষ্ট পরিষেবা এবং পদ্ধতির জন্য এপিআই কল করলেই, নির্দিষ্ট প্রকল্পের দিকে পরিধির বাইরে ট্র্যাফিক শুরু করতে পারবে। অন্যথায়, উদাহরণস্বরূপ, যদি তারা পরিষেবা পরিধি দ্বারা সুরক্ষিত অন্য কোনো পরিষেবা ব্যবহার করার চেষ্টা করে, তাহলে অপারেশনটি ব্লক হয়ে যাবে কারণ অন্য পরিষেবাগুলো অনুমোদিত নয়।
সমাধানটি পরীক্ষা করুন: বহির্গমন নিয়ম
একবার বহির্গমন নিয়মটি কার্যকর হয়ে গেলে, একই কোয়েরিটি চালান।
SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;
আরেকটি লঙ্ঘন ঘটবে, এবার এটি একটি NO_MATCHING_ACCESS_LEVEL ইনগ্রেস ভায়োলেশন। নতুন এই লঙ্ঘনটি টার্গেট প্রজেক্ট এবং মেথডের দিক থেকে প্রথমটির থেকে ভিন্ন।

নতুন লঙ্ঘনটি হলো একটি প্রবেশ লঙ্ঘন যার সাথে
-
principalEmail: [কোয়েরি চালনাকারী ব্যবহারকারীর অ্যাকাউন্ট] -
callerIp: [যে ইউজার এজেন্ট কোয়েরিটি চালাচ্ছে তার আইপি অ্যাড্রেস]
ingressViolations: [
0: {
servicePerimeter: "accessPolicies/REDACTED/servicePerimeters/perimeter-1"
targetResource: "projects/project-1"
targetResourcePermissions: [0: "bigquery.tables.getData"]}
]
bigquery.tables.getData মেথডের এই লঙ্ঘনটি ঘটেছে BigQuery জব দ্বারা BigQuery টেবিল থেকে ডেটা নেওয়ার জন্য করা একটি API কলের কারণে।
৬. BigQuery টেবিলের ডেটা পাওয়ার জন্য নিয়ম লঙ্ঘন সংশোধন করা
একটি ইনগ্রেস রুল ইনগ্রেস ভায়োলেশন সংশোধন করার পাশাপাশি, সার্ভিসের পরিধি সীমানা অতিক্রম করার অনুমতি কাকে দেওয়া হবে তার উপর সূক্ষ্ম নিয়ন্ত্রণ প্রদান করে। এর সাথে অনুমোদিত অ্যাক্সেসের প্রেক্ষাপটও নির্ধারণ করা হয়, যেমন—সোর্স/টার্গেট প্রজেক্ট এবং তারা কোন এপিআই মেথড অ্যাক্সেস করতে পারবে।
একটি ইনগ্রেস ভায়োলেশন একটি ইনগ্রেস রুল দ্বারা সমাধান করা হয়, যা নিম্নরূপে কনফিগার করা থাকে:
- উৎস (FROM): অর্থাৎ ব্যবহারকারীর ইমেল ঠিকানা এবং প্রেক্ষাপট (যেমন: কলারের আইপি ঠিকানা, ডিভাইসের অবস্থা, অবস্থান, ইত্যাদি)।
- গন্তব্য (TO): অর্থাৎ লক্ষ্য সম্পদ, পরিষেবা এবং পদ্ধতি বা অনুমতি।
ইনগ্রেস রুলটি নির্দিষ্ট ব্যবহারকারীকে নির্দিষ্ট সার্ভিস এবং মেথডের মাধ্যমে project-1 এর দিকে ট্র্যাফিকের অনুমতি দেবে।

কনফিগার করা ইনগ্রেস রুল থেকে প্রত্যাশিত আচরণ:
- প্রেরক | পরিচয়: শুধুমাত্র নির্দিষ্ট পরিচয়
user@example.comকেই পরিধির সীমানা অতিক্রম করার অনুমতি দিতে হবে। - প্রতি | প্রকল্পসমূহ: নির্দিষ্ট পরিচয়টি শুধুমাত্র তখনই সীমানা অতিক্রম করতে পারবে, যদি গন্তব্যস্থলটি নির্দিষ্ট প্রকল্প '
project-1হয়। - প্রতি | পরিষেবা: নির্দিষ্ট পরিচয়টি পেরিমিটারের ভিতরে ট্র্যাফিক শুরু করতে পারবে শুধুমাত্র যদি এপিআই কলটি BigQuery API-এর জন্য এবং নির্দিষ্ট পদ্ধতি
bigquery.tables.getDataজন্য হয়।
এখন থেকে একই কোয়েরিটি VPC সার্ভিস কন্ট্রোলস লঙ্ঘন ছাড়াই যথাযথভাবে কাজ করবে।
আমরা project-1 এ BigQuery API সফলভাবে সীমাবদ্ধ করেছি, যাতে এটি শুধুমাত্র user@example.com ব্যবহার করতে পারে এবং user2@example.com ব্যবহার করতে না পারে।
এই ডায়াগ্রামটি দেখায় কিভাবে দুটি ভিন্ন প্রিন্সিপাল একই ডেটাসেট কোয়েরি করার চেষ্টা করে।
user2@example.com এর অ্যাক্সেস (ডটেড নীল লাইন) VPC সার্ভিস কন্ট্রোলস দ্বারা প্রত্যাখ্যাত হয়, কারণ সার্ভিস পেরিমিটার কনফিগারেশন অনুযায়ী তাদের project-1 থেকে বা project-1 এর দিকে BigQuery অপারেশন চালানোর অনুমতি নেই। user@example.com এর অ্যাক্সেস (সবুজ সলিড লাইন) সফল হয়, কারণ VPC সার্ভিস কন্ট্রোলস কনফিগারেশন অনুযায়ী তাদের project-1 থেকে এবং project-1 এর দিকে অপারেশন সম্পাদন করার অনুমতি রয়েছে।
৭. অভ্যন্তরীণ আইপি ঠিকানার উপর ভিত্তি করে পরিষেবা পরিধি দ্বারা অনুমোদিত ট্র্যাফিক সীমাবদ্ধ করুন।
বর্তমান কনফিগারেশনটি মনোনীত ব্যবহারকারীকে project-1 এর BigQuery-তে যেকোনো স্থান থেকে, অর্থাৎ ইন্টারনেটের যেকোনো জায়গা থেকে কোয়েরি চালানোর সুযোগ দেয়; যদি ডেটা কোয়েরি করার জন্য তাদের IAM অনুমতি দেওয়া থাকে এবং যতক্ষণ তারা তাদের নিজস্ব অ্যাকাউন্ট ব্যবহার করেন। নিরাপত্তার দৃষ্টিকোণ থেকে, এর অর্থ হলো, যদি অ্যাকাউন্টটি হ্যাক হয়, তবে যে কোনো ব্যক্তি অ্যাকাউন্টের অ্যাক্সেস পেলেই কোনো অতিরিক্ত বাধা ছাড়াই BigQuery-এর ডেটা অ্যাক্সেস করতে সক্ষম হবেন।
ব্যবহারকারীর প্রেক্ষাপট নির্দিষ্ট করার জন্য ইনগ্রেস এবং ইগ্রেস নিয়মে অ্যাক্সেস লেভেল ব্যবহার করে আরও বিধিনিষেধ আরোপ করা যেতে পারে। উদাহরণস্বরূপ, আপনি কলার আইডেন্টিটি দ্বারা অ্যাক্সেস অনুমোদনকারী পূর্বে কনফিগার করা একটি ইনগ্রেস নিয়মের সাথে একত্রে সোর্স আইপি-র উপর ভিত্তি করে অ্যাক্সেসের অনুমতি দিতে পারেন। সোর্স আইপি দ্বারা অ্যাক্সেস পাবলিক আইপি সিআইডিআর রেঞ্জের জন্য সম্ভব, যদি ব্যবহারকারী ক্লায়েন্টকে একটি পাবলিক আইপি বরাদ্দ করা থাকে, অথবা যদি ব্যবহারকারী ক্লায়েন্ট একটি গুগল ক্লাউড প্রজেক্ট থেকে কাজ করে তবে একটি অভ্যন্তরীণ আইপি অ্যাড্রেস ব্যবহার করেও এটি করা যায়।
অভ্যন্তরীণ আইপি অ্যাড্রেস অ্যাক্সেস শর্ত সহ অ্যাক্সেস লেভেল তৈরি করুন
একই স্কোপড অ্যাক্সেস পলিসি ফোল্ডারের অধীনে, একটি অ্যাক্সেস লেভেল তৈরি করতে অ্যাক্সেস কনটেক্সট ম্যানেজার পৃষ্ঠাটি খুলুন।
- অ্যাক্সেস কনটেক্সট ম্যানেজার পেজে, CREATE ACCESS LEVEL নির্বাচন করুন।
- নতুন অ্যাক্সেস লেভেল প্যানে:
- একটি শিরোনাম দিন : আপনি
codelab-alব্যবহার করতে পারেন। - Conditions সেকশনে, IP subnetworks- এ ক্লিক করুন।
- প্রাইভেট আইপি ট্যাবটি নির্বাচন করুন এবং সিলেক্ট ভিপিসি নেটওয়ার্কস-এ ক্লিক করুন।
- 'Add VPC Networks' প্যানে থেকে, আপনি
defaultনেটওয়ার্কটি ব্রাউজ করে খুঁজে নিতে পারেন অথবা//compute.googleapis.com/projects/project-2/global/networks/defaultএই ফরম্যাটে সম্পূর্ণ নেটওয়ার্কের নামটি ম্যানুয়ালি লিখতে পারেন। - ভিপিসি নেটওয়ার্ক যোগ করুন -এ ক্লিক করুন।
- আইপি সাবনেট নির্বাচন করুন -এ ক্লিক করুন।
- যে অঞ্চলে ভিএম ইনস্ট্যান্সটি অবস্থিত, সেটি নির্বাচন করুন। এই কোডল্যাবের জন্য, এটি হলো
us-central1। - সংরক্ষণ করুন-এ ক্লিক করুন।
- একটি শিরোনাম দিন : আপনি
আমরা একটি অ্যাক্সেস লেভেল তৈরি করেছি, যা এখনও কোনো পেরিমিটার বা ইনগ্রেস/ইগ্রেস পলিসিতে প্রয়োগ করা হচ্ছে না।

ইনগ্রেস রুলে অ্যাক্সেস লেভেল যোগ করুন
ইনগ্রেস রুল দ্বারা অনুমোদিত ব্যবহারকারী যেন অ্যাক্সেস লেভেলের সাথেও যাচাইকৃত হয়, তা নিশ্চিত করার জন্য ইনগ্রেস রুলে অ্যাক্সেস লেভেল কনফিগার করা প্রয়োজন। যে ইনগ্রেস রুলটি কোয়েরি ডেটাতে অ্যাক্সেস অনুমোদন করে, সেটি perimeter-1 এ রয়েছে। সোর্স হিসেবে codelab-al অ্যাক্সেস লেভেলটি নির্ধারণ করতে ইনগ্রেস রুলটি পরিবর্তন করুন।

নতুন কনফিগারেশন পরীক্ষা করা হচ্ছে
ইনগ্রেস রুলে অ্যাক্সেস লেভেল যোগ করার পর, project-2 প্রজেক্টের জন্য default VPC নেটওয়ার্কে থাকা ক্লায়েন্ট থেকে এক্সিকিউট না করলে একই BigQuery কোয়েরিটি ব্যর্থ হবে। এই আচরণটি যাচাই করার জন্য, এন্ডপয়েন্ট ডিভাইসটি ইন্টারনেটের সাথে সংযুক্ত থাকা অবস্থায় Google Cloud কনসোল থেকে কোয়েরিটি চালান। কোয়েরিটি অসফলভাবে শেষ হবে এবং এর সাথে একটি ইনগ্রেস ভায়োলেশনের ইঙ্গিত দেখা যাবে।
project-2 এ অবস্থিত default ভিপিসি নেটওয়ার্ক থেকে একই কোয়েরি চালানো যেতে পারে। একইভাবে, default ভিপিসি নেটওয়ার্ক ব্যবহার করে project-2 এ অবস্থিত একটি কম্পিউট ইঞ্জিন ইনস্ট্যান্স থেকে একই BigQuery কোয়েরি এক্সিকিউট করলেও তা ব্যর্থ হবে। এর কারণ হলো, ইনগ্রেস রুলটি এখনও শুধুমাত্র user@example.com প্রিন্সিপালকে অনুমতি দেওয়ার জন্য কনফিগার করা আছে। কিন্তু, ভিএমটি কম্পিউট ইঞ্জিনের ডিফল্ট সার্ভিস অ্যাকাউন্ট ব্যবহার করছে।
project-2 এর কম্পিউট ইঞ্জিন ইনস্ট্যান্স থেকে একই কমান্ড সফলভাবে চালানোর জন্য, নিশ্চিত করুন যে:
- ভিএম-টির BigQuery API ব্যবহার করার অ্যাক্সেস স্কোপ রয়েছে। ভিএম অ্যাক্সেস স্কোপ হিসেবে ‘Allow full access to all Cloud APIs’ নির্বাচন করার মাধ্যমে এটি করা যায়।
- ভিএম-এর সাথে সংযুক্ত সার্ভিস অ্যাকাউন্টটির নিম্নলিখিত IAM অনুমতিগুলো প্রয়োজন:
-
project-2এ BigQuery জব তৈরি করুন -
project-1এ অবস্থিত BigQuery টেবিল থেকে BigQuery ডেটা নিন।
-
- ইনগ্রেস এবং ইগ্রেস নিয়মের মাধ্যমে ডিফল্ট কম্পিউট ইঞ্জিন সার্ভিস অ্যাকাউন্টকে অনুমতি দিতে হবে।
এখন আমাদের ইনগ্রেস রুলে (বিগকোয়েরি টেবিল থেকে ডেটা নেওয়ার অনুমতি দিতে) এবং ইগ্রেস রুলে (বিগকোয়েরি জব তৈরির অনুমতি দিতে) কম্পিউট ইঞ্জিনের ডিফল্ট সার্ভিস অ্যাকাউন্টটি যোগ করতে হবে।

default VPC নেটওয়ার্কে থাকা project-2 এর একটি Compute Engine ইনস্ট্যান্স থেকে, নিম্নলিখিত bq query কমান্ডটি চালান:
bq query --nouse_legacy_sql \
'SELECT name, total
FROM `project-1.codelab_dataset.codelab-table`
ORDER BY total DESC
LIMIT 10;'
বর্তমান কনফিগারেশন অনুযায়ী, BigQuery কমান্ডটি কেবল তখনই সফল হবে যদি:
-
project-2এর ডিফল্ট ভিপিসি নেটওয়ার্ক ব্যবহার করে একটি ভিএম-এ চালান, এবং - নির্দিষ্ট
us-central1অঞ্চলে (আইপি সাবনেটওয়ার্ক) অবস্থিত, এবং - সার্ভিস পেরিমিটারে কনফিগার করা ডিফল্ট কম্পিউট ইঞ্জিন সার্ভিস অ্যাকাউন্ট ব্যবহার করে চালান।
অন্য যেকোনো জায়গা থেকে চালালে BigQuery কমান্ডটি ব্যর্থ হবে, যার মধ্যে রয়েছে:
- যদি
project-2এর ডিফল্ট ভিপিসি নেটওয়ার্ক ব্যবহার করে এমন কোনো ভিএম-এ চালানো হয়, কিন্তু সেটি অ্যাক্সেস লেভেলে যোগ করা সাবনেটের চেয়ে ভিন্ন অঞ্চলে অবস্থিত হয়, অথবা - যদি
user@example.comনামের ব্যবহারকারী ইন্টারনেটে কোনো ইউজার ক্লায়েন্টের মাধ্যমে এটি চালান।
এই ডায়াগ্রামটি একই প্রিন্সিপাল,
user@example.com , দ্বারা দুটি ভিন্ন অবস্থান থেকে শুরু করা অ্যাক্সেস চিত্রিত করে: ইন্টারনেট এবং একটি Compute Engine ইনস্ট্যান্স। ইন্টারনেট থেকে সরাসরি BigQuery-তে অ্যাক্সেস (নীল ডটেড লাইন) VPC সার্ভিস কন্ট্রোল দ্বারা ব্লক করা হয়েছে, অন্যদিকে একটি VM থেকে অ্যাক্সেস (সবুজ সলিড লাইন) —Compute Engine-এর ডিফল্ট সার্ভিস অ্যাকাউন্ট ইমপারসোনেট করার সময়— অনুমোদিত। এই অনুমোদিত অ্যাক্সেসের কারণ হলো, সার্ভিস পেরিমিটারটি একটি অভ্যন্তরীণ IP অ্যাড্রেস থেকে সুরক্ষিত রিসোর্সগুলিতে অ্যাক্সেসের অনুমতি দেওয়ার জন্য কনফিগার করা হয়েছে।
৮. পরিচ্ছন্নতা
সার্ভিসটি ব্যবহার না করা হলে ভিপিসি সার্ভিস কন্ট্রোলস ব্যবহারের জন্য কোনো আলাদা চার্জ না থাকলেও, এই ল্যাবরেটরিতে ব্যবহৃত সেটআপটি গুছিয়ে নেওয়া একটি উত্তম অভ্যাস। চার্জ এড়ানোর জন্য আপনি ভিএম ইনস্ট্যান্স এবং বিগকোয়েরি ডেটাসেট, অথবা গুগল ক্লাউড প্রজেক্টগুলোও ডিলিট করে দিতে পারেন। ক্লাউড প্রজেক্ট ডিলিট করে দিলে সেই প্রজেক্টের অধীনে ব্যবহৃত সমস্ত রিসোর্সের বিলিং বন্ধ হয়ে যায়।
- ভিএম ইনস্ট্যান্সটি মুছে ফেলার জন্য, নিম্নলিখিত ধাপগুলো সম্পন্ন করুন:
- গুগল ক্লাউড কনসোলে, ভিএম ইনস্ট্যান্স পেজে যান।
- ভিএম ইনস্ট্যান্স নামের বাম পাশের চেকবক্সটি সিলেক্ট করুন, এরপর ডিলিট সিলেক্ট করুন এবং নিশ্চিত করতে আবার ডিলিট-এ ক্লিক করুন।

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